細說分布式Session管理

2021-09-11 14:20:08 字數 1070 閱讀 5248

web應用在單機部署的情況下,session是被單個應用伺服器儲存管理的,由於只有乙個應用伺服器,使用者的所有請求都是通過它進行響應處理的,所以能夠很容易實現會話跟蹤和保持。隨著業務量的增長,系統架構需要做出調整以適應發展的需要,可能會使用分布式架構或微服務架構,無論使用哪種架構方式,應用系統單機部署的模式已經不能滿足需求,所以會將應用系統部署到多台應用伺服器上,使用者的請求也會通過負載均衡**到某個具體應用伺服器上執行,可能會出現在a1系統登入後建立並儲存session,再次發起請求,請求被**到a2系統上顯示未登入的情況,此時單機部署模式下的session機制已不能滿足要求。所以,在分布式架構或微服務架構下,必須保證乙個應用伺服器上儲存session後,其它應用伺服器可以同步或共享這個session。

分布式session有如下幾種實現方式。

在支援session複製的web伺服器上,通過修改web伺服器的配置,可以實現將session同步到其它web伺服器上,達到每個web伺服器上都儲存一致的session。

優點:**上不需要做支援和修改。

缺點:需要依賴支援的web伺服器,一旦更換成不支援的web伺服器就不能使用了,在資料量很大的情況下不僅占用網路資源,而且會導致延遲。

適用場景:只適用於web伺服器比較少且session資料量少的情況。

可用方案:開源方案tomcat-redis-session-manager,暫不支援tomcat8。

將使用者的每次請求都通過某種方法強制分發到某乙個web伺服器上,只要這個web伺服器上儲存了對應session資料,就可以實現會話跟蹤。

優點:使用簡單,沒有額外開銷。

缺點:一旦某個web伺服器重啟或宕機,相對應的session資料將會丟失,而且需要依賴負載均衡機制。

適用場景:對穩定性要求不是很高的業務情景。

這種方式每次發起請求的時候都需要將session資料放到cookie中傳遞給服務端。

優點:不需要依賴額外外部儲存,不需要額外配置。

缺點:不安全,易被盜取或篡改;cookie數量和長度有限制,需要消耗更多網路頻寬。

適用場景:資料不重要、不敏感且資料量小的情況。

這四種方式,相對來說,session集中管理更加可靠,使用也是最多的。

分布式session共享

為什麼會出現session共享問題?客戶端與伺服器互動時會產生唯一的sessionid用於標記使用者,但是在分布式架構中,如果還是採用 session 的方式,使用者發起請求,通過 nginx 做請求 時,並不知道是 到伺服器1還是伺服器2,所以就會出現session共享問題。今天主要記錄使用 sp...

session分布式處理

在支援session複製的web伺服器上,通過修改web伺服器的配置,可以實現將session同步到其他web伺服器上,達到每個web伺服器上都儲存一致的session。1.優點 上不需要做支援和修改。2.缺點 需要依賴支援的web伺服器,一旦更換成不支援的web伺服器就不能使用了,在資料量很大的情...

分布式session共享

什麼是session 伺服器為每個使用者建立乙個會話,儲存使用者的相關資訊,以便多次請求能夠定位到同乙個上下文。當使用者請求來自應用程式的 web 頁時,如果該使用者還沒有會話,則 web 伺服器將自動建立乙個 session 物件。當會話過期或被放棄後,伺服器將終止該會話並銷毀。分布式sessio...