Sentinel 控制台用法与工作原理学习笔记
Sentinel 控制台用法与工作原理学习笔记
一、流控规则配置
- 基础控制维度:支持对 QPS(每秒查询率)和并发线程数进行控制。
- 三种流控模式:
- 直接关系:直接针对接口配置流量规则,可设置 QPS 或并发线程数阈值,当触发阈值时直接对该接口进行限流。
- 关联关系:适用于存在关联的服务,例如调用 A 服务的请求过多时,可配置当 A 服务的 QPS 或并发线程数达到阈值后,对关联的 B 服务进行流量控制,避免因 A 服务过载影响 B 服务。
- 链路关系:针对具有调用关系的链路进行配置,可对链路上的特定节点或多个节点限流,进而控制整个链路的流量。需注意:1.7 版本后,链路控制功能需在配置文件中设置
WebContextUtile
参数为false
才能生效。
- 三种流控类型:
- 快速失败:当接口请求超过设定阈值(QPS 或并发线程数)时,直接返回失败结果。
- 接口预热:服务启动时,通过模拟线程加载缓存等资源,避免刚启动就被大量流量击垮,逐渐提升接口处理能力至阈值。
- 排队等待:可设置超时时间,请求会进入队列等待处理。若超时则被剔除并返回失败;未超时则正常响应。例如,阈值设为 20 时,每秒处理 20 个请求,超出部分进入队列等待。
二、熔断降级配置
基于三种情况设置阈值,触发后进入熔断状态,熔断时间结束后恢复正常:
- 慢调用比例:当慢调用(如慢查询接口)占比超过配置阈值时,触发熔断。
- 异常比例:接口异常请求占比超过阈值时,触发熔断。
- 异常数:接口异常请求数量达到阈值时,触发熔断。
三、热点限流
针对接口的热点参数(仅支持 Java 7 种基本数据类型)进行 QPS 配置。例如,查询用户 ID 为 1 的数据是热点,可设置当该参数的 QPS 达到阈值时进行限流。
四、系统规则限流
从系统整体层面限制流量,包含五种模式:
- Load:仅对 Linux/Unix 机器生效,根据系统负载进行限流。
- RT(响应时间):当系统整体响应时间超过阈值时,触发限流。
- 线程数:限制系统最大支持的并发线程数,超过则限流。
- 入口 QPS:限制单位时间内整体进入系统的 QPS,超过则限流。
- CPU 使用率:当 CPU 使用率超过阈值时,触发限流。
五、授权规则限流
支持通过黑白名单实现微服务间的调用控制:
- 需手动实现
RequestOriginParser
接口,并将其注册为 Spring 管理的 Bean,用于解析请求来源。 - 根据解析的来源,结合黑白名单规则,允许或限制微服务间的调用。
六、集群流控
- 基础配置:在流控规则中可选择是否为集群模式,支持单机均摊或整体阈值设置。
- 差异化配置:通过
Token Server
和Token Client
实现,可针对不同机器(如配置高低)设置差异化 QPS 阈值,配置高的机器可适当提高 QPS,配置低的则降低。
七、工作原理
- 核心抽象:将流量规则控制、集群节点聚簇等功能抽象为一个个
Slot
(插槽)。 - 责任链模式:所有插槽构成一条责任链,请求需依次经过链路上的各个插槽检查。
- 执行流程:
- 外部请求进入后,先进行统计簇点构建和监控统计。
- 依次经过热点参数限流、系统保护限流、来源访问控制限流、流量控制、熔断降级等插槽的检查。
- 若链路上任何一个插槽的限流规则未通过,返回快速失败结果;全部通过则执行接口逻辑。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 GoofySatoshi's Blog!
评论