【4.2】Ribbon负载均衡策略
- 1 Ribbon--负载均衡策略
- 2.1 修改负载均衡规则--代码方式
- 2.1.1 具体测试:
- 2.2 修改负载均衡规则--配置文件方式
- 2.2.1 具体配置
- 3 总结
Ribbon负载均衡原理 中学习到:
IRule接口决定了负载均衡的策略。
接下来学习IRule接口的实现有哪些?以及如何修改它的实现。
1 Ribbon–负载均衡策略
Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则:
默认的实现是ZoneAvoidanceRule
2.1 修改负载均衡规则–代码方式
通过定义IRule 实现可以修改负载均衡规则,有两种方式:
- 代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:
@Bean
public IRule randomRule() {
return new RandomRule();
}
这个Bean总的类型是IRule,但是实现的时候可以是IRule的任何一种实现。这里RandomRule也就是随机。
这样配置以后就会让负载均衡规则从轮询变成随机。
2.1.1 具体测试:
首先启动四个服务:
将日志清空,然后进入浏览器依次访问
localhost:8080/order/101
到
localhost:8080/order/104
可以看到8081中有1 和3
8082中有2和4
显然这里的规则是轮询。
接下来我们尝试改变负载均衡的规则:
打开OrderApplication:
这样我们就将负载均衡的规则设置为了随机。
接下来重启OrderApplication:
再次进入浏览器依次访问
localhost:8080/order/101
到
localhost:8080/order/104
可以看到8081里面有2 3 4
8082里面有1
可以看出这里负载均衡的规则是随机。
注意,代码方式的配置是作用于全局的,在order-service里不管是调用哪一个微服务,都会变成随机。
2.2 修改负载均衡规则–配置文件方式
通过定义IRule实现可以修改负载均衡规则的第二种方式:
- 配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
在这种方式可以看到,它会先指定服务名称再去指定负载均衡的规则。
因此,这种方案是针对于某一个微服务而言。
2.2.1 具体配置
找到order-service的application.yml文件,添加:
接下来重启Order服务,回到浏览器:依次访问
localhost:8080/order/101
到
localhost:8080/order/104
可以看出这里是随机而不是轮询。
3 总结
第一种方式作用范围是全局。
第二种配置方式是只针对某个服务而言。
By --Suki 2023/1/5
知识内容来自于黑马程序员视频教学和百度百科。