HAproxy採用粘滯會話嗎?

HAProxy是我們選用的世界一流的負載均衡器,每秒可處理250,000個連接及數萬個請求。不僅功能強大,而且經事實證明,它仍然非常靈活,有強大的記錄及監控系統還有很多其它特點。

但是,同其它許多負載均衡器相同的是,HAproxy的主要特點也是:粘滯會話。這一功能很有用,甚至對於某些系統來說,是必須的,如某些系統的網絡服務器會話是不可移動的,即不可在網絡服務器之間隨機移動會話。許多PHP系統不使用此功能,因爲它們使用Memcache來存儲會話。但是基於Java的系統通常採用此功能,因爲很多數據是存在本地每臺應用服務器的內存中。

因爲各種需求不同,而很多人認爲,粘滯是好的,所以,我們的系統默認設置就是粘滯會話。HAProxy使用cookie來追蹤用戶或瀏覽器最後使用的後臺服務器,如果有新的需求,將自動轉給同樣的後臺服務器進行處理。

雖然看起來這一系統功能工作簡單,但是有時候是會遇到問題的,事實上,最近發生的一系列問題,使我們重新思考是否應該把粘滯會話設置爲默認狀態,是否對於某些服務,尤其是對於大型的繁忙系統,我們可以關閉這一功能嗎?

儘管從理論上來說,一切應該不會出錯,但是在系統高負載時的動態行爲可能導致系統不穩定。我們見到過這樣一個案例,當後臺服務器已經超負荷的時候,負載均衡器仍然把需求調度到這一服務器,直至服務器癱瘓,而事實上,負載均衡器應該把用戶需求調度到其他服務器上進行處理。

這是因爲cookie要求這樣做,所以才發生此操作。儘管HAProxy有負載均衡分配方法即令牌循環分配法,但要弄清楚一點:這種方法只是在沒有cookie的情況下才會進行請求分配。當存在cookie的時候,會分配給同一臺後臺服務器,直至服務器癱瘓。然後,cookie和負載再轉至下一臺服務器,導致下一臺服務器超負載。

這會帶來很多系統不穩定問題,當超負載時,負載會在系統間不斷跳動。結果就是,對於每秒處理上千請求的繁忙系統來說,要想關閉它或排除其故障,真的是很困難的。

因此,關閉cookies或會話後,實際的令牌循環或其它有用的方案如最小連接數才能生效,可以對請求進行均衡處理。我們親歷過關閉這些cookie或會話後,系統穩定性提高了很多。

所以,現在只有當需要用到粘滯會話的時候,我們才用,如Java系統或其它系統。除了這些特殊情況之外,我們會讓請求自由分配,以提高系統性能及穩定性。

 

                 (Authored by Steve Mushero / ChinaNetCloud CEO & CTO  本博客英文原文請點此查看
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章