介绍

:::tips Ribbon是Netflix发布的负载均衡器,有助于控制HTTP客户端行为,为Ribbon配置服务提供者地址列表后,Ribbon就可基于负载均衡算法,自动帮服务消费者发起请求

Nacos默认支持负责均衡,Nacos内置了Ribbon :::

配置负载均衡策略

介绍

:::tips IRule是一个用来定义负载均衡的接口,SpringCloud为我们提供了7种负载均衡算法:

  • RoundRobinRule:轮询
  • RandomRule:随机
  • AvailabilityFilteringRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问
  • WeightResponseTimeRule:根据平均响应时间就算所有服务的权重,响应时间越快服务权重越大被选中 的概率越高.刚启动时如果统计信息不足,则使用RoudRobinRule策略,等统计信息足够,会切换到WeightedResponseTimeRule
  • RetryRule:先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务
  • BestAvailableRule:会过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
  • ZoneAvoidanceRule:区域权衡, 扩展了轮询策略,以区域可用的服务器为基础进行服务器的选择,使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等,而后再对Zone内的多个服务做轮询【默认】 :::

    配置

    方式一

    :::tips 在服务消费者中将IRule注册到Spring容器中 ::: ```java @Configuration public class WebConfig{

    //将IRule注册到Spring容器中 @Bean public IRule getRule() {

    1. //设置负载均衡策略,RandomRule是随机策略
    2. return new RandomRule();

    }

}

  1. <a name="D4YJX"></a>
  2. ##### 方式二
  3. :::tips
  4. 在服务消费者的配置文件中添加以下配置
  5. :::
  6. ```yaml
  7. 服务提供者的名称:
  8. ribbon:
  9. #配置负载均衡策略
  10. NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

同集群优先的负载均衡(集群配置)

:::tips 默认的ZoneAvoidanceRule不能实现根据同集群优先来实现负载均衡,因此Nacos中提供了一个NacosRule,可以优先从同集群中挑选实例,再采用随机负载均衡挑选实例 :::

:::tips 在服务消费者的配置文件中添加以下配置 :::

  1. 服务提供者的名称:
  2. ribbon:
  3. #配置负载均衡策略
  4. NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

开启饥饿加载(了解)

:::tips Ribbon默认是采用懒加载,第一次访问时才会去创建LoadBalanceClient,第一次请求的响应时间很长;而开启饥饿加载后则会在项目启动时创建LoadBalanceClient,降低第一次访问的耗时 :::

:::tips 在服务消费者的配置文件中添加以下配置 :::

  1. ribbon:
  2. eager-load:
  3. enabled: true
  4. clients: 服务提供者的名称