加权调治算法是生龙活虎种很宽泛的调节算法

图片 1

返回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中具有服务器权值的最大
合同数。变量i早先化为-1,cw开始化为零。

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。这里无法约分。

  1. 调度C
    调节之后,比率产生A:B:C=2:3:3,B和C权重雷同,从B起先调解
  2. 调度B
    调解之后,比率形成A:B:C=2:2:3,所以下一次调整C
  3. 调度C
    调整之后,比率造成A:B:C=2:2:2,下次从A开始
    执政重全部调动到相像值时,就依照前后相继顺序不断循环,直到调解完全数权重
  4. 调治A,调治之后,比率产生A:B:C=1:2:2
  5. 调治B,调节之后,比率产生A:B:C=1:1:2
  6. 调解C,调解之后,比率产生A:B:C=1:1:1
  7. 调解A,调解之后,比率形成A:B:C=0:1:1
  8. 调治B,调节之后,比率产生A:B:C=0:0:1
  9. 调解C,调治之后,比率形成A:B:C=0:0:0
  10. 跻身下八个调节循环,顺序是:CBCABCABC

故而,每种调节循环的调整顺序为:CBCABCABC

调迈进度如下图:

图片 1

再给个示范,A:B:C:D=2:4:6:8

率先约分,获得A:B:C:D=1:2:3:4

  1. 调度D
  2. 调度C
  3. 调度D
  4. 调度B
  5. 调度C
  6. 调度D
  7. 调度A
  8. 调度B
  9. 调度C
  10. 调度D

由此,调治顺序是DCDBCDABCD。