美文网首页
Spring Cloud_Ribbon

Spring Cloud_Ribbon

作者: 山巅自相见 | 来源:发表于2021-06-09 09:47 被阅读0次

    ribbon是什么?

    • spring cloud ribbon是基于NetflixRibbon实现的一套客户端负载均衡的工具
    • 简单地说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon的客户端组件提供一系列完整的配置项,如:连接超时、重试等等。简单地说,就是在配置文件中列出LoadBalancer(简称LB:负载均衡)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法!

    ribbon能干嘛?

    • LB,即负载均衡,在微服务或分布式集群中经常用的一种应用。
    • 负载均衡简单地说就是将用户的请求平摊的分配到多个服务器上,从而达到系统的HA(高可用)。
    • 常见的负载均衡软件有Nginx、Lvs等等
    • dubbo、SpringCloud中均给我们提供了负载均衡,Spring Cloud的负载均衡算法可以自定义
    • 负载均衡简单分类:
      • 集中式LB
        • 即在服务的消费方和提供方之间使用独立的LB设施,如Nginx:反向代理服务器,由该设施负责把访问请求通过某种策略转发至服务的提供方!
      • 进程式LB
        • 将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选出一个合适的服务器
        • Ribbon就属于进程内LB,他只是一个类库,集成与消费方进程,消费方通过它来获取到服务提供方的地址!
          衔接上文

    使用Ribbon实现负载均衡

    继续创建两个数据库:db02、db03,并创建表和填入数据。创建两个提供者服务:8002、8003。服务里的配置或其他代码和8001配置一样。
    开启服务后,访问其中一个发现


    图片.png

    多了两个服务,三个服务全部都在上面展示。
    启动消费者服务并访问



    刷新一下

    刷新一下

    每刷新一下就换一个提供者,这就展示了负载均衡的简单轮询

    自定义负载均衡算法

    Ribbon核心组件IRule,会根据特定的算法中从服务列表中选取一个要访问的服务,SpringBoot自带七种算法:

    1. RoundRobinRule
      轮询,依次执行(默认)
    2. RandomRule
      1.1 随机执行
      在消费者的配置类中加入新的Bean覆盖默认轮询
    @Configuration // spring applicationContext.xml
    public class ConfigBean {
      // 配置负载均衡实现RestTemplate
      @Bean
      @LoadBalanced // Ribbon
      public RestTemplate getRestTemplate() {
        return new RestTemplate();
      }
    
      /* IRule
      * RoundRobinRule 轮询
      * RandomRule 随机
      * AvailabilityFilteringRule 会先过滤掉跳闸、访问故障的服务,对剩下的服务进行轮询
      * RetryRule 会先按照轮询获取服务,如果服务获取失败,则会在指定的时间内进行重试*/
      @Bean
      public IRule myIRule() {
        return new RandomRule();
      }
    }
    

    1.2 测试:
    依次启动:Eureka注册中心(7001、7001、7001)-三个或以上提供者服务(8001、8002、8003)-消费者服务(80)
    访问:http://localhost/consumer/dept/list
    每次刷新都是随机的提供者提供的数据

    1. AvailabilityFilteringRule
      3.1 会先过滤掉多次访问故障而处于断路器跳闸状态的服务
      3.2 和过滤并发的连接数量超过阈值的服务,然后对剩余的服务列表安装轮询策略进行访问
    2. WeightedResponseTimeRule
      4.1 根据平均响应时间计算所有的服务权重,响应时间越快服务权重越大,容易被选中的概率就越高
      4.2 刚启动时,如果统计信息不中,则使用RoundRobinRule(轮询)策略,等统计的信息足够了会自动切换到WeightedResponseTimeRule
    3. RetryRule
      5.1 先按照RoundRobinRule(轮询)的策略获取服务,如果获取的服务失败,则在指定的时间会进行重试,进行获取可用的服务
      5.2 如多次获取某个服务失败,这不会再再次获取该服务(如:高德地图上某条道路堵车,司机不会走那条道路)
    4. BestAvailableRule
      会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
    5. ZoneAvoidanceRule
      默认规则,复合判断Server所在区域的性能和Server的可用性选择服务器

    相关文章

      网友评论

          本文标题:Spring Cloud_Ribbon

          本文链接:https://www.haomeiwen.com/subject/vhzdeltx.html