應用服務器集羣的Session管理

Web應用中將上下文對象稱爲會話(Session),單機情況下由部署在服務器上得Web容器(如IIS、Tomcat、JBoss等)管理。在使用了負載均衡的集羣環境中,由於請求的分發是隨機的,所以保證每次請求依然能夠獲得正確的Session比單機時要複雜得多


Session管理的幾種常見手段。

①Session複製:該方案簡單易行,集羣中的幾臺服務器之間同步Session對象,任何一臺服務器宕機都不會導致Session對象的丟失,服務器也只需要從本機獲取即可。但是,該方案只適合集羣規模較小的情況下。當規模較大時,大量的Session複製操作會佔用服務器和網絡的大量資源,系統不堪重負

  ②Session綁定:利用負載均衡的源地址Hash算法,總是將源於同一IP地址的請求分發到同一臺服務器上。這樣的話,在整個會話期間,用戶所有的請求都在同一臺服務器上進行處理,即Session綁定在某臺特定服務器上,保證Session總能在這臺服務器上獲取。(這種方案又叫做會話粘滯)。

  但是,這種方案不符合高可用的需求。因爲一旦某臺服務器宕機,那麼該機器上得Session也就不復存在了,用戶請求切換到其他機器後因爲沒有Session而無法完成業務處理。因此,很少有網站採用此方案進行Session管理。

  ③Cookie記錄Session:利用瀏覽器支持的Cookie記錄Session簡單易行,可用性高,並且支持服務器的線性伸縮,因此,許多網站都或多或少地使用了Cookie來記錄Session。但是Cookie記錄Session有缺點:比如受Cookie大小限制、每次請求響應都要傳輸Cookie影響性能、用戶關閉了Cookie會造成訪問不正常等。

  ④Session服務器:利用獨立部署的Session服務器(集羣)統一管理Session,應用服務器每次讀寫Session時,都訪問Session服務器。這種方案實際上是將應用服務器的狀態分離,分爲無狀態的應用服務器有狀態的Session服務器

  對於,有狀態的Session服務器,一種較簡單的方法是利用分佈式緩存(如Memcached、Redis等)、數據庫等,在這些產品的基礎上進行封裝,使其符合Session的存儲和訪問要求。


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