✅ 一、Sentinel 是什么?

Sentinel 是阿里开源的流量防控组件,用于 流量控制(限流)熔断降级系统负载保护 等。

核心目标是:

在高并发场景下,保护服务稳定性、避免雪崩、削峰填谷


✅ 二、Sentinel 是如何限流的?(核心原理)

🧠 1. 总体原理

Sentinel 基于 滑动窗口 + 令牌桶 等限流算法,构建了灵活的流控机制,限流粒度精细,支持:

  • QPS(每秒请求数)

  • 并发线程数

  • 来源应用维度

  • 客户端 IP、参数等维度的控制

🧪 2. 执行机制(源码流程简化版)

当请求进入时,Sentinel 会执行:

Entry entry = SphU.entry("resourceName");

底层流程:

  1. Slot Chain 调用链执行:

    • 每个请求会进入一条责任链(ProcessorSlot),包括:限流、熔断、系统规则等。

    • 限流规则由 FlowSlot 执行。

  2. FlowSlot -> FlowRuleChecker:

    • 会从缓存中获取当前资源的限流规则。

    • 比如:resourceName 设置了 QPS=100。

  3. 调用 QPSController(或其他控制器):

    • 通过 StatisticNode 获取最近的请求数。

    • 比较当前请求数是否超过阈值。

  4. 如果超过:

    • 抛出 FlowException 拦截请求;

    • 否则允许通过。

👉 核心类:

  • FlowRule:限流规则

  • FlowRuleChecker:检查器

  • StatisticNode:统计实时流量

  • TokenBucketController / RateLimiterController / WarmUpController


✅ 三、限流方式有哪些?

类型 说明 示例
QPS 限流 每秒最多通过 N 次 服务 A 的 QPS 上限为 200
并发线程数 控制某资源同时处理的线程数 某方法最多支持 10 个线程同时执行
关联限流 控制下游依赖的访问频率 下游服务 C 太慢,限制访问它的 QPS
链路限流 按调用路径限流 如果是 userService → orderService,则限流;其他路径不限制
热点参数限流 对特定参数限流 商品 ID 为 123 的请求过多,就限流它
集群限流 多节点统一限流 多实例统一控制总 QPS,比如分布式限流 5000 QPS


✅ 四、如何给某台服务限流(指定 QPS)?

如果你想让 Sentinel 只对某台服务的某个实例限流

✅ 方法一:通过 Sentinel 控制台 + 接入端配置

  • 每个实例都会上报资源信息到控制台。

  • 在控制台上对指定资源设置规则:

    • 设置“来源应用”字段,比如:来源为 app-a

    • 设置限流 QPS 为 100

  • 实际效果:只有从 app-a 发起的请求触发限流。

✅ 方法二:代码指定来源限流

ContextUtil.enter("app-a"); // 手动设置来源
Entry entry = SphU.entry("myService");

然后在 FlowRule 中写:

rule.setLimitApp("app-a");
rule.setCount(100); // 每秒 100 个

这样就能控制指定调用来源 QPS。


✅ 五、高并发场景如何限流?(策略答题)

答题策略(通用模板):

在高并发场景下,我们主要使用 Sentinel 实现 QPS 限流,通过 WarmUp(预热)、RateLimiter(匀速器)等限流控制器削峰,防止系统瞬间过载。配合 fallback 策略或队列削峰,保证核心功能稳定。同时可利用热点参数限流防止特定资源打满系统。

具体做法:

  • WarmUp 限流器:预热型限流,适合突发流量避免冷启动压垮系统。

  • RateLimiter 限流器:漏桶方式,匀速处理流量。

  • 热点参数限流:防止攻击型、倾斜型访问打垮某接口。

  • 隔离非核心接口:对非核心接口设低阈值限流。

  • 降级 + 异步队列(削峰):应对高并发压力。


✅ 六、Spring Cloud 中哪些组件可以限流?

组件 是否支持限流 说明
Sentinel ✅ 强 接口级、参数级、调用链级
Gateway + Sentinel ✅ 强 网关层限流,适合 BFF 网关或微前端
Spring Cloud Gateway + Resilience4j ✅ 支持 更偏向容错(熔断、限流)
Nginx + Lua 限流插件 ✅ 支持 靠近入口层限流,高性能,但粒度粗
Redis + Lua 限流 ✅ 可自定义 适合集群统一限流场景


✅ 七、如果面试官问“你看过源码吗?”

推荐答法:

是的,Sentinel 的限流机制是通过 Slot 链的 FlowSlot 模块完成的,规则由 FlowRuleChecker 校验是否触发限流,底层统计使用了滑动窗口结构来记录每个资源的请求数。控制器使用不同的限流算法如 QPS、WarmUp、RateLimiter 控制是否通过请求,核心源码包括 FlowRule、FlowRuleManager、StatisticNode 等。


✅ 面试一段答题模板(参考):

Sentinel 是一款功能强大的流控组件,支持多种限流方式,包括 QPS、并发、热点参数等。它内部通过 Slot 链执行限流逻辑,限流规则由 FlowRuleChecker 执行,使用滑动窗口统计请求数。我们可以通过 Sentinel 控制台或代码配置限流规则,在高并发下通过 WarmUp 或 RateLimiter 限流器控制系统压力,保障稳定性。在我项目中,我们对核心接口设置了 QPS 限流,并用限流回调做容错处理,效果明显。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐