• SpringCloud Ribbon--负载均衡 原理及应用实例


    😀前言
    本篇博文是关于SpringCloud Ribbon的基本介绍,希望你能够喜欢

    🏠个人主页晨犀主页
    🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

    💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
    如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊

    SpringCloud Ribbon

    Ribbon 介绍

    Ribbon 是什么

    1. Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。
    2. Ribbon 主要功能是提供客户端负载均衡算法和服务调用
    3. Ribbon 客户端组件提供一系列完善的配置项如连接超时,重试等。
    4. Ribbon 会基于某种规则(如简单轮询,随机连接等)去连接指定服务
    5. 程序员很容易使用Ribbon 的负载均衡算法实现负载均衡
    6. 一句话: Ribbon: 负载均衡+RestTemplate 调用

    官网

    官网地址:https://github.com/Netflix/ribbon

    Ribbon 进入维护状态

    1. 官网地址: https://github.com/Netflix/ribbon

    image-20230827142737751

    1. Ribbon 目前进入维护模式, 未来替换方案是Spring Cloud LoadBalancer

    LB(Load Balance)

    LB 分类
    1.集中式LB

    即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是软件,如Nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方;LB(Load Balance 负载均衡)

    2.进程内LB

    将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些服务地址可用,然后再从这些地址中选择出一个合适的服务地址。
    Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。

    实例

    -前面member-consumer 轮询负载访问10000/10002 底层就是Ribbon 默认的轮询负载算法

    Ribbon 原理

    Ribbon 架构图&机制

    image-20230827142135956

    Ribbon 机制
    1. 先选择EurekaServer,它优先选择在同一个区域内负载较少的server
    2. 再根据用户指定的策略,在从server 取到的服务注册列表中选择一个地址
    3. Ribbon 提供了多种策略∶ 比如轮询、随机和根据响应时间加权。

    Ribbon 常见负载算法

    image-20230827142234048

    替换负载均衡算法-应用实例

    需求分析/图解

    1. 需求: 将默认的轮询算法改成随机算法RandomRule
    2. 浏览器输入: http://localhost/member/consumer/get/1
    3. 要求访问的10000/10002 端口的服务是随机的

    image-20230827142542177

    image-20230827142552806

    代码实现

    1. 创建member-service-consumer-80 com/my/springcloud/config/RibbonRule.java
    //配置自己的负载均衡算法
    @Configuration
    public class RibbonRule {
        @Bean
        public IRule myRibbonRule(){
        	return new RandomRule();//随机负载均衡算法
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.修改member-service-consumer-80 com/my/springcloud/MemberConsumerApplication.java

    @EnableEurekaClient
    @SpringBootApplication
    @EnableDiscoveryClient //启用服务发现
    //使用指定的Ribbon 负载均衡算法规则
    @RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL", configuration = RibbonRule.class)
    public class MemberConsumerApplication {
        public static void main(String[] args) {
        	SpringApplication.run(MemberConsumerApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    测试

    1. 浏览器输入: http://localhost/member/consumer/get/1
    2. 观察访问的10000/10002 端口的服务是随机的

    image-20230827142944021

    文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
    希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
    如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

  • 相关阅读:
    LeetCode118.杨辉三角 | LeetCode119.杨辉三角Ⅱ
    【Redis 神秘大陆】005 常见性能优化方式
    湖北银行冲刺上市:不良率高于行业均值,有公司欠5亿元未能追回
    没有知网资源如何快速下载知网论文
    自适应迭代扩展卡尔曼滤波算法AIEKF估计SOC VS 扩展卡尔曼估计SOC
    torch.optim.Adam
    基于springboot+mybatisplus+shiro的仓库管理系统源码
    四大常见的排序算法JAVA
    Live800:教育行业新拐点,在线客服系统如何提供价值?
    python 存储变量的几种方法
  • 原文地址:https://blog.csdn.net/m0_73557631/article/details/132948238