分布式系統中同乙個使用者的請求可能會被分發到不同的伺服器上,而session是儲存在單個伺服器上,所以有可能會導致session失效,對於前端使用者最明顯的感覺就是需要重新登入。
主要有如下幾種解決方案
1. session sticky 方式
由負載均衡來負責標記每次的請求,將同乙個會話請求傳送到同乙個伺服器上。
nginx實現sticky的方式是利用cookie來實現的。
nginx在第一次客戶端請求來之後,會生成乙個cookie傳送到客戶端,以後客戶端每次傳送請求的時候都帶上這個cookie,nginx根據此cookie(該cookie記錄了具體伺服器資訊,比如伺服器ip的hash值等)將請求傳送到對應伺服器,保證同乙個會話由同乙個伺服器來處理。
該方案有以下幾個缺點:
若有某一台伺服器宕機,就會導致儲存在該伺服器上的所有session失效,使用者就需要重新登入
負載均衡變成了乙個有狀態的節點,記憶體消耗會更大,同時容災也是個問題
# nginx配置sticky策略
upstream dispatch
2. session replication方式
該方式在所有伺服器上都儲存乙份所有使用者的session。該方案依賴於應用之間的session同步,而不需要負載均衡去做什麼,只適合於集群的數目比較少的情況,當伺服器過多時,會大量消耗寬頻資源和記憶體資源.
該方案明顯的幾個缺點:
占用伺服器記憶體太大,每個伺服器都要儲存乙份所有使用者的session
消耗頻寬較大.伺服器之間的session同步需要每時每刻執行,特別是當有大量使用者同時登陸
3. session資料集中儲存
再構建乙個伺服器(為了高可用,該伺服器也是集群部署),專門用來儲存所有的會話資訊,所有伺服器獲取會話資訊都從該伺服器上獲取。比如可以利用redis集群來做。
該方案對於大型應用或者集群的伺服器數量很多時是最有效的方案。一般如果已經redis集群建議用此方案。
session分布式處理
在支援session複製的web伺服器上,通過修改web伺服器的配置,可以實現將session同步到其他web伺服器上,達到每個web伺服器上都儲存一致的session。1.優點 上不需要做支援和修改。2.缺點 需要依賴支援的web伺服器,一旦更換成不支援的web伺服器就不能使用了,在資料量很大的情...
分布式環境Session處理方法
最近做的乙個專案中,操作的時候需要對手機號進行簡訊驗證。對簡訊驗證的步驟 一 獲取驗證碼,把獲取得到的驗證碼儲存到該使用者的session中 二 然後把該驗證碼以簡訊的方式傳送到手機上。三 使用者在進行操作的時候,所要提交的表單中需要包含,要操作的資訊和輸入的驗證碼。後台會把使用者輸入的驗證碼與se...
分布式session共享
為什麼會出現session共享問題?客戶端與伺服器互動時會產生唯一的sessionid用於標記使用者,但是在分布式架構中,如果還是採用 session 的方式,使用者發起請求,通過 nginx 做請求 時,並不知道是 到伺服器1還是伺服器2,所以就會出現session共享問題。今天主要記錄使用 sp...