IRule是顶层接口。
内置负载均衡规则类:
RoundRobinRule 轮询。
AvailabilityFilteringRule 忽略:
(1)短路状态的服务器。默认3次连接失败时,服务器会被设置为“短路”状态,持续30秒,后续再连接失败,短路状态的持续时间就会几何级地增加。
(2)并发数过高的服务器。配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限。
WeightedResponseTimeRule 权重。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器(根据权重会有概率的不同)。
ZoneAvoidanceRule 以区域可用的服务器。使用Zone先分类,再轮询。
BestAvailableRule 忽略那些短路的服务器,并选择并发数较低的服务器。
RandomRule 随机选择一个可用的服务器。
RetryRule 重试机制的选择逻辑
修改负载规则,启动类加:
@Bean public IRule randomRule(){
return new RandomRule();
}
或是application.yml
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule# 负载均衡规则
饥饿加载
Ribbon默认是懒加载,请求时间很长。
配置开启饥饿加载:
ribbon:
eager-load:
enabled: true # 开启饥饿加载
clients: userservice # 指定对userservice这个服务饥饿加载