Tomcat叢集session管理解決方案 關於sticky session session replication與使
阿新 • • 發佈:2018-11-15
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
本文原文連線: http://blog.csdn.net/bluishglc/article/details/7641714 ,轉載請註明出處!
提要:本文主要的寫作目的是解釋叢集方案中的一些重要的概念,然後引入另一種session管理機制:基於快取的session管理。本文並不講述如何配置apache和tomcat來實現叢集和負載均衡,關於這方面內容,可參考我的另一篇文章: Linux下搭建tomcat叢集全記錄
1.實現應用伺服器叢集需要解決那些問題?
對於所有的應用伺服器叢集來說,都需要解決兩個最基本也是最核心的問題:
1. 如何分散訪問請求到叢集的各個結點
2. 如何通過一種session管理策略,確保某一個結點失效後,其session資料能由其他結點獲取以便其他結點接替失效結點,實現叢集的容錯(failover)
對於第一個問題,最簡單最直白的想法當然是均勻雜湊請求到各結點,但是對於應用伺服器而言,由於有session的存在,一種更好的處理方式是同一個session的相關請求分發到同一個結點進行處理,這就是所謂的“粘性ssession”(sticky session)方式的負載均衡,而前者就稱之為:“非粘性ssession”(non-sticky session)方式的負載均衡.
對於第二個問題,多數的應該伺服器(包括Tomcat在內)使用的是session複製(session replication)機制,即結點之間通過組播方式將各自的session發到其他所有結點上,如果其中一個訪問出錯,則另外結點仍然具有有效的session內容,從而能正常接管其session。由於伺服器內建了session複製機制的實現,因而使用這種方案非常簡單,只需要做簡單的配置即可完成,但是其缺點也是很明顯的,由於大量的session資訊需要複製,在使用者數量和叢集數量達到一定規模後,session複製就有可能成為效能瓶頸。於是人們想到了別外一種解決策略:通過第三方快取來存放sessiono資料,如果某一結點失效,被委任接替失效結點的伺服器可以從快取中恢復session.基於這種思想,在google code上有一款開源產品:memcached-session-manager。
2.
首先,所有的tomcat節點需要安裝memcached-session-manager,每一個tomcat會有自己的本地session,當一個請求執行完畢之後,如果對應的session之前不存在(也就是說這是某個使用者的第一次請求),則將該session拷貝一份副本至memcached快取,當該session的下一個請求到達時,會使用tomcat的本地session,請求處理結束之後,session的變化會同步更新到memcached快取中對應的session裡,從而確保本地session和快取中的session始終保持一致。如果當前結點失效,下一個請求會被路由給另外一個tomcat處理,這個tomcat發現請求所屬的session並不存在,於是它將查詢memcached快取,並將查詢到的session恢復到本地,這樣就完成了容錯處理。(以上是sticky session模式為背景的解釋,memcached-session-manager也支援non-sticky session。)
由於以快取為基礎的session管理不需要大量的資料複製,其效能表現更好,具有更好的伸縮性。
最後補充一點:實際上,除去有伺服器端管理session,還有另一個種截然不同的管理方式,即將session作為cookie的一部分經過壓縮和加密後存放在使用者的本地瀏覽器上!