輪詢(Round Robin)
輪詢算法把每個請求輪流發送到每個服務器上。下圖中,一共有 6 個客戶端產生了 6 個請求,這 6 個請求按 (1, 2, 3, 4, 5, 6) 的順序發送。最后,(1, 3, 5) 的請求會被發送到服務器 1,(2, 4, 6) 的請求會被發送到服務器 2。
該算法比較適合每個服務器的性能差不多的場景,如果有性能存在差異的情況下,那么性能較差的服務器可能無法承擔多大的負載。下圖中,服務器 2 的性能比服務器 1 差,那么服務器 2 可能無法承擔多大的負載。
2. 加權輪詢(Weighted Round Robbin)
加權輪詢是在輪詢的基礎上,根據服務器的性能差異,為服務器賦予一定的權值。例如下圖中,服務器 1 被賦予的權值為 5,服務器 2 被賦予的權值為 1,那么 (1, 2, 3, 4, 5) 請求會被發送到服務器 1,(6) 請求會被發送到服務器 2。
最少連接(least Connections)
由于每個請求的連接時間不一樣,使用輪詢或者加權輪詢算法的話,可能會讓一臺服務器當前連接數多大,而另一臺服務器的連接多小,造成負載不均衡。例如下圖中,(1, 3, 5) 請求會被發送到服務器 1,但是 (1, 3) 很快就斷開連接,此時只有 (5) 請求連接服務器 1;(2, 4, 6) 請求被發送到服務器 2,它們的連接都還沒有斷開,繼續運行時,服務器 2 會承擔多大的負載。
最少連接算法就是將請求發送給當前最少連接數的服務器上。例如下圖中,服務器 1 當前連接數最小,那么請求 6 就會被發送到服務器 1 上。
加權最小連接(Weighted Least Connection)
在最小連接的基礎上,根據服務器的性能為每臺服務器分配權重,然后根據權重計算出每臺服務器能處理的連接數。
隨機算法(Random)
把請求隨機發送到服務器上。和輪詢算法類似,該算法比較適合服務器性能差不多的場景。