J2EE 高并发体系详解--HTTP Session 失效转移

HTTP Session 失效转移

几乎所有流行的 J2EE 供应商都在他们的集群产品中实现了 Http Session 失效转移,用来保障当某台服务器失效后会话状态不会丢失,使客户端请求能被正确处理。如图 6 所示,当浏览器访问有状态的 WEB 应用程序(第 1 ,2 步),这个应用程序可能在内存创建了会话对象用于保存信息以供后面的请求使用,同时,发送给浏览器一个唯一的 HTTP Session ID 用于标识这个会话对象(第 3 步),浏览器将这个 ID 保存 Cookie 中,并当它下次再请求同一 WEB 应用程序的页面时,会将 Cookie 发还给服务器。为了支持会话失效转移, WEB 服务器将在一定的时候把会话对象备份到其他地方以防止服务器失效后丢失会话信息(第 4 步)。负载均衡器检测到这个失败(第 5 , 6 步),并将后续的请求分发到装有相同应用程序的服务器实例中(第 7 步),由于会话对象已经备份到其他地方了,这个新的服务器实例可以恢复会话(第 8 步)正确地处理请求。
 

图 6   HTTP Session 失效转移
为了实现上述功能, HTTP Session 失效转移将带来以下问题:
l      全局 HTTP Session ID
如上所述, HTTP Session ID 用于在特定的服务器实例中标识唯一的内存会话对象,在 J2EE 平台, HTTP Session ID 依赖于 JVM 实例,每个 JVM 实例拥有几个应用程序,每个应用程序都为不同的用户管着许多会话, HTTP Session ID 是在当前 JVM 实例用于访问相关会话的关键。在会话失效转移的实现中,要求不同的JVM 实例不能产生两个相同的 HTTP Session ID ,这是因为当失效转移发生时,一个 JVM 的会话将要备份并恢复到另一个中,这样,必须建立全局 HTTP Session ID 产生机制。
l      如何备份会话状态
如何备份会话状态是区别 J2EE 服务器好坏的关键因素。不同的供应商有不同的实现,在后续部分我再详细解释。
l      备份的频率和粒度
会话的备份是消耗性能的,包括 CPU ,内存,网络带宽和写入磁盘和数据库的 I/O ,备份的频率和备份对象的粒度将严重影响性能。
 

   原创文章@java进阶网 转载请标明出处: http://www.javady.com/index.php/411.html 

阅读更多
个人分类: java 高性能java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭