目录
1. 负载均衡策略
1.随机策略
轮询是 Ribbon 默认的负载均衡策略,即按照服务列表的顺序依次进行轮询。每个服务实例被轮流使用,直到服务实例出现故障或者返回错误响应。下次请求时将自动排除故障实例,继续轮询其他实例。
配置:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
2.随机策略
随机是另一种比较常见的负载均衡策略,即从服务列表中随机选择一个服务实例进行处理。随机算法可以防止某个服务实例出现负载过高的情况。
配置:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
3.最少连接数策略
最少连接数是一种根据服务实例当前的连接数来选择最空闲实例的负载均衡策略。在服务实例的连接数相对均衡的情况下,可以保证选择最快速的服务实例。
配置:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule
4.权重策略
权重策略根据每个服务提供者的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性也就越低。它的实现原理是,刚开始使用轮询策略并开启一个计时器,每一段时间收集一次所有服务提供者的平均响应时间,然后再给每个服务提供者附上一个权重,权重越高被选中的概率也越大。
配置:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
5.重试策略
RetryRule,按照轮询策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进行重试来获取服务,如果超过指定时间依然没获取到服务实例则返回 null。
配置:
ribbon:
ConnectTimeout: 2000 # 请求连接的超时时间
ReadTimeout: 5000 # 请求处理的超时时间
springcloud-nacos-provider: # nacos 中的服务 id
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #设置负载均衡
6.可用性敏感策略
可用敏感性策略:AvailabilityFilteringRule,先过滤掉非健康的服务实例,然后再选择连接数较小的服务实例。
配置:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule
7.区域敏感策略
区域敏感策略:ZoneAvoidanceRule,根据服务所在区域(zone)的性能和服务的可用性来选择服务实例,在没有区域的环境下,该策略和轮询策略类似。
配置:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule
2.IPing机制
IPing是一个主动探测服务节点存活的机制,通过判断服务节点的当前状态,设置节点的可用状态。只有当节点为可用时候才会作为负载均衡器的选取节点。
IPing有以下几种模式:
DummyPing:默认返回true,即认为所有节点都可用,这也是单独使用Ribbon时的默认模式
NIWSDiscoveryPing:借助Eureka服务发现机制获取节点状态。节点状态是UP,则认为是可用状态
PingUrl:主动向服务节点发起一次http调用,对方有响应则认为节点是可用状态
NoOpPing:返回true
PingConstant:返回设置的常量值
3. 自定义IRule
public class MyRule extends AbstractLoadBalancerRule implements IRule
重写
@Override public Server choose(Object key)
参考: