美文网首页
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