負載均衡中的session保持

什麼叫負載均衡中的session保持

當咱們須要作負載均衡時,服務端確定有多臺服務器,用戶每次請求進來,會根據負載均衡算法被分配到某一臺機器上,假設用戶須要進行一段連續操做時,在第一臺機器登錄後,下一個操做被安排到了另外一臺機器,若是沒有作會話同步,那這臺機器確定沒有他以前的一些操做信息,如登錄狀態等,因此負載均衡下的session保持就變得不簡單了。redis

解決的方法

ip_hash

未來訪者IP進行HASH後分配到對應的機器上,這樣保證同一個IP會一直在一臺機器上,這樣session就不會由於換機器而斷。算法

缺點:數據庫

  • 多個客戶端共用一個IP時,那被分配到的服務器就慘了。服務器

  • 一個客戶端併發太大時,對接收他請求的服務器也是壓力。cookie

  • 若是某臺服務器掛了,那一堆分配到這臺機器的請求就都跪了。session

存session

把session存下來,這樣每臺服務器都能從公共存儲中的session來獲取客戶端狀態,保證會話的延續。併發

存數據庫

佔用數據庫資源,高併發時,數據庫瓶頸。負載均衡

存文件裏

高併發時硬盤I/O性能是瓶頸。memcached

存Memcached/Redis

是挺快的,但由於是在內存裏,宕機就沒了,session太多時,老的session就會被刪。高併發

利用cookie

第一次請求時,分配完服務器後,負載均衡器給response寫個cookie,把給它的機器記下來,下次來了仍是那臺服務器接客。
cookie的插入和取出分析,都是在負載均衡器中進行的,客戶端和服務器都不知道。

會話複製

就是把每一個服務器節點都複製一份全量的session,沒研究過,不過一聽就感受不太靠譜。

總結

把一個用戶捆在某一臺服務器上的作法能夠叫作會話保持;每臺機器都存一個相同發覆製品,叫作會話複製;把會話放一個共同地方,全部服務器都從這取,叫會話共享。

會話保持方案指定了機器,其實負載也就不均衡了,並且若是某臺服務器宕機了,那這臺機器的session也就都沒了,新請求被分到別的機器,還得重頭來。 會話共享方案還算靠譜。

相關文章
相關標籤/搜索