网站推广.NET

网站推广.NET

dubbo负载均衡的几种方式

来源:互联网

dubbo负载均衡的4种方式:1.随机模式(Random Load Balance):按权重设置随机概率;2.轮循模式(Round Robin Load Balance):根据权重轮循选择;3.最小活跃数负载均衡(Least Action Load Balance);4.一致性哈希算法(Consistent Hash Load Balance)。

1.随机模式

英文是:RandomLoadBalance,字面来看是随机的意思,也就是根据权重随机选取。

我们先获取获取所有的invoke数量;判断是否使用负载均衡策略,若不使用,则在invoker集合中随机选取其中一个invoker进行调用;sameWeight参数初始化为true,即默认将所有权重值当做是一样的;在循环中查找每个invoke权重(getWeight涉及到一个预热warmup过程,下面会有讲解),若存在权重不同,则将sameWeight标记false;在invoker集合中,则在区间[1,totalWeight)间选择一个随机值,赋值给offset,循环遍历invoker集合,查询到的权重大于offset时,就返回当前inovker。

2.轮循模式

英文是:Round Robin Load Balance,是指根据权重轮循选择。

若有三个Provider,A、B、C,其对应权重分别为:1,2,3,若请求次数共有6次,则A要获取到1次,B要获取到两次,C要获取到3次。

注意:虽然轮询负载的策略可以根据设置的权重比例来实现分配,但会涉及到一个堆积的问题。假如B处理很慢时,但服务器任在运行,一个请求未完成,另一个请求又来了,就会出现情急堆积的问题,造成系统整体运行速度变慢。

取出servicekey+”.”+methodName为key,从methodWeightMap获取一个map实例,不存在则实例化一个放入其中遍历invoker集合,获取invoker的少数标识,以其为key去map查询实例WeightedRoundRobin(每个invoker对应一个,存放三个值(权重,当前的current,更新时间)),若不存在则初始化一个,放入当前invoker的权重,并初始化current(默认为0)从缓存中查询到的WeightedRoundRobin中权重,与invoker当前权重相比较,不等,则权重发生过变化,更新缓存中的权重信息更新WeightedRoundRobin最后更新时间(后续需要使用到这个时间)遍历完成后,可以找到当前最大current对应的invoke赋值给selectedInvoker),当前invoker对应的WeightedRoundRobin信息(赋值给selectedWRR)和总权重(totalWeight,此处假设预热已完成,不存在修改情况,总权重一直为6)比较invoker的数量与map的数量不一致,则移除1分钟内未使用过的WeightedRoundRobin信息修改当前找到的invoker对应的current值(用当前current值加上(总权重* -1))返回Invoker

3.最小活跃数负载均衡

英文是:LeastAction LoadBalance,意思是“最少活跃调用数均衡算法”。即最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

4.一致性Hash均衡算法

英文是:ConsistentHash LoadBalance,意思是“一致性Hash均衡算法”。

根据服务提供者ip设置hash环,携带相同的参数总是发送的同一个服务提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。

延伸阅读

什么是Dubbo?

Dubbo是一个分布式服务框架,致力于提高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单来说,Dubbo就是个远程服务调用的分布式框架。Dubbo具备的功能有:服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出。

Dubbo核心部分包括:(1)远程通讯,提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型序列化,以及“请求-响应”模式的信息交换方式;(2)集群容错,提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡、失败容错、地址路由、动态配置等集群支持;(3)自动发现,基于注册中心目录服务,使服务消费方能动态的查找服务器提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

50万+团队都在用的项目协作工具一个工具满足团队所需:任务、项目、文档、IM、目标、 日历、甘特图、工时、审批以及更多,让工作更简单智能化研发管理工具PingCode 是简单易用的新一代研发管理平台,让研发管理自动化、数据化、智能化,帮助企业提升研发效能
dubbo负载均衡策略