概述
策略名 | 策略类型 | 策略规则 | 实现原理 | 适用场景 | 缺点 |
---|---|---|---|---|---|
RoundRobinRule | public class RoundRobinRule extends AbstractLoadBalancerRule | 从服务列表里面循环取 | 维护一个AtomicInteger变量,和服务器总数求余得到index,取服务器列表第index的值 | 集群中各个节点提供服务能力等同且无状态的场景。 | 不关心服务端负载,服务端处理能力的波动可能造成堵塞 |
WeightedResponseTimeRule | public class WeightedResponseTimeRule extends RoundRobinRule | 根据每个服务的响应时间设置权重,响应时间越长,所占权重越少。 | 维护一个volatile List<Double>类型的权重列表,里面保存了根据当前服务响应时间计算出的权重值,该列表默认每30秒刷新一次。采用轮询来获取服务。 | 允许各节点服务能力不相等并且允许波动。 | |
ZoneAvoidanceRule | public class ZoneAvoidanceRule extends PredicateBasedRule | 使用CompositePredicate根据区域和可用性过滤服务器的规则 | 通过Predicat链进行判断,最后在所用通过判断的服务器列表中采用轮询策略选择服务器 | 服务器分布范围很广,调用方分布范围也很广,可使调用方请求路由到最近的服务器集群 | |
RandomRule | public class RandomRule extends AbstractLoadBalancerRule | 随机选择,也就是说Ribbon会随机从服务器列表中选择一个进行访问 | 通过Random类,随机从可用服务器列表取一个 | 同RoundRobinRule | 同RoundRobinRule |
RetryRule | public class RetryRule extends AbstractLoadBalancerRule | 鉴于IRule可以级联,此RetryRule类允许向现有规则添加重试逻辑。 | 在指定时间(默认500ms)内不断的调用指定路由策略(默认值:RoundRobinRule)获取服务,直到获取成功。 | 具体适用场景同指定的路由策略,只是添加了重试功能 | |
BestAvailableRule | public class BestAvailableRule extends ClientConfigEnabledRoundRobinRule | 跳过具有“跳闸”断路器的服务器的规则,并选择具有最低并发请求的服务器。 此规则通常应与ServerListSubsetFilter一起使用,后者对规则可见的服务器设置限制。 这确保了它只需要在少量服务器中找到最小的并发请求。 此外,每个客户端将获得一个随机的服务器列表,避免了大量客户端选择一个具有最低并发请求的服务器并立即被淹没的问题。 | |||
LoadBalanceCompositeRule | |||||
AvailabilityFilteringRule | public class AvailabilityFilteringRule extends PredicateBasedRule | 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值) | 使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个server的运行状态 | ||
自定义:一致性hash策略 | 对关键值进行hash运算,每次计算的结果一致,再加上其他的条件,使某种请求路由到 同一个服务上。 | 服务存在大量本地缓存。例如根据token进行hash一致性运算,同一个token每次路由到同一个服务,这个服务可以做一些关于用户权限相关的本地缓存。 |
最后
以上就是称心乌冬面为你收集整理的ribbon负载均衡策略及适用场景的全部内容,希望文章能够帮你解决ribbon负载均衡策略及适用场景所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复