快速业务通道

J2EE应用程序的Web层状态复制 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
Map —— 可以用 setAttribute 按名字存储会话属性,并用 getAttribute 提取它们。HttpSession 接口还包含会话生存周期方法,如 invalidate() (它通知容器应丢弃会话)。清单 1 显示 HttpSession 接口最常用的元素:

清单 1. HttpSession API

public interface HttpSession {  Object getAttribute(String s);  Enumeration getAttributeNames();  void setAttribute(String s, Object o);  void removeAttribute(String s);  boolean isNew();  void invalidate();  void setMaxInactiveInterval(int i);  int getMaxInactiveInterval();  ... }

理论上,可以跨群集一致性地完全复制会话状态,这样群集中的所有节点都可以服务任何请求,一个简单的负载平衡器可以以轮询方式传送请求,避开有故障的主机。不过,这种紧密的复制有很高的性能成本,并且难于实现,当群集接近某一规模时,还会有伸缩性的问题。

一种更常用的方式是将负载平衡与会话相似性(affinity) 结合起来 —— 负载平衡器可以将会话与连接相关联,并将会话中以后的请求发送给同一服务器。有很多硬件和软件负载平衡器支持这个功能,并且这意味着只有主连接主机和会话需要故障转移到另一台服务器时才访问复制的会话信息。

J2EE应用程序的Web层状态复制(2)

时间:2010-07-08

复制方式

复制提供了一些可能的好处,包括可用性、容错和伸缩性。此外,有大量会话复制的方法可用:方法的选择取决于应用程序群集的规模、复制的目标和 servlet 容器支持的复制设施。复制有性能成本,包括 CPU 周期(存储在会话中的序列化对象)、网络带宽(广播更新),以及基于磁盘的方案中写入到磁盘或者数据库的成本。

几乎所有 servlet 容器都通过存储在 HttpSession 中的序列化对象进行 HttpSession 复制,所以如果是创建一个分布式应用程序,应当确保只将可序列化对象放到会话中。(一些容器对像 EJB 引用、事务上下文、还有其他非可序列化的 J2EE 对象类型有特殊的处理。)

基于 JDBC 的复制

一种会话复制的方法是序列化会话内容并将它写入数据库。这种方法相当直观,其优点是不仅会话可以故障转移到其他主机,而且即使整个群集失效,会话数据也可以保存下来。基于数据库的复制的缺点是性能成本 —— 数据库事务是昂贵的。虽然它可以在 Web 层很好地伸缩,但是它可能在数据层产生伸缩问题 —— 如果群集增长大到一定程度,扩展数据层以容纳会话数据会很困难或者成本无法接受。

基于文件的复制

基于文件的复制类似于使用数据库存储序列化的会话,只不过是使用共享文件服务器而不是数据库来存储会话数据。这种方式的成本一般比使用数据库的成本(硬件成本、软件许可证和计算开销)低,其代价则是可靠性(数据库可提供比文件系统更强的持久化保证)。

基于内存的复制

另一种复制方式是与群集中的一个或者多个其他服务器共享序列化的会话数据副本。复制所有会话到所有主机中提供了最大的可用性,并且负载平衡最容易,但是因为复制消息所消耗的每个节点的内存和网络带宽,最终会限制群集的规模。一些应用服务器支持与“伙伴(buddy)”节点的基于内存的复制,其中每一个会话存在于主服务器上和一台(或更多)备份服务器上。这种方案比将所有会话复制到所有服务器的伸缩性更好,但是当需要将会话故障转移到另一台服务器上时会使负载平衡任务复杂化,因为它必须找出另外哪一台(几台)服务器有这个会话。

时间考虑

除了决定如何存储复制会话数据,还有什么时候复制数据的问题。最可靠但也最昂贵的方法是每次数据改变时复制它(如每次 servlet 调用结束)。不那么昂贵、但是在故障时会有丢失一些数据的风险

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号