分布式集群的Session问题
1、Session的實現(xiàn)
? ? ? ? ?在Session開始時候,分配一個唯一的Session標識sessionId,通過Cookie把 sessionId 告訴瀏覽器,以后每次請求的時候,瀏覽器都會帶上 sessionId 告訴web服務器,這個請求屬于哪個Session。
? ? ? ? 在web 服務器上,每個Session都有獨立的存儲,保存不同的Session信息。
? ? ? ? 如果遇到禁用Cookie的情況,一般做法是把sessionId方法 放到 URL 參數(shù)中。
2、集群的Session 問題的解決方案
? ? ? ? 因為Session數(shù)據(jù)保存在單機上,當應用服務器變成多臺之后,要保證對用戶透明。
(1)、Session 粘貼
負載均衡器根據(jù)每次請求的Session進行轉(zhuǎn)發(fā),即保證同一Session請求都在同一臺Web 服務器上處理,那么對這個Session個體來說,與之前安單機的情況是一致的。
優(yōu)點:簡單容易實現(xiàn),有利于服務器端本地對Session進行緩存。
缺點:(a)、如果集群上有一臺服務器down,則上面的Session數(shù)據(jù)全部丟失,用戶需要重新登錄。
? ? ? ? ? ? ?(b)、負載均衡器需要解析Session的請求,開銷很大
? ? ? ? ? ? ?(c)、負載均衡器變成了有狀態(tài)的節(jié)點,內(nèi)存消耗大,容災麻煩。
(2)、Session 復制
Web服務器進行Session數(shù)據(jù)同步,即同一個Session的數(shù)據(jù)會復制到所有的Web服務器上。
優(yōu)點:負載均衡器壓力較小。
缺點:(a)、同步Session 需要更多網(wǎng)絡通信。
? ? ? ? ? ? ?(b)、每個Web服務器都要保存所有數(shù)據(jù),內(nèi)容過多。
(3)、Session 數(shù)據(jù)集中存儲
與Session Replication類似,但Session不保存在每臺Web服務器中,而是保存在另外地方,如 Redis 數(shù)據(jù)庫等。
優(yōu)點:相比比Session 復制,網(wǎng)絡帶寬、內(nèi)存消耗都少。
缺點:(a)、讀寫Session數(shù)據(jù)必須使用網(wǎng)絡操作,存在延時和不穩(wěn)定性。
? ? ? ? ? ? ?(b)、若存儲Session的機器出現(xiàn)問題,則Web 應用也出問題。
(4)、使用Cookie
把Session 數(shù)據(jù)放在Cookie 中,對敏感信息進行加密。
優(yōu)點:不依賴外部系統(tǒng),無時延,無穩(wěn)定性問題。
缺點:(1)、Cookie有長度限制。
? ? ? ? ? ? ?(2)、安全性:Session本應該存在服務器端,現(xiàn)在卻放在客戶端,雖然加密,但是還是能被客戶端訪問到。
? ? ? ? ? ? ?(3)、有帶寬消耗
? ? ? ? ? ? ?(4)、性能影響:每次HTTP請求與相應都必須帶Session數(shù)據(jù)。
在實際中,一般使用Session粘貼、Session 集中存儲。
?
轉(zhuǎn)載于:https://www.cnblogs.com/leeeee/p/7276417.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的分布式集群的Session问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: node.js--exports和mod
- 下一篇: 【R】Rstudio set up