在早期的時候,不少網站因爲用戶規模較小,都是採起的單機部署的模式,只用一臺服務器來承載用戶的請求,這時候Session是存在同一臺服務器上,因此可以很容易實現會話跟蹤和保持。然而隨着用戶規模的擴大,單機部署模式已經沒法承載全部用戶的請求了,這時候人們天然而然想到用多臺服務器來處理用戶的請求,用戶的請求會先到達負載均衡,而後再被轉發到某個具體應用服務器上進行處理。這時候咱們就會遇到一個問題,每次處理同個用戶的請求的服務可能不一樣,那怎麼讓它們的Session數據保持一致呢?nginx
通常來講有如下四種方案:redis
咱們來一個一個瞭解它們的優劣和使用場景算法
咱們知道Cookie總只有一份的,並且是存在用戶端的,因此咱們能夠經過Cookie來存儲Session信息,這樣無論最後發送到哪臺服務器處理,咱們都能經過Cookie取到Session信息。使用這個方案有如下優缺點segmentfault
優勢後端
缺點服務器
適用場景:數據量小的狀況。網絡
也就是粘性Session,當用戶訪問負載均衡時,經過某種方法算出該用戶應該訪問的後端服務器,例如經過hash算法。這樣保證了每一個會話都在同一臺服務器上。使用這個方案有如下優缺點:負載均衡
優勢分佈式
缺點性能
適用場景:機器數適中、對穩定性要求不是很是苛刻的狀況
既然只有一臺機器存Session容易出現單點問題,那麼咱們就全部機器都存Session,每臺機器間進行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