SpringCloud学习六(SpringCloud微服务之负载均衡Ribbon)

一、负载均衡概述

流程图 两种负载均衡:

  1. 进程内LB:偏软件, 将LB逻辑集成到消费方,消费方从服务注册中心指导哪些地址可用,再自己选择一个合适的服务器。

负载均衡应用:

    基于负载均衡的算法,从服务列表中选择指定的服务进行调用

二、服务客户端开启负载均衡

(1)、启动类中,RestTemplate的配置方法上添加@LoadBalanced注解:

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

(2)、修改consumeer-demo中的ConsumerController中的调用方式,不再手动获取ip和端口,而是直接通过服务名称调用:

@GetMapping("{id}")
public User queryById(@PathVariable("id") Long id){
          
   
    // 在RestTemplate的调用路径上直接使用带服务名称的路径
    String url = "http://user_service/user/" + id; // user_service 微服务名称
    User user = restTemplate.getForObject(url, User.class);
    return user;
}

三、请求链路分析

四、负载均衡实现原理

    @LoadBalanced注解,会给RestTemplate添加负载均衡拦截 RestTemplate 执行 http://user-service/user/1 拦截器触发 获取到host部分内容: user-service服务名称 根据user-service获取到服务列表 如: 9001 9002 根据配置的IRule负载均衡算法, 在列表中选择微服务,并调用执行

五、负载均衡算法

    轮询(默认):RoundRobinRule 随机: RandomRule 重试机制:RetryRule AvailabilityFilteringRule WeightedResponseTimeRule BestAvailableRule ZoneAvoidanceRule

修改负载均衡算法(application.yml文件中)

user_service:
  ribbon:
    # 格式:{服务名称}.ribbon.NFLoadBalancerRuleClassName
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

六、饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建负载均衡客户端。往往会出现超时。如果需要采用饥饿加载,即项目启动即创建,可以这样配置:

ribbon:
  eager-load:
    enabled: true
    clients: user-service    # 多个服务使用 "," 分割

七、源码流程

经验分享 程序员 微信小程序 职场和发展