Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具;主要功能是提供客户端的软件负载均衡算法和服务调用。 在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。

1. 负载均衡原理

image.png

2. 负载均衡策略

2.1 负载均衡规则

Ribbon 负载均衡规则是一个叫做 IRule 的接口来定义的,每一个子接口是一种规则:
image.png

  • RoundRobinRule:轮询
  • RandomRule:随机
  • RetryRule:先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务
  • WeightedResponseTimeRule:对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择
  • BestAvailableRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
  • AvailabilityFilteringRule:先过滤掉故障实例,再选择并发较小的实例
  • ZoneAvoidanceRule:默认规则,复合判断server所在区域的性能和server的可用性选择服务器

    2.2 配置规则

    通过定义 IRule 实现可以修改负载均衡规则,有两种方式:
  1. 代码方式:在 order-service 中的 OrderApplication 类中,定义一个新的 IRule: :::info @Bean
    public IRule randomRule() {
    return new RandomRule(); // 设置全局负载均衡规则
    } :::

  2. 配置文件方式:在 order-service 的 application.yml 文件中,添加新的配置也可以修改规则: :::info user-service:
    ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule :::

    2.3 饥饿加载

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

通过下面配置开启饥饿加载: :::info #配置负载均衡规则
_ribbon:
eager-load:
enable: true
# 开启饥饿加载(项目启动时就加载)
clients: # 指定饥饿加载的服务名称
_- user-service :::