Ribbon(负载均衡)
Ribbon概述
在 SpringCloud 中, Nacos⼀般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Nacos中读取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。
Ribbon作用
1.服务调用
基于Ribbon实现服务调用, 是通过拉取到的所有服务列表组成(服务名-请求路径的)映射关系。借助 RestTemplate 最终进⾏调用
2. 负载均衡
当有多个服务提供者时,Ribbon可以根据负载均衡的算法自动的选择需要调用的服务地址
Ribbon实现订单调用商品服务
-
不需导入坐标(springcloud提供的服务发现的jar中已包含了Ribbon的依赖)
-
商品服务控制层打印查询商品的信息
-
订单服务(消费者),添加负载均衡注解
@Bean
@LoadBalanced //负载均衡
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
-
订单控制层通过服务名称消费使⽤
Ribbon实现负载均衡
-
服务端负载均衡
先发送请求到负载均衡服务器或者软件,然后通过负载均衡算法,在多个服务器之间选择⼀个进⾏访 问
-
客户端负载均衡
客户端会有⼀个服务器地址列表,在发送请求前通过负载均衡算法选择⼀个服务器,然后进行访问
商品服务举例
-
再创建一个商品微服务启动,设置其端口为8082
启动两次服务器验证效果,并查看两个控制台发现以轮询的方式调用了商品服务
负载均衡策略
yml中需要调用的微服务名称默认不写是轮询方式
-
com.netflix.loadbalancer.RoundRobinRule :以轮询(A-B-A-B)的方式进行负载均衡
-
com.netflix.loadbalancer.RandomRule :随机策略
-
com.netflix.loadbalancer.RetryRule :重试策略
-
com.netflix.loadbalancer.WeightedResponseTimeRule :权重策略。会计算每个服务的权重,越高的被调用的可能性越大
-
com.netflix.loadbalancer.BestAvailableRule :最佳策略。遍历所有的服务实例,过滤掉故障实例,并返回请求数最小的实例返回
-
com.netflix.loadbalancer.AvailabilityFilteringRule :可⽤过滤策略。过滤掉故障和请求数超过阈值的服务实例,再从剩下的实例中轮询调用
-
ZoneAvoidanceRule:以区域可用的服务器为基础进行服务器的选择
✔在启动类方法上添加注解后再运行
自定义负载均衡策略
方式1:定义⼀个新的IRule:(全局设置--->对所有微服务生效)
@Bean
public IRule randomRule(){
return new RandomRule();
}
方式2:在yml配置文件中配置:(局部设置--->对指定微服务生效)
#需要调⽤的微服务名称
service-product:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
标签:Feign,调用,服务,负载,---,均衡,com,Ribbon
From: https://blog.csdn.net/m0_63016075/article/details/142389902