應用伺服器集群Session管理

2022-07-26 17:42:11 字數 2058 閱讀 4101

應用伺服器的高可用架構設計主要基於服務無狀態這一特性,但事實上,業務總是有狀態的,在交易類的電子商務**,需要有購物車記錄使用者的購買記錄,使用者每次購買請求都是向購物車中增加商品來社交類**中,需要記錄使用者當前登陸狀態、最新發布的訊息及好友狀態等,使用者每次重新整理頁面都需要更新這些資訊。

web應用中將這些多次請求修改使用的上下文物件稱作會話(session),單機情況下,session可由部署在伺服器上的web容器(如jboss)管理。在使用負載均衡的集群環境中,由於負載均衡伺服器可能會將請求分發到集群任何一台應用伺服器上,所以保證每次請求依然能夠正確的獲取session比單機時要複雜的多。

集群環境下,session管理主要有一下幾種手段。

1. session複製

session複製是早起企業應用系統使用較多的一種伺服器集群session管理機制。應用伺服器開啟web容器的session複製功能,在集群中的幾台伺服器之間同步session物件,使得每台伺服器上都儲存所有使用者的session資訊,這樣任何一台伺服器宕機都不會導致session資料丟失,而伺服器使用session時,也只需要在本機獲取即可。

這種方案雖然簡單,從本機讀取session資訊也很快速,但只能使用在集群規模比較小的情況下。當集群規模較大時,集群伺服器間需要大量的通訊進行session複製,占用伺服器和網路的大量資源,系統不堪重負。甚至會出現伺服器記憶體不夠session使用的情況。

2. session 繫結

session繫結可以利用負載均衡的源位址hash演算法實現,負載均衡伺服器總是將**於同一ip的請求分發到同一臺伺服器上(也可以根據cookie資訊將同一使用者的請求總是分發到同一臺伺服器上,當然這時負載均衡伺服器必須工作在http協議層上。這樣整個會話期間,所有使用者所有請求都在同一伺服器上處理,即session繫結在某台特定伺服器上,保證session總能在這台伺服器上獲取。這種方法又被稱作會話粘滯)

但是session繫結的方案顯然不符合我們對系統高可用的需求,因為一旦某台伺服器宕機,那麼該伺服器上的session也就不復存在了,使用者請求切換到其他伺服器因為沒有session而無法完成業務處理。

3.  利用cookie 記錄session

早期的企業應用系統使用c/s(客戶端/伺服器)架構,一種管理session的方式是將session記錄在客戶端,每次請求伺服器時,將session放在請求中傳送給伺服器,伺服器處理完請求後再將修改過的session響應給客戶端

**沒有客戶端,但是可以利用瀏覽器支援cookie記錄session。

利用cookie記錄session也有一些缺點,比如受cookie大小限制,能記錄的資訊有限;每次請求響應都需要傳輸cookie,影響效能;如果使用者關閉cookie,訪問就不會正常。但是cookie的簡單易用,可用性高,支援應用伺服器的線性伸縮,而大部分應用需要記錄的session資訊又比較小。

4. session 伺服器

那麼沒有高可用、伸縮性好、效能也不錯、對資訊大小有沒有限制的伺服器集群session管理方案呢?

答案就是session伺服器。利用獨立部署的session伺服器(集群)統一管理session,應用伺服器每次讀寫session時,都訪問session伺服器。

這種解決方案事實上是將應用伺服器的狀態分離,分為無狀態的應用伺服器和有狀態的session伺服器,然後針對這兩種伺服器的不同特性分別設計其架構。

對有狀態的session伺服器,一種比較簡單的方法是利用分布式快取、資料庫等,這些產品的基礎上進行包裝,使其符合session的儲存和訪問要求。如果業務場景對session管理有較高的要求,比如利用session服務整合單點登陸(sso)、使用者服務等功能,則需要開發專門的session服務管理平台。

應用伺服器集群的session管理

首先,我們知道,http是無狀態的協議,應用伺服器不儲存業務的上下文資訊,而是進根據每次提交的資料進行相應的業務邏輯處理,因此所有的服務期完全對等,乙個請求由哪個伺服器來處理都是一樣的。因此,為了保證 的高可用,我們可以部署多個web伺服器,通過負載均衡的手段來緩解伺服器壓力 同時乙個伺服器掛掉了,...

應用伺服器集群的session管理

1 什麼是session a web應用中將這些多次請求修改使用的上下文物件稱作會話 session b session 物件儲存特定使用者會話所需的資訊。這樣,當使用者在應用程式的 web 頁之間跳轉時,儲存在 session 物件中的變數將不會丟失,而是在整個使用者會話中一直存在下去。c 當使用...

應用伺服器集群的Session管理

應用伺服器的高可用架構設計主要基於服務無狀態這一特性,但是事實上,業務總是有狀態的。在交易類的電子商務 需要有購物車記錄使用者的購買資訊,使用者每次購買請求都是向購物車中增加商品 在社交類的 中,需要記錄使用者的當前登入狀態。web應用中將這些多次請求修改使用的上下文物件稱作會話 session 單...