負載均衡的那些事?

AskHarries發表於2018-05-17

什麼是負載均衡?

1、負載:就是後端系統的承載能力。比如同等條件下,一個1核cpu-1G記憶體的機器的承載能力一般會比8核cpu-8G記憶體的機器要差;相同配置下,一個cpu利用率為80%的機器比30%的承載能力一般要差等等。

2、均衡:保證後端請求的平衡。比如:在同等情況下,分配到多臺機器的請求要相當;有些情況下,同一使用者儘可能分配到同一臺機器等等。

為什麼要有負載均衡呢?

很明顯,如果我們不去考慮後端的承載情況,有可能直接就把某臺機器壓垮了(比如cpu利用率已經80%了,再給大量的請求直接就乾死了),更嚴重的會直接造成雪崩(一臺壓死了,對應的請求又壓倒其他某臺機器上,又幹死一臺……),從而致使服務癱瘓。

2、如果我們均衡演算法選的不好,就會導致後端資源浪費。比如:如果選擇一致Hash演算法,可以很好利用cache的容量。而如果用隨機,有可能就會讓cache效果大打折扣(每臺機器上都要快取幾乎相同的內容)。

負載均衡演算法有哪些?

1輪詢法(Round Robin)

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

2加權輪詢法(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,依次類推。

3最小連線數法(Least Connections)

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

4隨機法(Random)

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

5加權隨機法

與加權輪詢法一樣,加權隨機法也根據後端機器的配置,系統的負載分配不同的權重。不同的是,它是按照權重隨機請求後端伺服器,而非順序。

6源地址雜湊法(Source Hashing)

源地址雜湊的思想是根據獲取客戶端的IP地址,通過雜湊函式計算得到的一個數值,用該數值對伺服器列表的大小進行取模運算,得到的結果便是客服端要訪問伺服器的序號。採用源地址雜湊法進行負載均衡,同一IP地址的客戶端,當後端伺服器列表不變時,它每次都會對映到同一臺後端伺服器進行訪問。
如果後端伺服器是一快取系統,當後端伺服器增加或者減少時,採用簡單的雜湊取模的方法,會使得命中率大大降低,這個問題可以採用一致性雜湊的方法來解決。 關於一致性雜湊的介紹,可以參考檔案 五分鐘看懂一致性雜湊演算法

負載均衡的那些事?


相關文章