應用服務器集羣的Session管理

應用服務器的高可用架構設計主要基於服務無狀態的特性,事實上,業務總是有狀態的, 如購買信息,登錄狀態,新消息等。Web應用中這樣的上下文對象稱爲會話。

單機情況下,Session可由部署在服務器上的Web容器(如JBoss)管理。
在使用負載均衡的集羣環境中,由於負載均衡服務器可能將請求發往集羣任何一臺應用服務器上,需要採取手段保證每次請求都能獲得正確的Session。

主要有以下幾種手段:

1. Session複製
應用服務器開啓Web容器的Session複製功能,在幾臺服務器之間同步Session對象,每臺服務器都保存所有用戶的Session信息。
優點:從本機上讀取Session信息快速,任一機器宕機不影響使用
缺點:集羣規模較大時,服務器間需要大量的通信進行Session複製,佔用服務器和網絡的大量資源。只能在集羣規模較小的情況下使用

2. Session綁定(會話黏滯)
利用負載均衡的源地址Hash算法實現,負載均衡服務器總是將同一IP地址的請求分發給同一臺服務器,這時負載均衡服務器必須工作在HTTP協議層。這樣整個會話期間,用戶所有的請求都在同一臺服務器處理,Session綁定在某臺特定服務器上。
缺點:不符合高可用需求,某臺服務器宕機,該機器上Session就不存在了

3. Cookie記錄Session
瀏覽器Cookie記錄Session。
優點:簡單易用,支持應用服務器線性伸縮
缺點:受Cookie大小限制,能記錄的信息有限;每次請求響應都要傳輸Cookie,影響性能;用戶關閉Cookie,訪問不正常

4. Session服務器
利用獨立部署的Session服務器(集羣)統一管理Session,應用服務器讀寫Session時,都訪問Session服務器,將應用服務器的狀態分離,分爲無狀態的應用服務器和有狀態的Session服務器(利用分佈式緩存、數據庫)。Cookie 裏面記錄一個Session ID,當Cookie被禁用時,使用URL重寫技術來進行會話跟蹤,即每次HTTP交互,URL後面都會被附加上一個諸如 sid=xxxxx 這樣的參數,服務端據此來識別用戶。
優點:可用性高,伸縮性好,對信息大小無限制

Ref: 《大型網站技術架構》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章