粗略的解析ribbon负载均衡策略下的轮询策略

先直接上图:在这里插入图片描述
在这里插入图片描述
这里我只讲轮询算法的实现:
在这里插入图片描述
很明显,这个轮询类继承了AbstractLoadBalancerRule这个抽象类
看下轮询类中定义了什么东西:在这里插入图片描述
举个例子:
看到这个UP没,UP通俗的来讲,就是说活的机器。这里是2个在这里插入图片描述
在这里插入图片描述
看下具体的代码实现:在这里插入图片描述
在这里插入图片描述
这里再补充:

while(!this.nextServerCyclicCounter.compareAndSet(current, next));

这个nextServerCyclicCounter在之前的构造函数里面初始化为0了。
再看一遍这个图
在这里插入图片描述
再看下代码中是不是说:next=(current+1)/modulo?
那么current初始化为0,0+1后为1,不就对应了上图中的,reset接口计数从1开始。然后不断的取余进行计算下标位置

那么总结:
ribbon的轮询算法:
1.通过你配置的信息,找到你对应的服务名称,计算这个服务下有多少个活着的机器数(我们这里是8001,8002,一共2个),假设为active_sum
2.你调用一次方法,那么rest从1开始计数,假设为rest_count
计算公式rest_count%active_sum=index
3.计算出index后,内部有一个自旋+CAS操作
比较当前值curr和你计算出来的index值,如果不一样,那么index值赋给curr,则实现一个index的转变。(CAS效率高)
那么你一个index对应唯一的一个ip地址
那么从index的转变----------------->>ip地址的转变,即ip地址的轮询。

结束(可能不太详细,更深层的源码并没有详细的解释出来,不过大概就是这样了,我个人认为记住两点就好了,一个是index的下标计算方式,还有一个是CAS+自旋操作来实现index的变换

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zong_0915

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值