首页 > 代码库 > 使用RabbitMQ管理Tomcat Sessions
使用RabbitMQ管理Tomcat Sessions
云架构的流行,使得水平伸缩成为王者( horizontal scalability is king),而传统的Tomcat集群是通过广播集群,
也就是让一台机器上的Session广播到其他机器上,这样的坏处就是大量Session中数据在服务器之间不停被复制拷贝,
增加服务器负担,服务器越多,复制越厉害,Tomcat的服务器也就不能无限任意增加,水平伸缩很差。
该文引入RabbitMQ消息系统,用来控制tomcat的Session无限复制,
也就是设计一种Session管理器:使得任何一个用户请求都可以被随机分配到任何一台tomcat服务器上。
作者对Session管理器要求是:
1.轻量,Terracotta虽然号称可以帮助session复制,可惜重量。作者没有选择。
2.Reliable 可靠
3.Scalable 可伸缩
4.No single point of failure 无单点风险
5.Asynchronous (for speed and efficiency) 异步
6.Easy to configure易于配置
7.Zero (or nearly so) maintenance 零维护。
Session管理器的工作原理如下:当一个tomcat服务器被要求加载用户的session,
它首先将session的ID传到云存储中CloudStore(使用 Redis 或其他 NoSQL 数据库),
检查内部的session ID列表. 如果发现存在这个ID, 就知道这是一个已经激活的session,
然后检查内部Map看看其是否已经存在当前服务器本地了,
如果没有,发出"load"消息给相应队列queue. 当前用户请求的线程就堵塞等待Session在本地加载复制。
使用RabbitMQ管理Tomcat Sessions