扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年9月30日
关键字:
在本页阅读全文(共3页)
什么是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会话数据的大小是否超过了物理堆大小。
堆层次集群
Terracotta for Spring使用aspect-oriented技术来在类载入时适配应用。在这个阶段它扩展了应用以保证Java语义在集群间被正确的维护,包括对象引用,进程调用和垃圾收集等
我们在前面提到Terracotta并没有使用serialization。这意味着任何Spring Web Flow维护的会话都可以在集群间共享。这也意味着Terracotta并没有把会话状态的全部对象图发给所有节点,而是把图分解成纯粹的数据,并在网络间传输实际的“差量”和改变--数据的“原始信息”在其它节点上。
因为有一个记录节点间相互引用的中心调度器(见下文),它能以lazy的方式工作,而只把改变传送到引用了这些“dirty”数据的节点。这需要使用局部引用。如果负载均衡配置为使用"session粘滞" 就更有效率,因为这意味着很多数据可能永远不会脱离实际的session而不用复制到其它节点。
这个架构是中心辐射的,也就是有一个管理客户端的中心调度器。在这里客户端就是你配有Terracotta for Spring运行时的普通应用。调度器不是单点失败的,但你可以配置一组备用调度器,并在主调度器崩溃时选择一个来接替。你也可以独立于客户端,对调度器进行集群扩展。
构建一个高可用的有状态web应用
这里我们使用一个叫Sellitem的示例应用来推动讨论并展示给大家:
如何使用Spring Web Flow来构建一个有状态基于会话的web应用。
如何使用Terracotta for Spring来声明式集群有状态应用。
Sellitem示例应用可以在Spring Web Flow的发布版本中找到。(更多信息见文章末尾的“Resources”章节)
使用Spring Web Flow实现一个有状态Web应用: Sellitem
Sellitem是展示结合了有条件转移、会话域、流程执行转向和延续性的示例应用。用户在几个页面间导航,可以定义货物的价格、可以销售的货物数量、折扣比率、送货详情(如果需要)和最后查看所有信息。
我们不会通读应用的所有源码,而是主要介绍一些关键概念,如怎么配置Spring Web Flow输出的不同标准服务(Bean)和怎么定义页面流转(使用针对页面流转的Spring Web FlowDSL的XML版本)。
在Spring MVC中配置DispatcherServlet
应用的入口是一个标准的Spring MVC DispatcherServlet,它在web.xml中注册并在web application context中映射到*.htm。
sellitem
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/sellitem-servlet-config.xml
/WEB-INF/sellitem-webflow-config.xml
sellitem
*.htm
DispatcherServlet配置在Spring的配置文件sellitem-servlet-config.xml和sellitem-webflow-config.xml中。 sellitem-servlet-config.xml中有一个映射到"/pos.htm"的控制器,它将所有该URL的请求转发到Spring Web Flow系统(它的入口是一个流程执行器):
配置flow executor和flow registry beans
Spring flowExecutor bean配置使用一个flowRegistry bean来执行"/WEB-INF/flows/"目录中的基于XML的流转定义。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。