介绍
:::tips Ribbon是Netflix发布的负载均衡器,有助于控制HTTP客户端行为,为Ribbon配置服务提供者地址列表后,Ribbon就可基于负载均衡算法,自动帮服务消费者发起请求
Nacos默认支持负责均衡,Nacos内置了Ribbon :::
配置负载均衡策略
介绍
:::tips IRule是一个用来定义负载均衡的接口,SpringCloud为我们提供了7种负载均衡算法:
- RoundRobinRule:轮询
- RandomRule:随机
- AvailabilityFilteringRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问
- WeightResponseTimeRule:根据平均响应时间就算所有服务的权重,响应时间越快服务权重越大被选中 的概率越高.刚启动时如果统计信息不足,则使用RoudRobinRule策略,等统计信息足够,会切换到WeightedResponseTimeRule
- RetryRule:先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务
- BestAvailableRule:会过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
ZoneAvoidanceRule:区域权衡, 扩展了轮询策略,以区域可用的服务器为基础进行服务器的选择,使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等,而后再对Zone内的多个服务做轮询【默认】 :::
配置
方式一
:::tips 在服务消费者中将IRule注册到Spring容器中 ::: ```java @Configuration public class WebConfig{
//将IRule注册到Spring容器中 @Bean public IRule getRule() {
//设置负载均衡策略,RandomRule是随机策略
return new RandomRule();
}
}
<a name="D4YJX"></a>
##### 方式二
:::tips
在服务消费者的配置文件中添加以下配置
:::
```yaml
服务提供者的名称:
ribbon:
#配置负载均衡策略
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
同集群优先的负载均衡(集群配置)
:::tips 默认的ZoneAvoidanceRule不能实现根据同集群优先来实现负载均衡,因此Nacos中提供了一个NacosRule,可以优先从同集群中挑选实例,再采用随机负载均衡挑选实例 :::
:::tips 在服务消费者的配置文件中添加以下配置 :::
服务提供者的名称:
ribbon:
#配置负载均衡策略
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
开启饥饿加载(了解)
:::tips Ribbon默认是采用懒加载,第一次访问时才会去创建LoadBalanceClient,第一次请求的响应时间很长;而开启饥饿加载后则会在项目启动时创建LoadBalanceClient,降低第一次访问的耗时 :::
:::tips 在服务消费者的配置文件中添加以下配置 :::
ribbon:
eager-load:
enabled: true
clients: 服务提供者的名称