Springcloudalibaba 集成Ribbon 负载均衡器

什么是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,我们可以测试一下,对之前的代码进行一些改造,新建一个库存服务,修改一下端口号.

image.png

启动两个库存服务和订单服务,看下Nacos 中心.

image.png

image.png

现在本地调用一下订单服务,已经变成轮询访问库存服务了

image.png

image.png

如何修改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方法即可

猜你喜欢

转载自juejin.im/post/7123853135587573768