RandomLoadBalance

今天总结下之前看过的dubbo源码中RandomLoadBalance使用的算法!

一:每个服务的权重不同

算法分析:在该段代码中,通过获取提供者服务的权重,然后计算出总权重,通过总权重计算出offset,然后在减去每个服务的权重,如果发现小于0,则调用当前服务。

dubboæºç _RandomLoadBalance(éæºï¼ææé设置éæºæ¦ç)åæ

例:有3个服务 A,B,C  其中A的权重为1,B的权重为2,C的权重为3;

此时的invokers中的服务的顺序有6种情况,分别为ABC,BAC,ACB,CAB,BCA,CBA  此时的 totalWeight=1+2+3=6,此时offset=random.nextInt(totalWeight)=random.nextInt(6)=【0,1,2,3,4,5】

可以通过一个列表描述碰撞到A,B,C的情况

 offsetoffsetoffsetoffsetoffsetoffset
invokers012345
ABCABBCCC
BACBBACCC
ACBACCCBB
CABCCCABB
BCABBCCCA
CBACCCBBA

当offset=0的时候,如果invokers=ABC 则调用的是A,因为0-1<0 ; 当offset=4的时候,会经过几个循环

                ①offset=4-1=3>0,此时offset=3,继续下一步

                ②offset=3-2=1>0,此时offset=1,继续下一步

                ③offset=1-3=-2<0,调用   此时调用C

则调用A的概率为 P(A)=6/(6*6)=1/6

则调用B的概率为 P(B)=12/(6*6)=1/3

则调用C的概率为 P(B)=18/(6*6)=1/2                 

         
二:每个服务的权重相同

   invokers.get(random.nextInt(length))   

   length为服务的个数

   通过java提供的随机数,随机调用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值