今天我們來講解一下分布式Session的幾種實現(xiàn)方法
為什么要使用分布式Session
在分布式場景下,負(fù)載均衡會將用戶請求隨機(jī)分發(fā),如果單機(jī)存儲Session,會造成用戶需要頻繁登陸。
分布式Session的實現(xiàn)方式
- 粘性Session(將用戶請求固定在一臺服務(wù)器)
- 服務(wù)器Session復(fù)制(廣播實現(xiàn)Session同步)
- 緩存存儲(Sticky模式和Non-Sticky模式)
- 持久化存儲(將Session存儲到數(shù)據(jù)庫)
粘性Session
- 原理:將用戶鎖定到某一臺服務(wù)器上,用戶的每次請求都會被發(fā)送到第一次請求的服務(wù)器上。
- 優(yōu)點:簡單易用,無需操作Session,直接配置Nginx即可。
- 缺點:缺乏容錯性,如果當(dāng)前訪問的服務(wù)器發(fā)生宕機(jī),請求被轉(zhuǎn)發(fā)到其他服務(wù)器,用戶需要重新登錄。
服務(wù)器Session復(fù)制
- 原理:任何一個節(jié)點的Session發(fā)生變化,都會廣播給其他所有節(jié)點,以保證Session的同步。
- 優(yōu)點:容錯性較強(qiáng),Session可以實時響應(yīng)。
- 缺點:會影響到網(wǎng)絡(luò)負(fù)荷,當(dāng)并發(fā)量較大時,會降低服務(wù)器的性能。
緩存存儲
-
原理:
- Sticky模式:請求處理完成后,將Session同步到緩存中,每次請求都會被映射到同一臺服務(wù)器,直到服務(wù)器宕機(jī),再去緩存中讀取Session。
- Non-Sticky模式:每次請求被映射到的隨機(jī)一臺服務(wù)器,請求到來時從緩存中加載Session,請求處理完成,再將Session回寫到緩存中。
- 優(yōu)點:容錯性較強(qiáng),Session可以實時響應(yīng)。
- 缺點:一旦緩存重啟,Session也會丟失(Redis默認(rèn)保存快照,不會丟失),需要重新登錄。

image.png
持久化存儲
- 原理:將Session存到數(shù)據(jù)庫中,進(jìn)行持久化。
- 優(yōu)點:服務(wù)器宕機(jī),Session不會丟失。
- 缺點:高并發(fā)時,對數(shù)據(jù)庫造成很大的壓力。
參考
- 集群/分布式環(huán)境下5種session處理策略:http://blog.csdn.net/u010028869/article/details/50773174?ref=myread
- 《大型分布式網(wǎng)站架構(gòu)設(shè)計與實踐》
我們今天所付出的一切,不過是為了能見到明天的太陽