應用伺服器集群的session管理

2021-08-20 23:53:14 字數 1004 閱讀 7236

首先,我們知道,http是無狀態的協議,應用伺服器不儲存業務的上下文資訊,而是進根據每次提交的資料進行相應的業務邏輯處理,因此所有的服務期完全對等,乙個請求由哪個伺服器來處理都是一樣的。

因此,為了保證**的高可用,我們可以部署多個web伺服器,通過負載均衡的手段來緩解伺服器壓力;同時乙個伺服器掛掉了,負載均衡通過心跳監測機制發現該伺服器失去響應,就會把它從伺服器列表中移除,將請求傳送到其他伺服器上。

但是在負載均衡的情況下,乙個伺服器掛掉了,那它儲存的session也沒有了,那我們應該怎麼辦呢?

就是負載均衡裝置(f5、部署了nginx伺服器的裝置)在做路由分發的時候,將相同使用者的請求總是路由到同一臺伺服器上。

可以利用負載均衡的源ip位址(或是cookieid)hash演算法實現。

但是這種做法不符合我們對高可用的期望,一台服務期掛掉了,那麼該伺服器上的session資訊也沒有了,使用者請求切換到其他伺服器上(其他伺服器沒有儲存該使用者的session)。

複製會話,伺服器之間進行session的複製,從而保證了每個伺服器上儲存的session資訊都是一樣的。這樣做的優點就是某台伺服器down掉了也不會導致session的丟失,伺服器在使用session時,在本地記憶體獲取即可。

但是,這樣是及其佔記憶體的,效率也低下。

客戶端儲存乙個由userid、token、timestamp等生成的序列access_token,每次向伺服器傳送請求的時候都附帶著這個access_token,伺服器端***獲取到access_token後解析它,拿到userid、timestamp等,然後再對該session的有效性進行判斷。

缺點:1.cookie不能太大,否則太影響傳輸效率,因此能記錄的資訊有限;

2.每次請求都要傳輸cookie,影響效能;

3.使用者如果關閉了cookie,訪問就部正常了。

將session儲存在資料庫、快取伺服器(redis等)裡是一種辦法。

當然,我們也可單獨部署session伺服器來統一管理session,應用伺服器每次讀寫session時,都會訪問session伺服器。

應用伺服器集群Session管理

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

應用伺服器集群的session管理

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

應用伺服器集群的Session管理

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