Ribbon负载均衡有一个核心的接口IRule
public interface IRule {
//一个选择
Server choose(Object var1);
//设置负载均衡的策略
void setLoadBalancer(ILoadBalancer var1);
//get
ILoadBalancer getLoadBalancer();
}
这个接口有非常多的实现类,其实每一个实现类,都是一种Ribbon的负载均衡策略
AbstractLoadBalancerRule
这是一个抽象类,它的目的主要是辅助负载均衡策略选取合适的服务端实例。
AvailabilityFilteringRule
它会先过滤掉跳闸或者访问故障的的服务 ,再选择并发较小的实例
RandomRule
随机策略 就随机选择 访问服务
RetryRule
重试测试,会先按照轮询获取服务,如果服务获取失败则会在指定的时间内进行重试,直到请求到可用的服务为止。
RoundRobinRule
轮询策略
WeightedResponseTimeRule
权重策略, 每30秒计算一次服务器响应时间,以响应时间作为权重,响应时间越短的服务器被选中的概率越大。这里的权重和我们上面Nacos管理平台上面设置的权重是两个不同的值,不是说使用了这种负载策略就会用上我们之前在Nacos设置的权重值,这里的权重值是根据服务器响应时间来确定的。如果想使用nacos设置的权重就需要使用NacosRule
负载均衡策略。
BestAvailableRule
过滤掉失效的服务实例,然后找出并发请求最小的服务实例来使用
ZoneAvoidanceRule
默认规则,它是基于服务所在区域 和 服务的可用性来选择,如果我们没有区域的概念就会继续采用轮询的方式来进行