Ribbon负载均衡策略总结

本文介绍了八种负载均衡策略,包括RandomRule、RoundRobinRule等。这些策略各有特点,如RetryRule会在超时后返回null,而BestAvailableRule则会选择最空闲的服务实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.RandomRule:
获取所有服务实例列表,循环通过一个随机数作为索引返回服务实例,直到返回一个不为空的服务实例。

2.RoundRobinRule:
采用线性轮询机制循环依次选择每个服务实例,直到选择到一个不为空的服务实例或循环次数达到10次。

3.RetryRule:
采用RoundRobinRule的选择机制,进行反复尝试,当花费时间超过设置的阈值maxRetryMills时,就返回null。

4.WeightedResponseTimeRule:
是RoundRobinRule的子类,对其进行了扩展,通过启动一个定时任务来为每个服务实例计算权重,然后遍历权重列表选择服务实例。

5.ClientConfigEnabledRoundRobinRule:
其内部实现了一个RoundRobinRule策略,我们可以继承它,在子类中做一些高级策略,当这些高级策略无法实施,可以用其默认实现的RoundRobinRule策略作为备选。

6.BestAvailableRule:
ClientConfigEnabledRoundRobinRule的子类,注入了负载均衡器的统计对象LoadBalancerStats,并利用它保存的实例统计信息来选择满足要求的实例。它会过滤掉故障的实例,并找出并发请求书最小的一个最空闲的实例。当LoadBalancerStats为空时无法执行,会利用ClientConfigEnabledRoundRobinRule的特性,采用默认实现的RoundRobinRule策略。

7.PredicateBasedRule:
ClientConfigEnabledRoundRobinRule的子类,基于Predicate实现的策略。通AbstractServerPredicate的chooseRoundRobinAfterFiltering方法进行过滤,获取备选的服务实例清单,然后用线性轮询选择一个实例,是一个抽象类,过滤策略在AbstractServerPredicate的子类中具体实现。

8.AvailabilityFilteringRule:
PredicateBasedRule的子类,原理与PredicateBasedRule相同,过滤规则:实例是否故障,即断路器是否生效,已将实例断开;实例的并发请求数是否大于阈值。只要有一个满足,就将这个实例过滤掉。其与父类的差别是:先以线性的方式选择一个实例,然后用过滤规则过滤,如果没被过滤掉则直接使用该实例,否则选取下一个实例继续进行过滤。如果重复十次还未选择到实例则采取父类的策略。

9.ZoneAvoidanceRule:
PredicateBasedRule的子类,原理与PredicateBasedRule相同,过滤规则:以ZoneAvoidancePredicate为主条件,AvailabilityFilteringPredicate为次条件组合进行过滤。使用主过滤条件过滤所有实例并返回清单,依次使用次过滤条件对清单进行过滤,每次过滤后判断两个条件,两个都符合就不再过滤:过滤后的实例总数 >= 最小过滤实例数(默认为1);过滤后的实例比例 > 最小过滤百分比(默认为0)。

以上各策略的结构如下图所示:

在这里插入图片描述

其中IRule为负载均衡策略的总接口,声明了choose、setLoadBalancer、getLoadBalancer。AbstractLoadBalancerRule继承IRule,为负载均衡策略的抽象类,定义了ILoadBalancer负载均衡器,实现了IRule接口中的setLoadBalancer和getLoadBalancer方法,即ILoadBalancer的get,set方法,上边9种负载均衡策略都是其子类,在其基础上进行扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值