目录
-
定义
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。
Ribbon主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon的客户端组件提供一系列完整的配置项,如:连接超时、重试等。在配置文件中列出 LoadBalancer(简称LB:负载均衡)后面所有的服务器后,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等等)去连接这些服务器。
-
实现原理
-
负载均衡-客户端负载均衡
-
工作步骤
- 选择 Eureka Server(优先选择在同一个区域内负载较少的)
- 根据用户指定的策略(IRule),在上一步选择的 Eureka Server取到的服务注册列表中选择一个地址
-
IRule 负载均衡规则
-
根据特定算法中从服务器列表中选取一个要访问的服务
-
七种默认算法
- RoundRobinRule
- 轮询
- RandomRule
- 随机
- AvailabilityFilteringRule
- 先过滤掉由于多次访问故障而处于断路器状态的服务,还有并发的连接数量超过阈值的服务
- 对剩余的服务列表按照轮询策略进行访问
- WeightedResponseTimeRule
- 根据平均响应时间计算所有服务的权重,响应时间越快的服务权重越大被选中的概率越大
- 刚启动时如果统计信息不足,则使用轮询策略,等统计信息足够,会切换到响应权重策略
- RetryRule
- 先按照轮询策略获取服务
- 如果获取服务失败则在指定时间内进行重试,获取可用的服务
- BestAvailableRule
- 先过滤掉由于多次访问故障而处于断路器跳闸状态的服务
- 选择一个并发量最小的剩余的服务
- ZoneAvoidanceRule【默认】
- 复合判断Server所在区域的性能和Server的可用性选择服务器
- 在没有Zone的环境下,类似于轮询
- 为Ribbon默认的算法
- RoundRobinRule
-
可自实现 IRule
- 注意:自定义规则的配置类不要在启动类所在的包内,要跟启动类所在的包同级的包内,例如配置类MyRule在 com.example.myrule/MyRule.class,启动类在 com.example.application/SpringApplication.class
-
-
-
Reference
- spring官方文档
https://spring.io/projects/spring-cloud-netflix
- 【狂神说Java】SpringCloud最新教程IDEA版
https://www.bilibili.com/video/BV1jJ411S7xr
- Ribbon,负载均衡简介,Ribbon架构,IRULE的7种默认算法