常見負載均衡演算法

2021-09-13 23:47:16 字數 1523 閱讀 3645

輪詢法是負載均衡中最常用的演算法,它容易理解也容易實現。 

輪詢法是指負載均衡伺服器(load balancer)將客戶端請求按順序輪流分配到後端伺服器上,以達到負載均衡的目的。 

假設現在有6個客戶端請求,2台後端伺服器。當第乙個請求到達負載均衡伺服器時,負載均衡伺服器會將這個請求分派到後端伺服器1;當第二個請求到害時,負載均衡伺服器會將這個請求分派到後端伺服器2。然後第三個請求到達,由於只有兩台後端伺服器,故請求3會被分派到後端伺服器1。依次類推,其示意圖如圖1所示。

圖1:輪詢法負載均衡

簡單的輪詢法並不考慮後端機器的效能和負載差異。給效能高、負載低的機器配置較高的權重,讓其處理較多的請求;而效能低、負載高的機器,配置較低的權重,讓其處理較少的請求。加權輪詢法可以很好地處理這一問題,它將請求順序且按照權重分派到後端伺服器。 

假設有6個客戶端請求,2台後端伺服器。後端伺服器1被賦予權值5,後端伺服器2被賦予賦予權值1。這樣一來,客戶端請求1,2,3,4,5都被分派到伺服器1處理;客戶端請求6被分派到伺服器2處理。接下來,請求7,8,9,10,11被分派到伺服器1,請求12被分派到伺服器2,依次類推。這個請求分派的過程可以用圖2來表示。

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

即使後端機器的效能和負載一樣,不同客戶端請求複雜度不一樣導致處理時間也不一樣。最小連線數法根據後端伺服器當前的連線數情況,動態地選取其中積壓連線數最小的一台伺服器來處理當前的請求,盡可能提高後端伺服器的利用效率,合理地將請求分流到每一台伺服器。 

為什麼根據連線數可以合理地利用伺服器處理請求呢? 

考慮乙個客戶端請求的處理邏輯較複雜,需要伺服器的處理時間較長,由於客戶端需要等待伺服器的響應,故需要保持與伺服器的連線,這樣一來,客戶端就需要與伺服器保持較長時間的連線。 

假設客戶端請求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)

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

常見負載均衡演算法

隨著系統日益龐大 邏輯業務越來越複雜,系統架構由原來的單一系統到垂直系統,發展到現在的分布式系統。分布式系統中,可以做到公共業務模組的高可用,高容錯性,高擴充套件性,然而,當系統越來越複雜時,需要考慮的東西自然也越來越多,要求也越來越高,比如服務路由 負載均衡等。此文將針對負載均衡演算法進行講解,不...

常見負載均衡演算法

輪詢很容易實現,將請求按順序輪流分配到後台伺服器上,均衡的對待每一台伺服器,而不關心伺服器實際的連線數和當前的系統負載。這裡通過例項化乙個serviceweightmap的map變數來伺服器位址和權重的對映,以此來模擬輪詢演算法的實現,其中設定的權重值在以後的加權演算法中會使用到,這裡先不做過多介紹...

常見負載均衡演算法

思路 獲取隨機數,隨機數不大於服務集合的容量,將該隨機數當作下標,獲取ip 服務ip集合 private static list serverips arrays.aslist a b c d e public static string random 思路 建立乙個新的list,將含有權重值得ip...