什么是Ribbon?
Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单地说,就是在配置文件中列出Load Balancer(简称LB)后面所有机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也可以实现自己的Ribbon算法.
Ribbon 有哪些负载均衡算法?
RoundRobinRule
: 默认轮询的方式
RandomRule
: 随机方式
WeightedResponseTimeRule
: 根据响应时间来分配权重的方式,响应的越快,分配的值越大。
BestAvailableRule
: 选择并发量最小的方式
RetryRule
: 在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server
ZoneAvoidanceRule
: 根据性能和可用性来选择。
AvailabilityFilteringRule
: 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值)
如何集成Ribbon?
<!--nacos服务注册发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
Nacos 的服务中已经帮我们自动集成了Ribbon,我们可以测试一下,对之前的代码进行一些改造,新建一个库存服务,修改一下端口号.
启动两个库存服务和订单服务,看下Nacos 中心.
现在本地调用一下订单服务,已经变成轮询访问库存服务了
如何修改Ribbon 默认的负载均衡策略?
官方给了两种方式,第一种是配置类的方式,但是这种有坑,就是配置类不能在@CompnentScan 扫描到的地方,负责就会变成全局的.
第二种是比较常见的方式,在application.yml 文件中配置
server:
port: 9081
#应用名称
spring:
application:
#这个一定要指定,否则nacos是注册不了服务的
name: order-service
cloud:
nacos:
#nacos地址
server-addr: http://192.168.225.129:8848
discovery:
#命名空间
namespace: 680950f7-ea04-4b08-9d3b-1afc152d7b6c
stock-service:
ribbon:
NFLoadBalancerRuleClassName : com.alibaba.cloud.nacos.ribbon.NacosRule
我这里只展示配置文件就不演示了,有兴趣额小伙伴可以自己试一下,另外Ribbon 还可以实现自定义的负载均衡策略,代码中实现IRule
接口 ,重写choose
方法即可