Ribbon负载均衡之轮询算法

轮询算法

  • 上次请求下标值(第一次默认为0)加1%服务器集群总数量=实际调用服务下标,每次重启服务从1开始计时

源码分析

  • Ribbon实现负载均衡实在RoundRobinRule类中完成的
    Ribbon负载均衡之轮询算法_第1张图片

  • choose方法为轮询算法,在这个方法里面,我们得到了集群里服务数量serverCount
    Ribbon负载均衡之轮询算法_第2张图片

  • 将serverCount传入incrementAndGetModulo方法里面
    Ribbon负载均衡之轮询算法_第3张图片

  • incrementAndGetModulo方法里,我们得到之前下标,然后加1,然后与当前服务数量取模,就得到了需要调用服务的下标,然后利用cas自旋操作将nextServerCyclicCounter更新为当前下标值,然后返回next,这样就完成轮询操作了
    Ribbon负载均衡之轮询算法_第4张图片

这几个数据整理了一个表格,假设集群数量(serverCount)为2,结果集为

nextServerCyclicCounter current next 更新后的nextServerCyclicCounter
0 0+1=1 1%2=1 1
1 1+1= 2 2%2=0 0
0 0+1=1 1%2=1 1

这样就完成了一个轮询操作

你可能感兴趣的:(框架,java,分布式,算法)