負載均衡(Load Balancing)學習筆記(三)

本文講述實現負載均衡的常用算法。

輪詢法(Round Robin)

輪詢法是負載均衡中最常用的算法,它容易理解也容易實現。
輪詢法是指負載均衡服務器(load balancer)將客戶端請求按順序輪流分配到後端服務器上,以達到負載均衡的目的。
假設現在有6個客戶端請求,2臺後端服務器。當第一個請求到達負載均衡服務器時,負載均衡服務器會將這個請求分派到後端服務器1;當第二個請求到害時,負載均衡服務器會將這個請求分派到後端服務器2。然後第三個請求到達,由於只有兩臺後端服務器,故請求3會被分派到後端服務器1。依次類推,其示意圖如圖1所示。


圖1:輪詢法負載均衡

加權輪詢法(Weighted Round Robin)

簡單的輪詢法並不考慮後端機器的性能和負載差異。給性能高、負載低的機器配置較高的權重,讓其處理較多的請求;而性能低、負載高的機器,配置較低的權重,讓其處理較少的請求。加權輪詢法可以很好地處理這一問題,它將請求順序且按照權重分派到後端服務器。
假設有6個客戶端請求,2臺後端服務器。後端服務器1被賦予權值5,後端服務器2被賦予賦予權值1。這樣一來,客戶端請求1,2,3,4,5都被分派到服務器1處理;客戶端請求6被分派到服務器2處理。接下來,請求7,8,9,10,11被分派到服務器1,請求12被分派到服務器2,依次類推。這個請求分派的過程可以用圖2來表示。


圖2:加權輪詢法負載均衡

最小連接數法(Least Connections)

即使後端機器的性能和負載一樣,不同客戶端請求複雜度不一樣導致處理時間也不一樣。最小連接數法根據後端服務器當前的連接數情況,動態地選取其中積壓連接數最小的一臺服務器來處理當前的請求,儘可能提高後端服務器的利用效率,合理地將請求分流到每一臺服務器。
爲什麼根據連接數可以合理地利用服務器處理請求呢?
考慮一個客戶端請求的處理邏輯較複雜,需要服務器的處理時間較長,由於客戶端需要等待服務器的響應,故需要保持與服務器的連接,這樣一來,客戶端就需要與服務器保持較長時間的連接。
假設客戶端請求1,2,3,4,5已被分派給服務器1和服務器2,其分派的情況如圖3所示:


圖3:最小連接法示意圖(1)

此時,服務器上的請求1,請求3已處理完畢,與客戶端的連接已斷開。而請求2,4,5還在服務器上處理,即服務器還保持與這些請求的客戶端的連接。
如果再把請求分派到服務器2,則會導致服務器的請求更多,服務器2的負載更高。如果考慮服務器的連接數,當前服務器1的連接數爲1,服務器2的連接數爲2,將請求分派到服務器1,則負載相對均衡。採用最小連接數法的分派方法如圖4所示:


圖4:最小連接法示意圖(2)

隨機法(Random)

隨機法也很簡單,就是隨機選擇一臺後端服務器進行請求的處理。由於每次服務器被挑中的概率都一樣,客戶端的請求可以被均勻地分派到所有的後端服務器上。

源地址哈希法(Source Hashing)

源地址哈希的思想是根據獲取客戶端的IP地址,通過哈希函數計算得到的一個數值,用該數值對服務器列表的大小進行取模運算,得到的結果便是客服端要訪問服務器的序號。採用源地址哈希法進行負載均衡,同一IP地址的客戶端,當後端服務器列表不變時,它每次都會映射到同一臺後端服務器進行訪問。
如果後端服務器是一緩存系統,當後端服務器增加或者減少時,採用簡單的哈希取模的方法,會使得命中率大大降低,這個問題可以採用一致性哈希的方法來解決。
關於一致性哈希的介紹,可以參考文件 一致性Hash(Consistent Hashing)原理剖析

參考資料

    1. http://www.jscape.com/blog/load-balancing-algorithms
    2. 大型網站技術架構——核心原理與安全分析,李智慧著,電子工業出版社
    3. http://www.cnblogs.com/SmartLee/p/5161415.html
    4. http://blog.csdn.net/lihao21/article/details/54193868

 

注:轉載自https://leehao.me

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章