Ribbon负载均衡策略
通过上一节解析Ribbon原理我们知道,在BaseLoadBalancer中通过IRule接口定义了很多的负载均衡策略,所以我们可以通过查看IRule的接口类实现关系来看一下Ribbon有哪些负载均衡策略,如图所示。
IRule接口的直接子类是AbstractLoadBalancerRule,但是它是一个抽象类,它只定义了一个ILoadBalancer负载均衡对象,通过它可以从负载均衡器中获取信息并维护,将其作为分配的依据,并以此设计一些算法来实现针对特定场景的高效策略。
图中各个具体的实现类表示不同的负载均衡策略,我们来介绍几个常用的策略。
RoundRobinRule:Ribbon默认的负载均衡策略,该策略实现了按照线性轮询的方式选择每个服务实例的功能。
RandomRule:该策略是通过线程安全获取一个不超过服务列表数量的整型随机数,然后从服务列表中随机获取一个服务实例。
RetryRule:该策略实现了一个具备重试机制的实例选择功能。该策略下,如果轮询获取某一个服务在一个配置时间段内不成功,则一直尝试使用subRule对象的choose方法选择服务功能来选择一个可用的服务。
WeightedResponseTimeRule:RoundRobinRule策略的拓展,它实现了根据权重(Weight)选择服务的功能,根据平均响应时间分配一个权重,响应时间越长,权重越小,被选中的概率越低,响应时间越短,权重越大,被选中的概率越高。
BestAvailableRule:该策略下会根据服务状态来判断处于断路跳闸状态的服务,然后选择一个连接数小的服务。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)