乐趣区

全栈之路微服务课程9Ribbon深入刨析

内置规则

  • RoundRobinRule:系统默认规则,也是用的较多的一种规则。通过简单的轮询服务列表来选择服务器,其他的规则在很多情况下仍然使用 RoundRobinRule。
  • AvailabilityFilteringRule:顾名思义,有效性过滤规则。该规则会忽略一下服务器:无法连接的服务器:在默认情况下,如果 3 次连接失败,该服务器将会被置为“短路”的状态,该状态将持续 30 秒,如果再次连接失败,“短路”状态的持 续 时 间 将 会 以 几 何 级 增 加。可 以 通 过 修 改 niws.loadbalancer<clientName>.connectionFailureCountThreshold 属性,来 配置连接失败的次数。
    高并发数过高的服务器:如果连接到该服务器的并发数过高,也会被这个规则忽略,可以通过修改 <clientName>.ribbon.ActiveConnectionsLimit 属性来设定最高并发数。
  • WeightedResponseTimeRule:为每个服务器赋予一个权重值,服务器的响应时间 越长,该权重值就是越少,这个规则会随机 选择服务器,这个权重值有可能会决定 服务器的选择。
  • ZoneAvoidanceRule:该规则以区域、可用服务器为基础,进行服务器选择。使用 Zone 对服务器进行分类,可以理解为机架或者机房。
  • BestAvailableRule:忽略“短路”的服务器,并选择并发数较低的服务器。
  • RandomRule:顾名思义,随机选择可用的服务器。
  • RetryRule:含有重试的选择逻辑,如果使用 RoundRobinRule 选择服务器无法连 接,那么将会重新选择服务器。

代码配置

/**
 * 该类为 Ribbon 的配置类
 * 注意:该类不能放在主应用程序上下文 @ComponentScan 所扫描的包中,否则配置将会被所有 Ribbon Client 共享。*/
@Configuration
public class RibbonConfiguration {
  @Bean
  public IRule ribbonRule() {
    // 负载均衡规则,改为随机
    return new RandomRule();}
}

属性配置(推荐)

属性配置的优先级高于代码配置。

shop-provider-user:
    ribbon:
      NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

饥饿加载

默认情况下 Ribbon 是懒加载的——首次请求 Ribbon 相关类才会初始化,这会导致首次请求过慢的问题,你可以配置饥饿加载,让 Ribbon 在应用启动时就初始化。

ribbon:
  eager-load:
    enabled: true
    # 多个用, 分隔
    clients: shop-provider-user
退出移动版