Sentinel 流量控制(流控):规则详解与实战配置
流量控制(简称 “流控”)是 Sentinel 的核心功能之一,通过监控资源的实时流量,当达到预设阈值时触发控制策略,避免服务因流量过载而崩溃。Sentinel 的流控规则灵活多样,可根据资源、阈值类型、调用关系等维度精准控制流量。
流量控制的核心目标
在微服务场景中,流量控制主要解决以下问题:
- 防止突发流量(如秒杀、促销)压垮服务;
- 避免接口因高并发导致响应延迟或超时;
- 保护核心业务(如支付接口)的资源占用,优先保障其可用性;
- 实现流量的削峰填谷(如匀速处理请求),避免系统资源波动。
流量控制规则(FlowRule)核心属性
Sentinel 的流控规则通过FlowRule类定义,包含以下关键属性,每一项都决定了流控的生效方式:
| 属性名 | 说明 | 默认值 | 配置场景举例 |
|---|---|---|---|
resource |
资源名(唯一标识),通常是接口路径(如/order/create)或自定义资源名。 |
- | 限制/order/create接口的流量 |
count |
限流阈值(核心参数),根据grade类型确定是 QPS 数还是线程数。 |
- | QPS 阈值设为 100(每秒最多 100 次请求) |
grade |
阈值类型: - 0(QPS):每秒请求数 - 1(线程数):并发线程数 |
0(QPS) |
秒杀接口用 QPS 限制,高耗时接口用线程数限制 |
limitApp |
针对特定调用来源限流(如服务名),default表示不区分来源。 |
default |
仅限制user-service调用的流量 |
strategy |
流控模式: - 0(直接):针对资源本身限流 - 1(关联):关联资源触发限流 - 2(链路):指定链路入口限流 |
0(直接) |
支付接口达到阈值时,限制下单接口(关联模式) |
controlBehavior |
流控效果: - 0(快速失败):直接拒绝并抛异常 - 1(Warm up):预热模式,逐渐提升阈值 - 2(排队等待):匀速处理请求 |
0(快速失败) |
秒杀接口用 Warm up,避免瞬间冲击;消息接口用排队等待 |
流控规则详解(结合 Dashboard 配置)
Sentinel Dashboard 提供了可视化配置界面,各配置项与FlowRule属性一一对应,以下是详细说明:
1. 基础配置:资源名与阈值类型
资源名:默认是接口的请求路径(如
/hello),也可通过@SentinelResource自定义资源名(如"orderService")。示例:限制
/order/create接口的流量,资源名填/order/create。针对来源(limitApp):
- 默认为
default(不区分调用来源); - 若需限制特定服务调用(如仅
cart-service调用),填写对应服务名(需注册到服务发现)。
- 默认为
阈值类型(grade):
- QPS(每秒请求数):适合接口处理速度快、短耗时的场景(如查询接口)。例如:QPS=50 表示每秒最多允许 50 次请求。
- 线程数:适合接口处理耗时较长(如数据库操作)的场景,避免线程耗尽。例如:线程数 = 10 表示最多允许 10 个并发线程执行该接口。
2. 流控模式(strategy):控制 “哪些流量” 被限制
(1)直接模式(默认)
规则:当资源自身的流量达到阈值时,直接对该资源限流。
示例:/order/pay接口 QPS 阈值设为 20,当每秒请求超过 20 次时,直接拒绝新请求。
适用场景:保护单个接口不被过度调用(如详情查询接口)。
(2)关联模式
规则:当 “关联资源” 的流量达到阈值时,限制当前资源的流量(“我为关联资源让路”)。
示例:
- 关联资源:
/order/pay(支付接口); - 当前资源:
/order/create(下单接口); - 配置:当
/order/pay的 QPS 达到 30 时,限制/order/create的流量。
适用场景:避免次要接口占用核心接口的资源(如下单接口为支付接口让路,防止支付超时)。
(3)链路模式
规则:仅限制从 “指定入口资源” 调用当前资源的流量(精确到调用链路)。
示例:
- 入口资源:
/api/v1/order/create(外部调用入口); - 当前资源:
orderService.create(内部服务方法); - 配置:仅当从
/api/v1/order/create调用orderService.create时,才触发限流(内部调用不限制)。
适用场景:区分不同调用链路的流量(如外部接口调用需限流,内部服务调用不限流)。
3. 流控效果(controlBehavior):控制 “如何限制” 流量
(1)快速失败(默认)
规则:流量超过阈值时,直接拒绝请求并抛出BlockException(提示Blocked by Sentinel (flow limiting))。
特点:响应快,适合不允许排队的场景(如实时查询)。
示例:QPS 阈值 = 10,第 11 次请求直接被拒绝。
(2)Warm up(预热模式)
规则:阈值从 “初始值”(count / coldFactor,coldFactor默认 3)逐渐提升至设定的count,预热时间由warmUpPeriodSec(默认 10 秒)控制。
特点:避免瞬间流量冲击,适合秒杀、活动等场景。
示例:
- QPS 阈值 = 30,
coldFactor=3,预热时间 = 10 秒; - 前 10 秒:阈值从 10(30/3)逐渐提升到 30;
- 10 秒后:阈值稳定在 30。
(3)排队等待(匀速模式)
规则:请求按匀速(1000ms / count)通过,超过阈值的请求排队等待,超时未处理则被拒绝(默认超时时间 500ms)。
特点:平滑流量,对应 “漏桶算法”,适合需要匀速处理的场景(如消息推送)。
注意:仅支持 QPS 阈值类型,不支持线程数。
示例:QPS=5,则每 200ms(1000/5)允许 1 个请求通过,超过的请求排队等待。
流控规则配置示例(Dashboard 操作)
以限制/order/create接口为例,配置步骤:
- 登录 Sentinel Dashboard,选择目标服务;
- 进入 “簇点链路”,找到
/order/create接口,点击 “流控”; - 配置规则:
- 资源名:
/order/create; - 针对来源:
default(不区分来源); - 阈值类型:QPS,阈值 = 20;
- 流控模式:直接;
- 流控效果:快速失败;
- 资源名:
- 点击 “新增”,规则立即生效。
高级:自定义资源与流控
除了接口路径,还可通过@SentinelResource定义自定义资源,实现更细粒度的流控:
1 | import com.alibaba.csp.sentinel.annotation.SentinelResource; |
配置:在 Dashboard 中针对资源名createOrder配置流控规则,效果与接口路径资源一致。
总结
Sentinel 的流量控制通过灵活的规则配置,可满足不同场景的流量管理需求:
- 阈值类型选择:短耗时接口用 QPS,长耗时接口用线程数;
- 流控模式选择:单个接口保护用 “直接”,核心接口优先用 “关联”,链路区分用 “链路”;
- 流控效果选择:实时性要求高用 “快速失败”,流量波动大用 “Warm up”,需匀速处理用 “排队等待”

v1.3.10