[java面试]---dubbo系列---(2)dubbo中的负载均衡策略

Author:赵志乾
Date:2019-05-11
Declaration:All Right Reserved!!!

 

dubbo作为一款成熟的rpc框架,在协议所定义的功能之上封装了许多额外的功能,如容错策略、负载均衡策略等等。其中,dubbo支持的负载均衡策略包括随机(Random)、轮询(RoundRobin)、最少活跃调用数(LeastActive)和一致性Hash(ConsistentHash),缺省配置为随机负载均衡测策略。

1、随机负载均衡策略和轮询负载均衡策略

这两种负载均衡策略都比较简单,其所面临的问题就是不会按照实际工作情况自适应。

2、最少活跃调用数

该策略是指将此次请求提交给当前时刻待处理请求数最少的实例进行处理,当存在多个实例均为最少活跃调用数时,则在这几个实例之间进行随机分配。由于该负载均衡策略是按照当前各实例的处理能力来分配请求的,所以能够依据实际的工作情况达到自适应效果。

3、一致性hash

该策略能够保证在服务提供者列表不变的情况下,相同参数的请求总是发送到同一个服务提供者。其相对于普通hash的优点就是通过引入虚拟节点来降低因服务提供者故障而产生的波动。默认情况下,一致性hash会使用160个虚拟节点来构造一致性hash环,并且只使用方法的第一个参数的hash值作为key来获取服务提供者对象(即Invoker)。

 

注1:使用一致性hash负载均衡策略的配置方式:

<!--使用第一个和第2个参数的hash值来定位hash环上的Invoker对象-->
<dubbo:parameter key="hash.arguments" value="0,1">
<!--一致性hash环使用320个虚拟节点-->
<dubbo:parameter key="hash.nodes" value="320">

注2:一致性hash负载均衡策略的工作流程:

首先selectors对象(是ConcurrentMap)会存放每个请求url(interface+group+version+methodName)和一致性hash环对象的映射。则请求到来时获取相应Invoker的流程:通过请求url在selectors中获取一致性hash环对象,然后通过请求参数的hash值在一致性hash环上查找对应的虚拟节点,最后获得服务实例Invoker。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我叫白小猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值