zoukankan      html  css  js  c++  java
  • 八、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;
        }
    }
  • 相关阅读:
    HDU 5334 Virtual Participation(2015多校第四场)
    HDU 1754 I Hate It(线段树+单点更新)
    HDU 5308 I Wanna Become A 24-Point Master(2015多校第二场)
    linux下socket调试
    linux驱动之hello_world源码与编译
    那些年优秀的HTML5活动页面
    近期Responsive web design项目经验分享-高分辨率图片处理篇
    近期Responsive web design项目经验分享
    var foo= {} ;foo.method() 和 单例模式有什么区别
    Web程序设计
  • 原文地址:https://www.cnblogs.com/houchen/p/14832944.html
Copyright © 2011-2022 走看看