SpringCloud -- Ribbon负载均衡(负载均衡流程负载均衡原理(探究原码)负载均衡策略懒加载(饥饿加载))

Posted CodeJiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud -- Ribbon负载均衡(负载均衡流程负载均衡原理(探究原码)负载均衡策略懒加载(饥饿加载))相关的知识,希望对你有一定的参考价值。

1. Ribbon负载均衡流程


2. 负载均衡原理(探究原码)


2.1 原理探究

示例代码源于上节案例

那么这个拦截的动作是谁去完成的呢?

由LoadBalancerInterceptor类完成。

它实现了ClientHttpRequestInterceptor接口,该接口的功能就是拦截客户端 HTTP 请求。而RestTemplate就是一个发Http请求的客户端,所以RestTemplate发起的请求自然而然的就被拦截了。


我们回到他的实现类LoadBalancerInterceptor,并在该方法打一个断点,然后debug运行服务端。

这时候我们发起一个请求,就发现进入了debug里面(这就证明这个请求确实被拦截了)。






我们继续跟进这个方法:

我们可以看见负载均衡器loadBalancer已经拿到了服务列表:

那么接下来就是返回服务列表了。

我们跟进getServer方法看它内部是怎么实现的,我们发现里面有一个选择服务来进行负载均衡的接口IRule,有许多类实现了这个接口,也就是说定义了许多选择服务的规则:



拿到了以后接下来就可以向拿到的服务去发送请求等等…


2.2 小结


3. 负载均衡策略


3.1 介绍负载均衡策略

这里主要介绍IRule接口的实现类里面定义的选择服务的规则(做负载均衡)。


3.2 修改负载均衡策略


3.2.1 代码方式(全局 优先级高于配置文件方式

    @Bean
    /*
     * 把全局设置为随机的负载均衡策略
     */
    public IRule randomRule() 
        return new RandomRule();
    

3.2.2 配置文件方式(某个微服务)

# 这个是微服务的id
user-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 随机策略

4 .懒加载(饥饿加载)


4.1 现象复现


4.2 开启懒加载

# 配置懒加载
ribbon:
  eager-load:
    enabled: true # 开启懒加载
    clients: user-service # 指定饥饿加载的服务名称

提示:yaml语法指定多个服务可以这样写

# 配置懒加载
ribbon:
  eager-load:
    enabled: true # 开启懒加载
    clients: 
      - user-service
      - order-service
      - ......

5. 小结


代码配置负载均衡策略的优先级高于配置文件方式,博主已踩坑!!!



以上是关于SpringCloud -- Ribbon负载均衡(负载均衡流程负载均衡原理(探究原码)负载均衡策略懒加载(饥饿加载))的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud微服务负载均衡器Ribbon

springcloud之Ribbon负载均衡

springcloud-Ribbon-负载均衡组件

springcloud之负载均衡

SpringCloud负载均衡-Ribbon

springCloud:Ribbon实现客户端侧负载均衡-消费者整合Ribbon