應用負載均衡之LVS(五):加權調度算法的規律
阿新 • • 發佈:2018-08-17
log 示例 html bsp 先後 分享圖片 一次 表示 cdb
公約數。變量i初始化為-1,cw初始化為零。
返回LVS系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html
加權調度算法是一種很常見的調度算法。如果只有兩個後端,調度的順序很容易,但是如果後端多於2個,可能就不像想象中那樣的順序進行調度。
所以,本文揭秘加權調度算法到底是怎麽進行調度的。
1.加權調度算法公式
首先,給一個LVS官方手冊給的加權調度算法公式:
假設有一組服務器S = {S0, S1, …, Sn-1},W(Si)表示服務器Si的權值,一個
指示變量i表示上一次選擇的服務器,指示變量cw表示當前調度的權值,max(S)
表示集合S中所有服務器的最大權值,gcd(S)表示集合S中所有服務器權值的最大
while (true) {
i = (i + 1) mod n;
if (i == 0) {
cw = cw - gcd(S);
if (cw <= 0) {
cw = max(S);
if (cw == 0)
return NULL;
}
}
if (W(Si) >= cw)
return Si;
}
比如,A、B、C三個後端的權重比是2:3:4
,那麽一個調度循環內的調度順序是CBCABCABC。
如果你不想從算法公式裏找規律,那麽看下面。
2.加權調度通俗規律
記住三個權重調度規則:
1.先約分
2.從最大權重開始調度
3.同權重的後端,從前向後調度
例如,三臺後端A:B:C=2:3:4
。這裏沒法約分。
- 調度C
調度之後,比率變成A:B:C=2:3:3
,B和C權重相同,從B開始調度 - 調度B
調度之後,比率變成A:B:C=2:2:3
,所以下次調度C - 調度C
調度之後,比率變成A:B:C=2:2:2
,下次從A開始
當權重全部調整到相同值時,就按照先後順序不斷循環,直到調度完所有權重
- 調度A,調度之後,比率變成
A:B:C=1:2:2
- 調度B,調度之後,比率變成
A:B:C=1:1:2
- 調度C,調度之後,比率變成
A:B:C=1:1:1
- 調度A,調度之後,比率變成
A:B:C=0:1:1
- 調度B,調度之後,比率變成
A:B:C=0:0:1
- 調度C,調度之後,比率變成
A:B:C=0:0:0
- 進入下一個調度循環,順序是:CBCABCABC
所以,每個調度循環的調度順序為:CBCABCABC
調度過程如下圖:
再給個示例,A:B:C:D=2:4:6:8
首先約分,得到A:B:C:D=1:2:3:4
- 調度D
- 調度C
- 調度D
- 調度B
- 調度C
- 調度D
- 調度A
- 調度B
- 調度C
- 調度D
所以,調度順序是DCDBCDABCD。
應用負載均衡之LVS(五):加權調度算法的規律