• Spring Cloud:Ribbon基础知识


    一.简介

    Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。
    简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动帮助你基于某种规则去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。
    Ribbon在工作时分成两步:第一步选择EurekaServer,他优先选择在同一个区域内负载较少的server。第二步再根据用户指定的策略,再从server取到的服务注册列表中选择一个地址。

    二.Ribbon基本使用

    依赖
    在新版eureka-client依赖中,已经默认导入了Ribbon的相关依赖了。

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    


    我们如果想要使用Ribbon,只需要在RestTemplate的配置类中加上@LoadBalanced注解即可。(默认使用的是轮询算法)然后进行服务调用,Ribbon就开始工作了。

    @Configuration
    public class ApplicationContextConfig {
    
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    

    三.Ribbon的负载规则

    Ribbon默认自带一下负载规则:

    • RoundRobinRule:轮询
    • RandomRule:随机
    • RetryRule:先按照RoundRobinRule的策略获取服务,如果获取服务失败则会在指定时间进行重试,获取可用的服务。
    • WeightedResponseTimeRule:对RoundRobinRule的扩展,相应速度越快的实列选择权重越大,越容易被选择。
    • BestAvailableRule:会优先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务。
    • AvailablityFilterRule:会过滤掉故障实例,再选择并发较小的实例。
    • ZoneAvoidanceRule:默认规则,符合判断server所在区域的性能和server的可用性选择服务器。

    四.替换Ribbon的负载规则

    Spring Cloud Eureka官方文档:

    翻译过来就是:CustomConfiguration类必须是@Configuration类,但是要注意它不在主应用程序上下文的@ComponentScan中。否则,它将被所有的@RibbonClients共享。如果使用@ComponentScan(或@SpringBootApplication),则需要采取步骤避免包含它(例如,可以将其放在一个单独的、不重叠的包中,或者在@ComponentScan中指定要显式扫描的包)。
    定义一个配置类:

    @Configuration
    public class MyRuleConfig {
    
        @Bean
        public IRule iRule(){
            return new RandomRule();//随机规则
        }
    
    }
    

    包结构如下:

    然后在主启动类上标明注解@RibbonClient:

    把刚才定义的规则扫描进去,这样Ribbon默认规则就被替换为随机规则了。

    五.Ribbon负载轮询算法原理

    rest接口第几次请求数 % 服务集群总量 = 实际调用服务器位置下标,每次服务重启后rest接口计数从1开始。

  • 相关阅读:
    Martin Fowler关于IOC和DI的文章(原版)
    父类引用指向子类对象详解
    求中位数总结
    二叉树的遍历方法
    MySQL知识小结
    栈和队列的基础算法学习(EPI)
    链表的基础题目学习(EPI)
    数组和字符串的基础题目学习(EPI)
    基本类型算法题目学习(EPI)
    被C语言操作符优先级坑了
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/13617929.html
Copyright © 2020-2023  润新知