在dubbo的服务提供者集群时,消费端请求分发到哪一个节点,这时就牵扯到dubbo负载均衡问题。dubbo负载均衡有五种配置模式,分别为:
- 无策略配置,全完随机分发;
- 根据服务权重配置比例,随机分发;
- 根据服务权重配置比例,轮询分发;
- 最少活跃调用数模式;
- 一致性hash模式;
本章提供者,消费者工程代码在如下文章中工程基础之上调整测试:
Dubbo(六)使用SpringBoot搭建dubbo服务提供者工程
Dubbo(七)使用SpringBoot搭建dubbo消费者工程
Dubbo(五)Dubbo 简单监控平台(monitor)搭建
一、无策略配置,全完随机分发模式
及默认的分发模式,不做任何配置时,分发到提供者哪一个节点完全随机。默认情况下权重都为100。我们在我们以前的springboot工程上通过修改配置文件中dubbo协议端口来启动不同的节点。
java代码如下,在远程接口实现方法中打印当前节点端口做区分
启动完成后通过dubbo-admin管理界面可以看到启动成功的同一个接口服务又两个不同节点的提供者信息:
启动消费者工程后我们进行访问测试:其访问打印无规律。
二、根据服务权重配置比例,随机分发
在提供方接口类上@Service注解上通过weight 注解属性进行配置,系统将根据权重之间比例进行随机分发。我们在测试中启动两个服务,比重分别为300和100。
启动成功后dubbo-admin 界面查看如下:
访问请求8次访问后打印如下:可以看到分发比例按照3:1进行分发。
三、根据服务权重配置比例,轮询分发
在注解@Service中指定负载均衡用的属性为loadBalance。前面随机模式中loadBalance默认值都为"random"。在轮询模式中loadBalance需要指定为"roundrobin"。我们启动两个服务负载均衡模式都为"roundrobin",其权重分别为 100和300。通过访问测试我们可以看到,所谓轮询+权重模式配置后,类似于每个节点相当于一个木桶,权重越大的木桶容量约大。反正越小。系统将一次像每个桶中到入同体量的水,当某个桶满了之后,将向未满的桶中再轮询加水。直到全部都添满,再重复往三个不同大小的空桶中继续依次添水。每次添水相当于dubbo每次分发请求。
四、最少活跃调用数模式
最少活跃调用数表示为服务器节点处理接口的能力,处理接口约耗时则活跃数约小,系统会使慢的节点约少接收到请求。配置方式loadbalance="leastactive"。(使用最小活跃调用数时,不要配置权重不然失去了该模式意义)当启动两个服务后通过接口中睡眠时间来模拟接口处理能力,通过控制台可以看到睡眠时间越小的节点获取的请求越多。耗时越久的接收的请求越小。
五、一致性Hash模式
一致性hash模式表示相同接口相同参数的请求将固定发送到某一个节点。在Service注解中使用loadbalance="consistenthash"进行设置。
我们在测试访问时,使用不同的参数111,222,333分别进行测试。通过控制台可以看出某个参数第一次出现在某个节点后,后续的同一个请求同一参数的都将分配在该节点上。