分佈式session一致性解決方案

分佈式Session一致性問題

在早期的時候,不少網站因爲用戶規模較小,都是採起的單機部署的模式,只用一臺服務器來承載用戶的請求,這時候Session是存在同一臺服務器上,因此可以很容易實現會話跟蹤和保持。然而隨着用戶規模的擴大,單機部署模式已經沒法承載全部用戶的請求了,這時候人們天然而然想到用多臺服務器來處理用戶的請求,用戶的請求會先到達負載均衡,而後再被轉發到某個具體應用服務器上進行處理。這時候咱們就會遇到一個問題,每次處理同個用戶的請求的服務可能不一樣,那怎麼讓它們的Session數據保持一致呢?nginx

通常來講有如下四種方案:redis

  • Cookie存儲Session
  • Session粘滯
  • Session複製
  • Session集中管理

咱們來一個一個瞭解它們的優劣和使用場景算法

分佈式Session一致性解決方案

Cookie存儲Session

咱們知道Cookie總只有一份的,並且是存在用戶端的,因此咱們能夠經過Cookie來存儲Session信息,這樣無論最後發送到哪臺服務器處理,咱們都能經過Cookie取到Session信息。使用這個方案有如下優缺點segmentfault

優勢後端

  • 簡單易用,無需額外的配置
  • 無需額外的外部存儲

缺點服務器

  • 爲了數據不被泄露,通常須要進行加密,加解密過程須要必定開銷
  • Cookie長度和數量有限制,會限制數據的存儲
  • 每次請求都多出來了Session的數據,須要消耗更多網絡帶寬和系統性能
  • 受限於Cookie的開閉,若是用戶關閉Cookie,Session就失效了,用戶也就沒法正常訪問了

適用場景:數據量小的狀況。網絡

Session粘滯

也就是粘性Session,當用戶訪問負載均衡時,經過某種方法算出該用戶應該訪問的後端服務器,例如經過hash算法。這樣保證了每一個會話都在同一臺服務器上。使用這個方案有如下優缺點:負載均衡

優勢分佈式

  • 使用簡單,只須要配置好轉發規則便可。
  • 沒有額外網絡開銷

缺點性能

  • 存在單點問題,一但某臺機器重啓或宕機,相對應的Session數據將會丟失
  • 會話標識是應用層的信息,則負載均衡器要將同一個會話的請求都保存到同一個Web服務器上的話,就須要進行應用層(七層)的解析,這個開銷比第四層的交換要大。或許有同窗會說,nginx 四層轉發能夠支持ip hash的方式,這樣就能經過四層轉發了。事實上最好的方案是經過會話id進行hash,由於在平常生活中仍是很容易出現ip發生變化的狀況,例如從家裏出去的時候,咱們手機鏈接的網絡從wifi切換到無線流量會發生ip變化,這時候經過ip hash的方式就會丟失Session了。
  • 負載均衡器變爲了一個有狀態的節點,須要計算會話和具體Web服務器的映射,所以內存消耗會更大

適用場景:機器數適中、對穩定性要求不是很是苛刻的狀況

Session複製

既然只有一臺機器存Session容易出現單點問題,那麼咱們就全部機器都存Session,每臺機器間進行Session同步,這樣無論訪問到哪臺機器都能得到Session。這就是Session複製方式,咱們給服務器之間增長了會話數據的同步,經過同步來保證不一樣服務器之間的Session數據的一致。使用這個方案有如下優缺點:

優勢

  • 實現簡單,只須要少許配置
  • 即便某臺機器宕機或者重啓也不影響用戶訪問

缺點

  • 須要依賴支持Session同步的Web服務器,若是Web服務器不支持就不能使用了
  • 存在延遲,由於要等待Session同步過來,特別是在數據量比較大的狀況下更加明顯
  • 在服務器集羣達到數千臺的時候,就會出現瓶頸,由於每臺機器都會對外廣播本身的Session,同時要接收其餘幾千臺機器發出的Session,很是損耗性能。
  • 數據冗餘很是嚴重,幾千臺服務器就有幾千份冗餘數據,浪費了至關多的資源

適用場景:服務器比較少且Session數據量少

Session集中管理

經過單獨的服務器集羣來存儲和管理Session數據,例如redis,其餘全部的應用服務器都從這個存儲集羣獲取對應的Session,從而實現Session的共享。

優勢

  • 可靠性較高,經過單獨的集羣進行統一管理
  • 減小應用服務器的資源開銷

缺點

  • 實現較爲複雜,配置較多
  • 需維護單獨的存儲集羣

適用場景:應用服務器較多、可用性要求較高

每一個方案都各有其適用的場景,你們在實際使用過程當中須要根據實際狀況進行選擇

參考資料

http://blog.itpub.net/69951287/viewspace-2664889/

Enjoy it !

若是以爲文章對你有用,能夠贊助我喝杯咖啡~

版權聲明

轉載請註明做者和文章出處
做者: X先生
http://www.javashuo.com/article/p-hjwdbbqw-mw.html
相關文章
相關標籤/搜索