使用RabbitMQ使得Tomcat Sessions 變得更加雲化

banq發表於2010-06-22
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修改過]

相關文章