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