SpringCloud-Ribbon负载均衡

159 阅读2分钟

一、Ribbon负载均衡流程

1691415454442.jpg

  1. 服务消费者向服务提供者发起请求。
  2. Ribbon服务向Nacos注册中心拉取服务提供者列表。
  3. Ribbon获取到服务列表后,使用负载均衡策略将请求打到一个具体的服务实例上。

二、Ribbon负载均衡策略

  • RoundRobinRule: 简单轮询服务列表来选择服务器。
  • WeightedResponseTimeRule: 按照权重来选择服务器,响应时间越长,权重越小。
  • RandomRule:随机选择一个可用的服务器。
  • BestAvailableRule:忽略那些短路的服务器,并选择并发数较低的服务器。
  • RetryRule:重试机制的选择逻辑。按照轮询的方式选择服务,如果某个服务宕机了会根据指定的时间进行不断重试。
  • AvailabilityFilteringRule:可用性敏感策略,先过滤非健康的,再选择连接数较少的实例。
  • ZoneAvoidanceRule:以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房,机架等。而后再对Zone内的多个服务做轮询。

三、自定义负载均衡策略

可以自己创建类实现IRule接口,然后再通过配置类或者配置文件配置即可。通过定义IRule实现可以修改负载均衡规则。有两种方式:

  1. 全局生效策略。

    创建类实现IRule接口,可以指定负载均衡策略。

@Bean
public IRule randomRule(){
    return new RandomRule();
}
  1. 局部生效策略。

    在客户端的配置文件中,可以配置某一个服务调用的负载均衡策略。

    比如:在OrderService服务的配置文件中做如下配置,自定义调用userService的负载均衡策略。

userService:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  #负载均衡规则