用Spring Web Flow和Terracotta搭建Web应用 - 编程入门网
态从一个节点迁移到另一个节点。
当我们说集群时意味着什么,它和缓存有什么区别?我们使用的集群定义是: 在多个JMV间共享应用状态,而缓存可以被定义为: 让应用状态靠近执行上下文。从这个角度看,缓存是集群的一个子集。 我们所认为的企业级Web/企业集群最小解决方案集至少需要包括: 可扩展性 高可用性 fail-over 性能 对已有代码的最小影响 简单的部署和配置 可见运行时(监控) 让我们关注一个能解决所有这些看上去无关的需求的解决方案。通常解决一个问题有很多方案,而且市场上也有很多宣称能给web应用提供高可用性的产品。Terracotta就提供了这样一个解决方案。 什么是Terracotta for Spring? Terracotta for Spring是基于Spring应用的运行时,它为Spring 应用提供了透明的高性能集群支持,对应用代码和部署及配置流程影响都很小。它通过在应用下面的堆级别进行集群而不是直接集群应用。 这让开发者能够开发与无状态方式不同的单节点有状态Spring应用。这使得在需要扩展的应用开始设计时不考虑集群。而在应用需要扩展或者要保证搞可用性和故障恢复时,他们只需要在Terracotta 配置文件中定义哪些Spring应用上下文中的beans需要进行集群。Terracotta for Spring 使得应用能够被自动和透明的集群,还保证在集群间的语义和单节点一样。 对于Spring Web Flow来说,这实际上更简单。用户为了获得web应用的状态和持续仓库的集群能力, 只需要在Terracotta配置文件中把特定的web应用声明为启用“session-support”。(详细内容见下面的章节“声明式配置”) 从宏观上看,Terracotta for Spring提供了: HTTP session状态的集群。保证Spring Web Flow中的用户状态和扩展仓库或放入HTTP session的其它状态的高可用性和故障恢复能力。 Spring bean的集群。Springbean的生命周期语义和域在集群间被保存,它们在“逻辑”上相同的ApplicationContext中。目前能被集群的bean类型是singleton和session scoped. 用户可以声明式配置哪个application contexts中的哪个bean需要被集群。 透明集群POJO。不需要修改已有的代码,甚至不需要源代码。应用基于很少的声明式XML 配置文件,在载入期透明的生效。Terracotta for Spring不需要实现Serializable, Externalizable或其它接口的类。能这样实现的原因它并没有使用序列化,而只是将实际的差量和已经改变了的数据传输给当前需要的节点(lazily)。 虚拟内存管理。它也提供分布式垃圾收集和虚拟堆功能。比如,由于物理内存在需要时被换入换出,它能在一个4G RAM的机器上运行需要200G堆的Web应用。 这也意味着你不需要关心Spring Web Flow 会话数据的大小是否超过了物理堆大小。 用Spring Web Flow和Terracotta搭建Web应用(3)时间:2011-02-05 infoq Jonas Bonér & Eu堆层次集群 Terracotta for Spring 使用aspect-oriented技术来在类载入时适配应用。在这个阶段它扩展了应用以保证Java语义在集群间被正确的维护,包括对象引用,进程调用和垃圾收集等 我们在前面提到Terracotta并没有使用serialization。这意味着任何Spring Web Flow 维护的会话都可以在集群间共享。这也意味着Terracotta并没有把会话状态的全部对象图发给所有节点,而是把图分解成纯粹的数据,并在网络间传输实际的“差量”和改变--数据的“原始信息”在其它节点上。 因为有一个记录节点间相互引用的中心调度器(见下文),它能以lazy的方式工作,而只把改变传送到引用了这些“dirty”数据的节点。这需要使用局部引用。如果负载均衡配置为使用"session粘滞" 就更有效率,因为这意味着很多数据可能永远不会脱离实际的session而不用复制 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |