1. 程式人生 > >負載均衡演算法實現方式

負載均衡演算法實現方式

輪詢(Round Robin)法

1.獲取ip列表

2.根據ip在list的中pos順序獲取,server = keyList.get(pos);(使得同一時刻只能有一個執行緒可以修改pos的值)

隨機(Random)法

1.獲取ip列表

2.Random的nextInt方法取0~keyList.size()區間的一個隨機值 int randomPos = random.nextInt(keyList.size());

源地址雜湊(Hash)法

獲取客戶端訪問的IP地址值,通過雜湊函式計算得到一個數值,用該數值對伺服器列表的大小進行取模運算,得到的結果便是要訪問的伺服器的序號,結果便是選用的伺服器在伺服器列表中的索引值。

1.獲取遠端ip,計算hash值

2.取模計算該hash值得pos 序列號(保證了相同客戶端IP地址將會被雜湊到同一臺後端伺服器)

加權輪詢(Weight Round Robin)法

在獲取伺服器地址之前增加了一段權重計算的程式碼,根據權重的大小,將地址重複地增加到伺服器地址列表中,權重越大,該伺服器每輪所獲得的請求數量越多。

1.根據權重比例重複新增到ip列表中

for (int i = 0; i < weight; i++)

serverList.add(server);

2.按照pos輪詢列表。server = serverList.get(pos);

加權隨機(Weight Random)法

原理同加權和隨機一樣

1.1.根據權重比例重複新增到ip列表中

for (int i = 0; i < weight; i++)

serverList.add(server);

2.int randomPos = random.nextInt(serverList.size());

最小連線數(Least Connections)法

以後端伺服器的視角來觀察系統的負載,而非請求發起方來觀察。

根據後端伺服器當前的連線情況,動態地選取其中當前積壓連線數最少的一臺伺服器來處理當前請求,儘可能地提高後端伺服器的利用效率,將負載合理地分流到每一臺機器。

1.需要後端伺服器定時上報連線情況

2.根據連線情況選擇最小連線