一、Ribbon负载均衡流程
- 服务消费者向服务提供者发起请求。
- Ribbon服务向Nacos注册中心拉取服务提供者列表。
- Ribbon获取到服务列表后,使用
负载均衡策略将请求打到一个具体的服务实例上。
二、Ribbon负载均衡策略
- RoundRobinRule: 简单轮询服务列表来选择服务器。
- WeightedResponseTimeRule: 按照权重来选择服务器,响应时间越长,权重越小。
- RandomRule:随机选择一个可用的服务器。
- BestAvailableRule:忽略那些短路的服务器,并选择并发数较低的服务器。
- RetryRule:重试机制的选择逻辑。按照轮询的方式选择服务,如果某个服务宕机了会根据指定的时间进行不断重试。
- AvailabilityFilteringRule:可用性敏感策略,先过滤非健康的,再选择连接数较少的实例。
- ZoneAvoidanceRule:以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房,机架等。而后再对Zone内的多个服务做轮询。
三、自定义负载均衡策略
可以自己创建类实现IRule接口,然后再通过配置类或者配置文件配置即可。通过定义IRule实现可以修改负载均衡规则。有两种方式:
-
全局生效策略。
创建类实现IRule接口,可以指定负载均衡策略。
@Bean
public IRule randomRule(){
return new RandomRule();
}
-
局部生效策略。
在客户端的配置文件中,可以配置某一个服务调用的负载均衡策略。
比如:在OrderService服务的配置文件中做如下配置,自定义调用userService的负载均衡策略。
userService:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则