系统定制开发负载均衡策略
Ribbon系统定制开发的策略是由 IRule 接口定义, 系统定制开发该接口由如下实现:
在jar包:com.netflix.ribbon#ribbon-loadbalancer
中;
要使用ribbon系统定制开发实现负载均衡,在Spring 的配置类里面把对应的负载均衡接口实现类作为一个Bean配置一下就行了,即像下面这样:
/** * 更改负载均衡策略,默认是ZoneAvoidanceRule策略 * * @return */ @Bean public IRule iRule(){ return new NacosRule(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
负载均衡的入口:ILoadBalancer
接口;
@Beanpublic IRule iRule(){ return new RoundRobinRule();}
- 1
- 2
- 3
- 4
负载均衡实现 | 策略 |
---|---|
RandomRule | 随机 |
RoundRobinRule | 轮询 |
AvailabilityFilteringRule | 先过滤掉由于多次访问故障的服务,以及并发连接数超过阈值的服务,然后对剩下的服务按照轮询策略进行访问 |
WeightedResponseTimeRule | 根据平均响应时间计算所有服务的权重,响 应时间越快服务权重就越大被选中的概率即 越高,如果服务刚启动时统计信息不足,则 使用RoundRobinRule策略,待统计信息足够会切换到该WeightedResponseTimeRule策略 |
RetryRule | 先按照RoundRobinRule策略分发,如果分发到的服务不能访问,则在指定时间内进行重试,然后分发其他可用的服务 |
BestAvailableRule | 先过滤掉由于多次访问故障的服务,然后选择一个并发量最小的服务 |
ZoneAvoidanceRule (默认) | 综合判断服务节点所在区域的性能和服务节点的可用性,来决定选择哪个服务 |
如果我们没有指定负载均衡策略,ribbon默认的负载均衡是ZoneAvoidanceRule,自定义负载均衡策略:
public class MyNacosRule extends AbstractLoadBalancerRule { @Override public void initWithNiwsConfig(IClientConfig clientConfig) {//基本上不需要实现} @Override public Server choose(Object key) {//实现该方法}}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
配置文件配置负载均衡策略:(可以直接配置配置文件实现负载均衡)
远程服务名称.ribbon.NFLoadBalancerRuleClassName=com.bjpowernode.ribbon.MyNacosRule
- 1