集群环境下SESSION处理(转)

本文探讨了在集群部署环境中,HTTPSesion管理的重要性及其具体实施方案。包括使用会话Cookie保存sessionID、自定义SessionMap同步HTTPSesion信息、利用分布式缓存Memcached存储SessionMap等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转自:http://blog.youkuaiyun.com/linyajun/archive/2008/09/24/2975228.aspx

仅供自己收藏学习

在集群部署的情况下,应用程序需要做出调整,主要集中在四个方面:对httpsession的处理、对缓存的处理、共享的文件系统、synchronized关键字的失效。

httpsession的处理

httpsession的处理最为重要,因为对WEB程序而言,httpsession无疑是最重要的全局资源,它需要被多个web服务器所共享。

无共享的集群架构(SNA),在这样的集群中,每个节点具备完全相同的功能,并且不需要知道其他节点存在与否。每个节点JVM进程不保持全局状态,才能够保证nJVM节点的幂等性,那些所有涉及到全局状态的,必须放在JVM进程之外,例如用户ID可以使用cookiesession可以放入数据库(这并不是一个好的选择),文件可以放在共享存储系统中。

也就是说httpsession的信息需要被保存在JVM进程之外,例如分布式缓存、数据库。


这里是方案:

1、使用会话cookie保存web服务器产生的sessionid
   为什么是sessionid而不是userid,原因在于谁也不知道除去登录外其他人会在httpsession里干些什么

2、自定义SessionMap<String,Serializable>同步保存httpsession内的信息
   自定义SessionMap同步httpsession,在操作httpsession时不用改变调用接口,不用东张西望

3、使用分布式缓存memcached保存自定义SessionMap<String,Serializable>

4、会话胶粘
   未失败转发的情况下没必要在memcached和httpsession之间复制来复制去,眉来眼去

5、使用SnaFilter处理失败转发

6、使用HttpSessionListener实现SessionMap<String,Serializable>的过期
   利用容器session 机制的好处,httpsession过期的时候干掉memecached里的SessionMap


下面根据web请求的过程分情况讨论该方案:

A、登录


 

根据请求的url判断是否是登录请求

在线人数保存在memcached里

B、 正常请求


 

C、 失败转发


 

D、登出


 

根据请求的url判断是否是登出请求

E、HttpSession过期

不hack memcached,使用HttpSessionListener,sessionDestroyed事件时根据sessionid删除memcached里的sessionMap(如果存在)

关于在线人数的统计:在线人数存储在memcached里,将在线人数与sessionMap绑定,往memcached里增加sessionMap时在线人数+1,删除时-1.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值