負載均衡演算法實現方式
輪詢(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.根據連線情況選擇最小連線