Spring Cloud Ribbon 是一个客户端负载均衡工具,用于提供客户端的软件负载均衡算法和服务调用

  • SpringCloud教程合集: https://www.cnblogs.com/spzmmd/tag/微服务教程/
  • 案例项目地址: https://gitee.com/spzmmd/spring-cloud-demo

概念

目前Ribbon项目是维护模式

集中式LB(负载均衡)

在服务提供者和消费者之间独立出一个负载均衡设施(硬件、nginx等),由该设施负责通过策略来转发请求

进程式LB(负载均衡)

将负载均衡逻辑集成于服务消费者,消费者从注册中心里获取哪些地址可以用,然后自己根据策略来选择合适服务

Ribbon本地负载均衡客户端和Nginx服务端负载均衡的区别

  • Nginx是服务器负载均衡(集中式LB),所有请求交给Nginx转发,负载均衡由服务端实现
  • Ribbon是本地负载均衡(进程式LB),客户端会从注册中心获取服务注册列表缓存到JVM本地,而后在本地实现RPC远程调用

集成

如果注册中心使用Eureka,服务消费者使用Eureka 客户端,则不需要加入Ribbon依赖,因为下方的依赖里包含了

org.springframework.cloudspring-cloud-starter-netflix-eureka-client

其他情况下需要加入Ribbon依赖:

org.springframework.cloudspring-cloud-starter-netflix-ribbon2.2.5.RELEASE

前文基于Eureka的服务注册发现案例模块里,使用了支持Ribbon负载均衡的的RestTemplate工具(只需要在RestTemplate的Bean声明里加入注解@LoadBalanced即可),所以这里不再赘述Ribbon集成方法。

Ribbon负载均衡算法(了解)

Ribbon的负载均衡实现均继承自接口IRule,常见实现算法如下:

  • RoundRobinRule: 默认轮询的方式
  • RandomRule: 随机方式
  • WeightedResponseTimeRule: 根据响应时间来分配权重的方式,响应的越快,分配的值越大。
  • BestAvailableRule: 选择并发量最小的方式
  • RetryRule: 在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server
  • ZoneAvoidanceRule: 复合判断server所在区域的性能和server的可用性选择服务器
  • AvailabilityFilteringRule: 先过滤掉故障实例,再选择并发较小的实例

Ribbon自定义负载均衡算法

  • 轮询算法公式
    调用服务器位置下标 = rest接口第几次请求数 % 服务器集群总数量

  • 自定义负载均衡算法参考
    https://blog.csdn.net/shunhua19881987/article/details/75466797