使用RabbitMQ使得Tomcat Sessions 变得更加云化

Clustering Cloud-friendly Tomcat Sessions with RabbitMQ: Part I | TomcatExpert

云架构的流行,使得水平伸缩成为王者( 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在本地加载复制。

[该贴被banq于2010-06-22 10:55修改过]

who has the most update-to-date session copy, then?

没看明白~~

单点风险是什么?

是不是买个F5或者auten一样的效果?

还是想想,session过期吧