首頁  >  文章  >  運維  >  session一致性設計

session一致性設計

大鹏
大鹏原創
2021-06-25 18:09:37197瀏覽

session一致性

什麼是session

web-server可以自動為同一個瀏覽器的存取使用者自動建立session,提供儲存功能。一般把使用者登入資訊存到session中。

什麼是session一致性問題

當後端只有一台web-server的時候,每次http請求,都能找到正確的session。問題是不能滿足高可用,一台server掛了就完蛋了。冗餘 故障轉移,部署多台web-server,nginx路由到不同的web-server。每次http請求都路由,不保證路由到同一個server,就有了一致性問題。

解決session一致性的常用方案

一致性hash

最先想到的方案,根據客戶端IP做hash,保證同一個IP落在一個web- server上。也可用根據業務欄位做hash,例如userId、cityId,使用更靈活。但這樣破壞了單一原則,讓網關和業務粘連,如非必要不建議使用。優點:節省緩存,可用水平擴充。缺點:部分服務重啟,會遺失session,導致部分用戶重新登入。如果hash水平擴展,rehash後session重新分佈,會有一部分使用者路由不到session

session同步

多web-server之間的session互相同步,這樣每個web-server都包含全部的session資訊。缺點:因為包含全部session,叢集數量受記憶體限制,擴充受限。

客戶端儲存

登入資訊儲存到客戶端,每次請求帶著使用者資訊。服務端完全無狀態化,方便擴充。優點:服務端不用儲存。缺點:每次http請求攜帶用戶訊息,浪費流量;有資訊外洩風險;cookie儲存資訊不能太多。

後端集中存儲

web-server連結一個統一的存儲,保存session信息,推薦存到redis集群,方便後續擴展。優點:沒有資訊外洩風險;水平擴充不會遺失資料;缺點:增加了一次網路請求,需要修改業務代碼,查詢redis。

以上是session一致性設計的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn