6 種常見的負載均衡算法

負載均衡算法有很多,下面介紹 6 種常見的負載均衡算法。

靜態算法

  1. 輪詢(Round Robin)

將客戶端請求按照順序發送給不同的服務實例。通常要求服務實例是無狀態的。

如下圖所示:

第 1 個請求,先發給第 1 臺服務器 A

第 2 個請求,發給下一臺服務器,即第 2 臺服務器 B

第 3 個請求,發給下下一臺服務器,即第 3 臺服務器 C

第 4 個請求,由於 3 臺服務器都已經輪流發送了一遍,因此需要從頭開始,先發給第 1 臺服務器 A

以此類推...

  1. 粘性輪詢(Sticky Round Robin)

這是輪詢算法的改進版本。

如果 Alice 的第 1 個請求發送給了服務 A,那麼後續的請求也會繼續發送給服務 A。

同樣的,Bob 的第 1 個請求發送給了服務 B,那麼後續的請求也會繼續發送給服務 B。

  1. 加權輪詢(Weighted Round Robin)

可以爲每個服務設置權重。權重較高的服務將會處理比其他服務更多的請求。

如下圖所示,服務 A、B 和 C 的權重分別爲 0.8、0.1 和 0.1,那麼服務 A 將會接收並處理更多的請求。

可以看到,前 3 個請求都路由給了服務 A,而第 4 個請求路由給了服務 B。

  1. 哈希(Hash)

該算法根據傳入請求的 IP 或 URL 進行哈希函數運算,根據哈希運算的結果,將請求路由到相應的服務實例。

由於我們共有 3 臺服務器,因此將哈希結果對 3 取模之後,得到的取值範圍爲 0、1 和 2。

以 IP 作爲哈希的 Key 爲例:

對 Alice 的 IP 進行哈希取模處理之後,結果爲 0,因此 Alice 的請求都會路由到服務 A。

而對 Bob 的 IP 進行哈希取模處理之後,結果爲 2,因此 Bob 的請求都會路由到服務 C。

動態算法

  1. 最小連接數(Least Connections)

新的請求會被髮送到當前併發連接數最少的服務實例。

服務 A、服務 B 和服務 C,當前已建立的連接數分別是 1000、100 和 10。

顯然,服務 C 當前的連接數遠小於服務 A 和服務 B。因此,新的 4 個請求都路由給了服務 C。

  1. 最短響應時間(Least Response Time)

新的請求會被髮送到響應時間最快的服務實例。

服務 A、服務 B 和服務 C,當前的請求響應時間分別是 100ms、10ms 和 1ms。

顯然,服務 C 當前的響應時間是最快的。因此,新的 4 個請求都路由給了服務 C。

粘性輪詢(Sticky Round Robin)和 哈希(Hash)

從效果上來看,粘性輪詢算法和哈希算法似乎很相似。但其實,還是有很多差異的點。

例如:

參考

https://bytebytego.com/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/IZtBLxmdhaD5j3tHmVyYTA