快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
的方法是在每超过 N 秒时复制数据。

与时间问题有关的问题是,是复制整个会话还是只试尝复制会话中改变了的属性(它包含的数据会少得多)。这些都需要在可靠性和性能之间进行取舍。Servlet 开发人员应当认识到在故障转移时,会话状态可能变得“过时”(是几次请求前的复制),并应当准备处理不是最新的会话内容。(例如,如果一个interview 的第 3 步产生一个会话属性,而用户在第 4 步时,请求被故障转移到一个具有两次请求之前的会话状态复制的系统上,那么第 4 步的 servlet 代码应预备在会话中找不到这个属性,并采取相应的行动 —— 如重定向,而不是认定它会在那里、并在找不到它时抛出一个 NullPointerException。)

容器支持

Servlet 容器的 HttpSession 复制选项以及如何配置这些选项是各不相同的。IBM WebSphere? 提供的复制选项是最多的,它提供了在内存中复制或者基于数据库的复制、在 servlet 末尾或者基于时间的复制时间、传播全部会话快照(JBoss 3.2 或以后版本)或者只传播改变了的属性等选择。基于内存的复制基于 JMS 发布-订阅,它可以复制到所有克隆、一个“伙伴”复制品或者一个专门的复制服务器。

WebLogic 还提供了一组选择,包括内存中(使用一个伙伴复制品)、基于文件的或者基于数据库的。JBoss 与 Tomcat 或者 Jetty servlet 容器一同使用时,进行基于内存的复制,可以选择 servlet 末尾或者基于时间的复制时间,而快照选项(在 JBoss 3.2 或以后版本)是只复制改变了的属性。Tomcat 5.0 为所有群集节点提供了基于内存的复制。此外,通过像 WADI 这样的项目,可以用 servlet 过滤机制将会话复制添加到像 Tomcat 或者 Jetty 这样的 servlet 容器中。

改进分布式 Web 应用程序的性能

不管决定使用什么机制进行会话复制,可以用几种方式改进 Web 应用程序的性能和伸缩性。首先记住,为了获得会话复制的好处,需要在部署描述符中将 Web 应用程序标记为 distributable,并保证在会话中的所有内容都是可序列化的。

保持会话最小

因为复制会话有随着会话中的对象图(object graph) 的变大而增加成本,所以应当尽可能地在会话中少放置数据。这样做会减少复制的序列化的开销、网络带宽要求和磁盘要求。特别地,将共享对象存储在会话中一般不是好主意,因为它们需要复制到它们所属的 每一个 会话中。

不要绕过 setAttribute

在改变会话的属性时,要知道即使 servlet 容器只是试图做最小的更新(只传播改变了的属性),如果没有调用 setAttribute,容器也可能没有注意到已经改变的属性。---www.bianceng.cn。(想像在会话中有一个 Vector,表示购物车中的商品 —— 如果调用 getAttribute() 获取 Vector、然后向它添加一些内容,并且不再次调用 setAttribute,容器可能不会意识到 Vector 已经改变了。)

使用细化的会话属性

对于支持最小更新的容器,可以通过将多个细化的对象而不是一个大块头放到会话中而降低会话复制的成本。这样,对快速改变的数据的改变也不会迫使容器去序列化并传播慢速改变的数据。

完成后使之失效

如果知道用户完成了会话的使用(如,用户选择注销登录),确保调用 HttpSession.invalidate()。否则,会话将持久化直到它失效,这会消耗内存,并且可能是长时间的(取决于会话超时时间)。许多 servlet 容器对可以跨所有会话使用的内存的数量有一个限制,达到这个限制时,会序列化最先使用的会话并将它写到磁盘上。如果知道用户使用完了会话,可以使容器不再处理它并使它作废。

保持会话干净

如果在会话中有大的项,并且只在会话的一部分中使用,那么当不再需要时应删除它们。删除它们会减少会话复制的成本。(这种做法类似于使用显式 nulling

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号