数据库备份方式
几乎所有的 J2EE 集群产品都允许选择将你的会话对象通过 JDBC 备份到关系数据库中。如图 7 所示,这种方式可以让服务器实例非常简单的在正确的时间序列化会话内容并写到数据库中。当发生会话转移时,另一台可用的服务器接过已失效的服务器工作,从数据库中恢复所有的会话状态。序列化对象是关键点,它使得内存会话数据可以持久化和传输。要了解更多有关 Java 对象序列化知识,请参考 http://java.sun.com/j2se/1.5.0/docs/guide/serialization/index.html 。
图 7 备份会话数据到数据库
由于数据库交易是非常昂贵的,这种方法主要缺点是当在会话中保存大量的或大的对象时限制了伸缩性,大多数使用数据库会话持久化的服务器产品都提倡尽量减少用 HTTP 会话存储对象,但这限制了你的应用程序的架构和设计,特别是你要使用 HTTP 会话缓存用户数据时。
数据库的方式也有一些优点:
l 简单,容易实现。分离的请求处理和会话备份处理使集群更好管理和健壮。
l 会话可以失效转移到任何一台服务器,因为数据库是共享的。
l 当整个集群失效时,会话数据依旧幸免。
内存复制方式
因为性能的原因,一些 J2EE 服务器( Tomcat , Jboss , WebLogic , WebSphere )提供了另一种实现:内存复制
图 8 对会话状态进行内存复制
基于内存的会话持久化将会话信息保存在一台或是多台备份服务器中,而不是保存数据库中(如图 8 )。这种方式因为性能高而非常流行。同数据库方式相比,直接在原服务器和备份服务器之间网络通信是非常轻量的。同时注意在使用方式中,数据库方式中的“恢复”阶段是不需要的,因为在备份后,所有会话数据都已经存在备份服务器的内存中了,已经可以处理请求。
“ Java Groups ”是当前 Tomcat 和 Jboss 集群所使用的通信层。 Java Groups 是用于实现可靠组通信和管理的工具包。它提供了诸如“组成员协议”和“消息广播”等核心特性,这些都对集群的工作非常有用。有关 Java Groups 的信息,请参考: http://www.jgroups.org/javagroupsnew/docs/index.html 。
原创文章@java进阶网 转载请标明出处: http://www.javady.com/index.php/411.html