負載均衡中的session保持


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

當我們需要做負載均衡時,服務端肯定有多台服務器,用戶每次請求進來,會根據負載均衡算法被分配到某一台機器上,假設用戶需要進行一段連續操作時,在第一台機器登陸后,下一個操作被安排到了另一台機器,如果沒有做會話同步,那這台機器肯定沒有他之前的一些操作信息,如登陸狀態等,所以負載均衡下的session保持就變得不簡單了。

解決的方法

ip_hash

將來訪者IP進行HASH后分配到對應的機器上,這樣保證同一個IP會一直在一台機器上,這樣session就不會因為換機器而斷。

缺點:

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

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

  • 如果某台服務器掛了,那一堆分配到這台機器的請求就都跪了。

存session

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

存數據庫

占用數據庫資源,高並發時,數據庫瓶頸。

存文件里

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

存Memcached/Redis

是挺快的,但因為是在內存里,宕機就沒了,session太多時,老的session就會被刪。

利用cookie

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

會話復制

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

總結

把一個用戶捆在某一台服務器上的做法可以叫做會話保持;每台機器都存一個相同發復制品,叫做會話復制;把會話放一個共同地方,所有服務器都從這取,叫會話共享。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM