首页技术文章正文

Ribbon负载均衡算法父接口IRule接口介绍

更新时间:2020-11-19 来源:黑马程序员 浏览量:

1577370495235_学IT就到黑马程序员.gif

默认情况下,Ribbon使用的负载均衡策略是轮询,实际上,Ribbon提供了很多负载均衡算法,其中IRule接口就是所有负载均衡算法的父接口,它的实现类结构如下图所示。

1605780364715_ribbon负责策略.jpg

IRule接口实现类结构

在下图中,AbstractLoadBalancerRule是负载均衡策略的抽象类,该抽象类中定义了负载均衡器ILoaderBalancer对象,该对象能够在具体实现选择服务策略时,获取到一些负载均衡器中维护的信息作为分配依据,并以此设计一些算法来实现针对特定场景的高效策略。

在上图中,各个实现类实现了一种负载均衡算法,关于这些实现类的具体介绍如下:

● RoundRobinRule:实现了按照线性轮询的方式依次选择服务的功能。

● WeightedResponseTimeRule: 它是对RoundRobinRule的扩展,会根据平均响应时间计算所有服务的权重,响应时间越快,服务权重越大,被选中的概率越高。

● ZoneAvoidanceRule:它是PredicateBasedRule的具体实现类,其内部通过使用ZoneAvoidancePredicate和AvailabilityPredicate判断是否选择某个服务,前者用于判断服务所在区域的性能是否可用,后者用于过滤掉连接数过多的服务。

● AvailabilityFilteringRule: 使用AvailabilityPredicate过滤由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数超过阀值的服务,然后对剩余的服务列表进行轮询。

● BestAvailableRule:用于先过滤掉多次访问故障而处于断路跳闸状态的服务,然后选择一个并发量最小的服务。

● RetryRule: 该策略实现了一个具备重试功能的服务选择功能,其内部会先按照轮询策略获取服务,如果获取失败则在指定时间内重试,获取可用服务。

● RandomRule:该策略实现了从服务清单中随机选择一个服务的功能。

● ClientConfigEnableRoundRobinRule:该类是一个抽象类,该类本身没有实现什么特殊的处理逻辑,我们也不会直接使用该策略,但是通过BestAvailableRule和继承该策略默认实现了线性轮询,它的内部定义了一个RoundRobinRule策略,

● PredicateBasedRule:继承了ClientConfigEnableRoundRobinRule,其内部会先通过chooseRoundRobinAfterFiltering()方法筛选服务清单,然后以线性轮询的方式从过滤后的服务清单中选择一个服务。


猜你喜欢:
JDK安装教程:Jdk怎么安装?

JDK环境变量配置win10视频教程

分布式锁是什么?有什么作用?

IO和NIO有什么区别?NIO有什么优点?

黑马Java高级软件工程师培训课程



分享到:
在线咨询 我要报名
和我们在线交谈!