基於http協議本身的限制,我們開發web應用的時候經常使用到session來支援同乙個使用者的會話狀態。(了解http協議參考另一篇文章《http協議解析》)
在應用系統進行分布式部署之後,原本的單機同乙個session變成了多台機器,多個session,同乙個使用者訪問的時候可能一會請求到機器a,一會請求到機器b,會發生session不一致而導致會話丟失。
解決集群session問題一般有以下幾種方案。
session sticky是通過負載均衡器將同樣session的請求每次都傳送到同乙個伺服器端處理。這種方式對於應用伺服器就可以完全不用關心session不一致的問題,直接當做單機處理即可,十分方便。
但在這種請求中,負載均衡器需要感知會話的狀態,要儲存會話和具體伺服器之間的對映關係,這會帶來相當大的損耗,而且一般對映關係存在記憶體中,負載均衡器重啟的話所有會話都會丟失,也不便於容災。
web伺服器之間增加了會話資料的同步,通過同步來保證不同web伺服器之間的session一致。
不過這種方式也帶來了問題:更多的網路開銷,每台機器都要儲存全量的session資料。這種方案不適合集群機器數多的場景。
session集中儲存比較容易理解,就是將session資料的儲存集中放在乙個地方,應用系統不管在哪台機器,都去同乙個地方獲取session資料。這樣session有變動所有應用機器都能獲取到正確的資料。
至於儲存session資料的具體方式,可以使用資料庫,也可以使用其他分布式儲存系統。適合集群機器數量多的,session資料多的場景。
這種方式是最常被使用的,優點多,但也有一些問題:網路的開銷;session集群的穩定性對應用的影響。
這種方式是將會話資料存在cookie中,這樣使用很方便,web應用可以直接從cookie中獲取session資訊,完全不需要考慮session儲存在哪,因為每次請求過來都會帶著session資訊。
但cookie同時也帶來了很多問題,如cookie大小的限制,安全性,頻寬消耗,效能影響等。
上面4中session處理方案各有優勢,我們可以根據不同的場景,選擇最合適的方案。
集群 Session解決方案
在集群中session安全和同步是個最大的問題,下面是收集到的幾種session同步的方案,希望能通過分析其各自的優劣找出其適應的場景。1.客戶端cookie加密 簡單,高效。比較好的方法是自己採用cookie機制來實現乙個session,在應用中使用此session實現。問題 session中資料...
集群 Session解決方案
在集群中session安全和同步是個最大的問題,下面是收集到的幾種session同步的方案,希望能通過分析其各自的優劣找出其適應的場景。1.客戶端cookie加密 簡單,高效。比較好的方法是自己採用cookie機制來實現乙個session,在應用中使用此session實現。問題 session中資料...
集群中的session共享解決方案
隨著網際網路應用的使用者量不斷激增,併發的需求越來越受到開發者的關注,通過集群的方式來解決web的瓶頸。但是集群的session共享是個比較頭疼的事情,歸結起來就三種解決方案 1 客戶端儲存方案 把session加密後存在cookie中,每次session資訊被寫在客服端,然後經瀏覽器再次提交到伺服...