Tomcat集群Session共享解决方案Memcached - 我的博客 - ITeye技术网站
Tomcat集群为什么需要Session共享
当客户端访问Tomcat集群时,所有的请求将被Nginx拦截,由Nginx做负载均衡后转发给后台真实Tomcat。按照这个流程就可能出现一个问题,当用户进行页面刷新或跳转时,每次请求将被转发给不同的Tomcat处理,这样就会造成Session的不同步。举个简单的栗子,例如当用户往购物车添加商品时,兴高采烈地准备买单了,当他跳转到付款页面却发现购物车被清空了,这就是Session丢失的典型栗子。因此,我们需要为集群环境做Session同步。
Session共享方案讨论
在服务器集群的环境下,共享Session的方案主要分为4类:
1.用户端本地保存Cookie
在这种方式下,Web应用会将用户状态写到Cookie并保存到用户本地。但是,如果用户使用的浏览器不支持Cookie或者禁用Cookie,该方案将会失效。并且Cookie能保存的数据是有大小限制的,而且数据暴露给用户本地浏览器,存在安全性问题。
2.采用数据库方式保存Session
相对本地Cookie方式,将用户信息保存到服务端数据库解决了数据安全性问题。然而,这么做是有代价的,应用中所有对Session的访问都必须经过数据库,加大数据库负担,导致系统整体性能降低。
3.代理服务器
通过代理服务器实现Session共享的思路非常简单,就是Session数据在哪台Tomcat,之后的请求都转发到这台Tomcat。例如Nginx,具体实现只需要修改转发规则为ip_hash
即可。但这时候可能存在某一时间段大量用户始终访问某台Tomcat的负载很大,也就失去了负载均衡的意义。
4.搭建缓存服务器
这种方案也是应用最普遍的方案,通过搭建缓存服务器,并使用第三方工具接管Tomcat对Session的管理。
本文例子采用方案4进行Session管理,使用的缓存服务器是Memcached,并使用memcached-session-manager管理Session。memcached-session-manager(以下简称msm)的使用方法很简单,只需要根据Tomcat版本和序列化方式下载相应jar包,拷贝至Tomcat的lib目录下,最后修改Tomcat配置文件,更换Session管理模块即可
Read full article from Tomcat集群Session共享解决方案Memcached - 我的博客 - ITeye技术网站
No comments:
Post a Comment