Ribbon负载均衡策略

2022-06-10 21:13:34 浏览数 (1)

关于Ribbon的负载均衡策略。

Ribbon 的核心组件是 IRule,IRule 是所有负载均衡策略的父接口,其子类有:

每一个子类就是一种负载均衡策略

  • RandomRule:随机选取负载均衡策略,随机 Random 对象,在所有服务实例中随机找一个服务的索引号,然后从上线的服务中获取对应的服务。
  • RoundRobinRule:线性轮询负载均衡策略。
  • WeightedResponseTimeRule:响应时间作为选取权重的负载均衡策略,根据平均响应时间计算所有服务的权重,响应时间越短的服务权重越大,被选中的概率越高。刚启动时,如果统计信息不足,则使用线性轮询策略,等信息足够时,再切换到 WeightedResponseTimeRule。
  • RetryRule:使用线性轮询策略获取服务,如果获取失败则在指定时间内重试,重新获取可用服务。
  • ClientConfigEnabledRoundRobinRule:默认通过线性轮询策略选取服务。通过继承该类,并且对 choose 方法进行重写,可以实现更多的策略,继承后保底使用 RoundRobinRule 策略。
  • BestAvailableRule:继承自 ClientConfigEnabledRoundRobinRule。从所有没有断开的服务中,选取到目前为止请求数量最小的服务。
  • PredicateBasedRule:抽象类,提供一个 choose 方法的模板,通过调用 AbstractServerPredicate 实现类的过滤方法来过滤出目标的服务,再通过轮询方法选出一个服务。
  • AvailabilityFilteringRule:按可用性进行过滤服务的负载均衡策略,会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数超过阈值的服务,然后对剩余的服务列表进行线性轮询。
  • ZoneAvoidanceRule:本身没有重写 choose 方法,用的还是抽象父类 PredicateBasedRule的choose。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://cloud.tencent.com/developer/article/2020508

0 人点赞