• SpringCloud -Ribbon


    SpringCloud -Ribbon

    1.Ribbon 介绍

    1.Ribbon 是什么

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

    2.Ribbon 进入维护状态

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

    image-20220907213726168

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

    3.LB(Load Balance)

    1.LB 分类

    1.集中式 LB

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

    (2)LB(Load Balance 负载均衡)

    2.进程内 LB

    (1)将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些服务地址可用,然后再从这些地址中选择出一个合适的服务地址。

    (2)Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址

    比如:member-consumer-消费者轮询负载访问 10000/10002 provider-服务方底层就是 Ribbon 默认的轮询负载算法

    2.Ribbon 原理

    1.Ribbon 架构图&机制

    image-20220907214051979

    Ribbon机制

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

    2.Ribbon 常见负载算法

    image-20220907214149657

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

    1.需求分析/图解
    1. 需求: 将默认的轮询算法改成随机算法 RandomRule
    2. 浏览器输入 : http://localhost/member/consumer/get/1
    3. 要求访问的 10000/10002 端口的服务是随机的
    2.核心代码实现
    @Configuration
    public class CustomizationBean {
    
        // 配置注入RestTemplate bean/对象
        //这里的@LoadBalanced 就是赋予 RestTemplate 负载均衡的能力
        //默认是使用轮询算法来访问远程调用接口/地址
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate() {
            return new RestTemplate();
        }
    
        @Bean
        public IRule iRule(){
            //根据业务选择负载均衡算法选择不通的实现即可
            return new RandomRule();
            //return new WeightedResponseTimeRule();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    @EnableEurekaClient
    @SpringBootApplication
    //启用服务发现,如果不启用discoveryClient无法发现服务
    @EnableDiscoveryClient
    //指定Ribbon的负载均衡算法; name:指定ribbon客户端的名称(自定义),configuration:指定负载均算法的配置类
    @RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = CustomizationBean.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
    • 11
    3.测试

    image-20220907224128156

    image-20220907224233631

  • 相关阅读:
    java-常用正则操作
    NURBS曲线-节点插入(原理+代码)
    MySQL迁移到达梦数据库实战(使用达梦的DTS迁移工具)
    JAVA毕业设计交通非现场执法系统计算机源码+lw文档+系统+调试部署+数据库
    VR技术的应用与发展_华锐互动
    alist windows桌面版下载安装
    JEE(面试题一)
    《 Python List 列表全实例详解系列(九)》__列表反转(6种方法)
    FOC学习笔记-坐标变换以及仿真验证
    回溯算法4.1-4.4
  • 原文地址:https://blog.csdn.net/qq_44981526/article/details/126755549