dubbo中的负载均衡算法

1.加权随机算法

例如 A ,B, C 权重为 5,3,2

然后生成区间[0,5),[5,8),[8,10],随机范围为0~10,权重越大则概率越大

2.加权轮询

例如 A ,B, C 权重为 5,3,2

则按照 A,,A,A,A,A,B,B,B,C,C轮询

  • 缺点:同样存在慢的提供者累积请求的问题。

加权轮询过程过程中,如果某节点权重过大,会存在某段时间内调用过于集中的问题。 例如 ABC 三节点有如下权重:{A: 3, B: 2, C: 1} 那么按照最原始的轮询算法,调用过程将变成:A A A B B C

对此,Dubbo 借鉴 Nginx 的平滑加权轮询算法,对此做了优化,调用过程可抽象成下表:

轮前加和权重

本轮胜者

合计权重

轮后权重(胜者减去合计权重)

起始轮

\

\

A(0), B(0), C(0)

A(3), B(2), C(1)

A

6

A(-3), B(2), C(1)

A(0), B(4), C(2)

B

6

A(0), B(-2), C(2)

A(3), B(0), C(3)

A

6

A(-3), B(0), C(3)

A(0), B(2), C(4)

C

6

A(0), B(2), C(-2)

A(3), B(4), C(-1)

B

6

A(3), B(-2), C(-1)

A(6), B(0), C(0)

A

6

A(0), B(0), C(0)

我们发现经过合计权重(3+2+1)轮次后,循环又回到了起点,整个过程中节点流量是平滑的,且哪怕在很短的时间周期内,概率都是按期望分布的。

如果用户有加权轮询的需求,可放心使用该算法

3.一致性hash

hash函数,hash环,顺时针最近,删除添加节点无需迁移,不均匀问题可用虚拟节点解决

4.最小活跃度

根据目标集群服务器,处理性能最高的权重越高,处理性能较低的,权重也交低

实现:根据请求处理的吞吐量--》发起一次请求开始,计数器+1,一次请求处理完成,计数器-1,在相同时间内,计数器越小吞吐量越高

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值