每天进步一点点【Nginx平滑的基于权重的轮询算法】

假设有三个节点{serverA , serverB , serverC} , 权重为分别为{7,1,1} ,Nginx可以达到A,A,B,A,A,C,A,A,B,A,的效果。在保证准确的权重前提下,实现了调用尽量的分散。

这个算法比较巧妙,可以说是非常天才的算法。如果你没有接触过的话,是绝对写不出来的。

Nginx平滑的基于权重轮询算法描述为:

Algorithm is as follows: on each peer selection we increase current_weight of each eligible peer by its weight, select peer with greatest current_weight and reduce its current_weight by total number of weight points distributed among peers.

算法执行2步,选择出1个当前节点:

  • 每个节点,用它们的当前值加上它们自己的权重。

  • 选择当前值最大的节点为选中节点,并把它的当前值减去所有节点的权重总和。

走一遍:

例如{a:7, b:2, c:1}三个节点,里面的{7,2,1}分别代表abc节点的权重,权重之和是10,一开始我们初始化三个节点的当前值为{0, 0, 0}

a  b  c
  0  0  0  (初始状态)

  7  2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值