SpringCloud Ribbon 负载均衡


 

Eureka Client内置了Ribbon,用于实现服务节点列表的负载均衡。
 

SpringCloud的服务调用流程

eg. user-service的某个节点要调用order-service

1、向内置的Ribbon发起调用order-service的负载均衡请求

2、Ribbon查询缓存中有没有order-service的节点列表,有就直接使用,没有就从Eureka Server获取

3、Ribbon使用指定的负载均衡算法从节点列表中返回一个节点

4、user-service向返回的order-service节点发起调用

 

Ribbon内置的负载均衡策略(7种)

1、RoundRobinRule  轮询(默认策略)
轮询适合节点性能都差不多的情况。从前往后依次轮询节点列表中的每个节点,谁空闲就调用谁。
 

2、RetryRule  重试
先轮询,如果未获取到节点,则在指定的时间内(默认500ms)重试。
 

3、RandomRule  随机

4、BestAvailableRule  最可用,选择负载最小的节点

5、AvailabilityFilteringRule  可用过滤
先过滤掉处于断路状态(断路器打开)、负载很大的节点,再使用轮询。

6、ZoneAvoidanceRule  根据大区性能、节点可用性综合筛选

7、WeightedResponseTimeRule  权重响应时间
根据节点的平均响应时间计算权重,响应快的权重大,被选中的机率就越大。

 

设置Ribbon的负载均衡策略

eureka client的依赖中已经包含了ribbon的依赖,不用额外添加依赖。

负载均衡策略是在消费者中设置的,有2种方式
 

方式一、在application.yml中设置

#设置调用order-service的负载均衡策略
order-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

只对指定的服务调用有效

 

方式二、在引导类中设置

@SpringBootApplication
@EnableEurekaClient
public class UserServiceApplication {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    //设置负载均衡策略
    @Bean
    public RandomRule getRule(){
        return  new RandomRule();
    }
    
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }

}

对调用的所有服务都有效
 

也可以使用自定义的负载均衡策略。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章