Ribbon 是什么?
springcloud 的客户端负载均衡组件
什么是负载均衡?
负载均衡又分为服务端负载均衡和客户端负载均衡。
服务端负载均衡
硬件负载均衡和软件负载均衡
- 硬件负载均衡主要通过在服务器节点之间按照专门用于负载均衡的设备,比如 F5 等
- 软件负载均衡则是通过在服务器上安装一些用于负载均衡功能或模块等软件来完成请求分发工作,比如 Nginx 等
- 服务端负载均衡架构图
客户端负载均衡
- 客户端负载均衡和服务端负载均衡最大的不同点在于上面所提到服务清单所存储的位置。
- 在客户端负载均衡中,所有客户端节点都维护着自己要访问的服务端清单,而这些服务端端清单来自于服务注册中心,比如上一章我们介绍的 Eureka 服务端。同服务端负载均衡的架构类似,在客户端负载均衡中也需要心跳去维护服务端清单的健康性,默认会创建针对各个服务治理框架的 Ribbon 自动化整合配置。
讲解下 Ribbon 的工作原理
Ribbon 架构图
Ribbon 实现软负载均衡主要有这三点
- 服务发现:就是发现依赖服务的列表,通俗来说就是依据服务的名字把它的所有服务实例找出来
- 服务选择规则:依据指定的服务规则,从多个有效服务中选择一个服务发起请求
- 服务监听:定时检测服务存活情况,及时高效剔除不可用的服务。
Ribbon 主要组件
ServerList
、IRule
、ServerListFilter
;
首先通过 ServerList
获取所有可用服务列表,再通过 ServerListFilter
过滤掉一部分服务,最后 IRule
从过滤后的服务中选择一个实例进行 http
请求
Ribbon 负载均衡策略
- 简单轮询负载均衡(RoundRobin)
- 随机负载均衡 (Random)
- 随机选择状态为 UP 的 Server
- 加权响应时间负载均衡 (WeightedResponseTime)
- 区域感知轮询负载均衡(ZoneAware)
Ribbon 配置
连接超时、重试、重试算法
Ribbon 功能
- 易于与服务发现组件(比如 Netflix 的 Eureka)集成
- 使用 Archaius 完成运行时配置
- 使用 JMX 暴露运维指标,使用 Servo 发布
- 多种可插拔的序列化选择
- 异步和批处理操作
- 自动 SLA 框架
- 系统管理/指标控制台