原文 http://blog.csdn.net/lima01/archive/2010/05/19/5606192.aspx
在多用户、高并发、高吞吐量的 Web应用中,用户经常通过配置多个 Web应用服务器并发处理大量用户的请求,实现负载均衡、灾难回复,提高可用性和可扩展性。
在多节点的环境中,如何实现 Web Session数据的高速共享、复制、迁移是架构成功与否的关键。
由于大多数 Web应用服务器都采用 Java序列化和数据广播方式实现 session数据的共享,导致任何一个节点对任何 session数据进行修改,都造成大量的内存、 CPU以及网络带宽的消耗。这种消耗随着应用服务器节点的增加而成级数级增长。当节点数目超过 4个以上的时候,经常由于 session复制导致的消耗过高,使得整个集群的吞吐量反而开始下降。由于普通 session复制机制性能和可用性的缺陷,很多 web开发人员不得不通过数据保存和共享 session相关的数据,因此又增加了对数据库的压力,形成新的性能瓶颈。
Terracotta的 web session方案利用 Terracotta集群实现 sessino数据的共享。不使用广播机制,也不对整个 session数据做序列化,因此 session数据复制的消耗极小,允许用户横向扩展应用服务器的数量儿不必担心系统消耗形成的瓶颈。
下图是基于 Terracotta的 Web Session集群方案的体系架构图:
Web Session数据通过 Terracotta服务器实现了数据的持久化、节点间的复制以及灾难回复等。
基于 Terracotta的解决方案的特点及优势包括:
下图显示了基于 Terracotta的 Session集群解决方案与 Tomcat内置解决方案的性能数据对比:
从图中可见, Tomcat内置的方案在增加节点数,对整个集群的吞吐量帮助不大。而基于 Terracotta的方案可以实现吞吐量随着节点数的增加而线性增长。
Terracotta的 Web Session解决方案建议用户使用 session粘性负载均衡机制,让相同用户的请求尽量由相同的 web服务器处理,这样可以最大限度地做到数据本地化分片,实现最佳的整体性能。同时在灾难发生的时候,还能实现 web请求和 session的自动迁移。
Quartz是 Java领域最著名的开源 Java任务调度工具。它允许用户通过类似 Unix上 crontab类似的任务计划语法定义对 Java任务的调度计划。
Terracotta于 2009年末并购了 Quartz项目,并将它与 Terracotta核心平台进行紧密整合,为用户提供一个可以从小量任务、单机环境到大量任务、分布式环境平滑过度的全面的 Java任务调度平台。
与其他 Terracotta解决方案一样,用户可以从单机环境开始开发实施,随着应用需求和环境的升级扩展,只需要修改配置文件,就可以逐步扩展到多机集群环境。
下图是 Quartz与 Terracotta整合后的系统架构:
Terracotta Quartz解决方案的特点包括: