dubbo的负载均衡有4种,默认的是random loadBalance。
random loadbalance:按权重随机调用。如果所有的权重都一样,则随机调用。否则按照权重之和取随机数。 根据权重之和生成一个随机数,然后和具体的服务实例的权重相减做偏移量,然后取权重小于0的。 比如随机数为10,某一个服务实例的权重是12,10-12<0,那么该服务实例被调用。
roundrobin LoadBalance轮询,按公约后的比例来设置轮询比例。存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。
LeastActive LoadBalance:最少活动调用数。活动数最小的优先调用。后台对每个要调用的方法维护了一个活动数active,然后从多个Invoker中找出活动数最小的Invoker集合,如果Invoker设置了权重且值不一样,则根据权重总和生成一个随机数,和每个Invoker的权重相减做偏移量,如果小于等于0,则调用该Invoker,否则随机调用
ConsistentHash LoadBalance:一致性hash,相同参数的请求总是会发到同一提供者。
缺省只对第一个参数 Hash,如果要修改,请配置 <dubbo:parameter key=“hash.arguments” value=“0,1” />,例如调用方法invoke(String s1,String s2); 若hash.arguments为1(默认值),则仅取invoke的参数1(s1)来生成hashCode
缺省用 160 份虚拟节点,如果要修改,请配置 <dubbo:parameter key=“hash.nodes” value=“320” />
示例:
<dubbo:service interface="…" loadbalance=“roundrobin” />
<dubbo:reference interface="…" loadbalance=“roundrobin” />
<dubbo:service interface="…">
<dubbo:method name="…" loadbalance=“roundrobin”/>
</dubbo:service>