Spring Cloud_Ribbon

2021-06-09  本文已影响0人  山巅自相见

ribbon是什么?

ribbon能干嘛?

使用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的可用性选择服务器
上一篇下一篇

猜你喜欢

热点阅读