一、学习目标

image.png

二、什么是Ribbon

Ribbon 是一个基于HTTP和TCP的客户端负载均衡工具,它是基于Netflix Ribbon实现的。它不像Spring Cloud服务注册中心、配置中心、API网关等需要独立部署,几乎存在于每个Spring Cloud微服务中。包括Feign提供的声明式服务调用也是基于该Ribbon实现的。
Ribbon负载均衡算法: 轮询、随机

三、Ribbon解决了什么问题

Ribbon提供了一套微服务的负载均衡的解决方案

四、负载均衡不同的不同实现方案

主流的负载均衡方案

  • 集中式负载均衡(服务器负载均衡),在服务消费者和服务提供着之间使用独立的负载均衡设施(硬件:F5 ,软件nginx等),由该设施负责吧访问请求通过某种策略转发至服务提供者
  • 进程式负载均衡(客户端负载均衡),把负载均衡逻辑集成到consumer,consumer从服务注册中心获知有哪些地址可用,然后再从这些地址中选择出一个合适的provider。Ribbon属于后者,它只是一个类库,集成于consumer进程,consumer通过它来获取provider的地址

    1、集中式负载均衡

    image.png

    2、进程式负载均衡

    image.png

五、Ribbon负载均衡策略

1、轮询策略

策略对应类名: RoundRobinRule
实现原理: 轮询策略表示每次都顺序取下一个服务生产者。比如5个生产者,第1次取第1个,第2次取第2个,第3次第3个

2、权重轮询策略

策略对应类名: WeightResponseTimeRule
实现原理

  • 根据每个生产者的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性越低
  • 一开始为轮询策略,并开启一个计时器,每30秒收集一次每个生产者的平均响应时间,给每个生产者赋上权重,并按照权重随机选择provider,高权重的provider会被高概率选中

    3、随机策略

    策略对应类名: RandomRule
    实现原理: 生产者列表随机选择一个

    4、最少并发数策略

    策略对应类名: BestAvaiableRule
    实现原理: 选择正在请求中并发数最小的生产者,出发这个生产者在熔断中

    5、重试策略

    策略对应类名: RetryRule
    实现原理: 其实就是轮询策略的增强版,轮询策略服务不可用时不做处理,重试策略服务不可用是会重新尝试集群中的其它运行节点

    6、可用性敏感策略

    策略对应类名: AvailabilityFilterinngRule
    实现原理: 过滤性能差的provider

  • 第一种: 过滤掉在Eureka中一直处于连接失败的provider

  • 第二种:过滤掉高并发(繁忙)的provider

    7、区域敏感性策略

    策略对应类名: ZoneAoidanceRule
    实现原理:

  • 以一个区域为单位考察可用性,对于不可用的区域整个丢弃,从剩下区域中选可用的生产者

  • 如果这个ip区域内有一个或多个实例不可达或者响应变慢,都会降低该ip区域内其他ip被选中的权重