web服務器集群(多台web服務器)后session如何同步和共享


在訪問量上去以后,很多人會采用web集群的方式在滿足逐漸增長的用戶量。這時候就不得不面對一個問題,那就是在多個服務器下,每次請求都會因為負載均衡而分配到不同的服務器上。用戶在登錄服務器后,下一次請求被分配到另一個服務器上,這時候session不同步,用戶就無法繼續使用原先的session。下面我就聊聊如何解決這個問題。

一、利用Mysql數據庫共享Session數據的方式

使用一個mysql服務器做共享服務器,把所有的session的數據保存mysql服務器上,所有的web服務器都來這台mysql服務器來獲取session數據。這里有一個關鍵的地方,用來存放session的數據表不要跟其他數據庫表放在一起,要獨立開來,專門放在一個低端的服務器上面。不然,數據庫本身壓力就很大了,再加上session是需要頻繁的讀取的,這使得數據庫很容易達到瓶頸,從而導致過高的響應延遲。

二、利用cookie共享Session數據

當用戶請求后產生的session,我們把他的sessionId和值都存在cookie里面。這樣,當你訪問a服務器后,產生了session放在客戶端的cookie里面,你在訪問被分配到b服務器上。這時候,b服務器先判斷本身服務器上有沒有這個用戶的session,如果沒有,在去看看客戶端的cookie里面有沒有這個session,如果有,就獲取客戶端的這個cookie里面的session。這樣就實現了session的同步。

三、使用內存來共享Session數據

這里建議可以選擇采用開源的緩存系統來完成session的共享,比如memcache等。原理跟mysql一樣,不管哪個服務器產生的session都放在一個"內存池"里面。要獲取session數據的時候都統一到這里獲取。我建議用這個方法。


免責聲明!

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



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