• 八、Ribbon负载均衡服务调用


    1、概述

    SpringCloud Ribbon 是 基于 Netflix Ribbon实现的一套客户端(服务消费侧)负载均衡工具

    Ribbon客户端组件提供一些列完善的配置项,如连接超时,重试等。简单的来说,就是在配置文件中列出Load Balance后面所有的机器,Ribbon会自动帮助你基于某种规则去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法

    2、Ribbon负载均衡演示

    1)架构说明:

    Ribbon 是一个软负载均衡的客户端组件

    clipboard

    Ribbon在工作时候分为两步:

    ① 选择EurekaServer , 它优先选择在同一个区域负载较少的Server

    ② 根据用户指定的策略,在server取到的服务注册列表中选择一个地址。其中Ribbon提供了很多策略:比如轮询,随机和

    根据响应时间加权

    2)pom文件

    spring-cloud-starter-netflix-eureka-client 中 集成了 ribbon

    clipboard

    3、Ribbon核心组件IRule

    1) IRule : 是一个接口

    其作用是:根据特定算法从服务列表中选取一个要访问的服务

    clipboard

    IRule的继承结构如下:

    clipboard

    IRule的主要实现类:

    clipboard

    2)如何替换Ribbon默认的轮询规则

    clipboard

    ①、自定义配置类MySelfRule

    将IRule的一个实现类添加到spring容器中

    @Configuration
    public class MySelfRule {
    
        @Bean
        public IRule myRule(){
            return new RandomRule();
        }
    }

    【注意】

    这个自定义配置类不能放在@ComponentScan所扫描的当前包及其子包下

    否则我们自定义的这个配置类会被所有的Ribbon客户端所共享,达不到特殊化定制的目的了

    clipboard

    ②、主配置类上添加:

    @RibbonClient(name="CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class)

    告诉服务消费者使用的ribbon规则

    clipboard

    4、Ribbon负载均衡算法

    1)RoundRobinRule(轮询算法)原理:

    clipboard

    2)源码

    int nextServerIndex = incrementAndGetModulo(serverCount);
    
    //cas自旋锁 => nextServerCyclicCounter: 第几次请求
    private int incrementAndGetModulo(int modulo) {
        for (;;) {
            int current = nextServerCyclicCounter.get();
            int next = (current + 1) % modulo;
            if (nextServerCyclicCounter.compareAndSet(current, next))
                return next;
        }
    }
  • 相关阅读:
    2020年全国安全生产月活动主题、挂图、招贴、标语、宣教用书等系列产品
    2020年安全生产月主题挂图指定宣教用品目录
    LNMP分离式部署步骤详解
    FTP文件传输服务
    DNS域名解析服务配置与测试
    DHCP服务搭建测试流程
    mysql数据库的操作
    mysql源码编译安装及其配置
    生产环境中ansible的安全处理
    http网页返回码详解
  • 原文地址:https://www.cnblogs.com/houchen/p/14832944.html
Copyright © 2020-2023  润新知