• SpringCloud系列(二)Ribbon 负载均衡的原理及详细流程


    关于负载均衡这个概念在上一篇文章中有所提到,在消费者远程调用之前有一个重要的环节就是负载均衡,那么为什么要进行负载均衡呢?其原理及实现流程如何?
    其实 Ribbon 负载均衡可以认为是一种策略,也可以说是某种规则,当消费者发起请求时,就会被负载均衡拦截器给拦截到,然后获取到请求中的 id,再按照某种规则选择某个服务,继而修改请求 url,再次发起请求,这时候才获取到提供者的服务;
      本篇文章主要介绍负载均衡的原理及详细的实现流程,然后简单介绍一下什么是饥饿加载,从而彻底明白实现的过程!!!

    🔫 Ribbon 负载均衡原理及详细流程

    ☀️ 原理

      这里还是以源码的形式来看一下具体的实现流程,如下图所示:
    在这里插入图片描述
    总之,当消费者发起请求后,将会有一个拦截器进行拦截, 拦截到之后将将这个请求交给 RibbonLoadBalancerClient, 获取到 url 中的服务 id,如上面的 consumerservice,根据 DynamicServerListLoadBalancer 拉取到服务列表后开始进行负载均衡,基于 IRule 根据一种规则选择一条服务, 如轮循规则选中一个 8081 的服务, 将此 url 替代消费者发起的请求 url, 最后再发送到服务提供者, 请求到服务提供者的列表中的 8081 这个服务.

    ☀️☀️ 详细流程

    在这里插入图片描述

    🔫 🔫 Ribbon 负载均衡常用规则及实现方式

    ☀️ 常用规则

    在这里插入图片描述

    ☀️☀️ 实现方式

    • 方式一:在消费者(consumer - service)中的启动类(Application)类中定义 IRule:
      在这里插入图片描述
    • 方式二:在消费者(consumer - service)的 application.yml 文件中添加新的配置:
      在这里插入图片描述

    🔫 🔫 🔫 饥饿加载是怎么一回事

    Ribbon 默认的是采用懒加载,也就是说第一次访问的时候才会去创建 LoadBalancerClient,请求的时间也会比较长,而饥饿加载可以在项目启动的时创建,从而降低第一次访问的耗时,配置如下:
     在服务消费者(consumer - service)的 application.yml 文件中配置;
    在这里插入图片描述

  • 相关阅读:
    JShaman JavaScript混淆加密工具,中英版本区别
    视觉SLAM14讲笔记-第5讲-相机与图像
    Day36力扣打卡
    24 回文链表
    elasticsearch完整学习
    C++ 多态
    java 归档版本的下载入口
    【Python脚本进阶】1.2、python脚本基础知识(中)
    编写一个GStreamer插件
    机器学习--浅谈朴素贝叶斯
  • 原文地址:https://blog.csdn.net/Onion_521257/article/details/127965570