5993 字
约 19 分钟
1
Sentinel 入门详解:一篇搞懂限流、熔断、降级与系统保护

Sentinel 入门详解:一篇搞懂限流、熔断、降级与系统保护

前言

在开发一个普通后台系统时,我们通常只需要考虑:

请求进来
   ↓
Controller
   ↓
Service
   ↓
Mapper
   ↓
Database

只要代码逻辑正确,功能基本就能正常运行。

但当系统流量越来越大以后,问题就开始出现了。

例如:

平时:

100 QPS
   ↓
系统正常

突然有一天:

10000 QPS
    ↓
接口响应变慢
    ↓
Tomcat 线程堆积
    ↓
数据库连接池耗尽
    ↓
MySQL CPU 飙升
    ↓
整个系统不可用

又或者,在微服务系统中:

Order Service
      ↓
Payment Service

Payment Service 突然变慢。

Order Service 每次调用都要等待:

3 秒
5 秒
10 秒

大量请求全部卡在 Order Service。

最终:

Payment 挂了
   ↓
Order 被拖死
   ↓
Gateway 被拖死
   ↓
整个系统雪崩

这时候我们就需要一种技术来保护系统:

流量太大时限制请求,下游服务异常时快速失败,非核心功能必要时降级,从而避免局部问题演变成整个系统故障。

这就是 Sentinel 主要解决的问题。


一、什么是 Sentinel?

Sentinel 是阿里巴巴开源的一套:

面向分布式系统的流量治理和容错组件。

它主要提供:

限流
熔断
降级
热点参数限流
系统保护
实时监控

可以简单理解成:

Sentinel 是系统中的“限流阀 + 保险丝”。

流量太大:

限流

下游服务大量超时:

熔断

某些非核心功能需要暂时关闭:

降级

系统 CPU、线程等资源已经非常危险:

系统保护

所以 Sentinel 的核心目标并不是:

让系统跑得更快。

而是:

在异常流量和故障场景下,让系统不要轻易被拖垮。


二、Sentinel 只能用于微服务吗?

答案是:

不是。

Sentinel 可以用于:

Spring Boot 单体项目

Spring Cloud 微服务

Dubbo

Spring Cloud Gateway

普通 Java 方法

因为 Sentinel 真正保护的对象不是:

微服务

而是:

Resource
资源

这个资源可以是:

一个接口

一个方法

一次远程调用

一个 Gateway 路由

一个业务功能

例如一个普通单体项目:

Spring Boot
    ↓
/api/order/create
    ↓
OrderService
    ↓
MySQL

如果 /api/order/create 突然来了大量请求:

10000 QPS

完全可以使用 Sentinel:

最大允许:
500 QPS

于是:

10000 请求
    ↓
Sentinel
    ↓
500 放行
9500 拒绝

所以 Sentinel 并不是微服务专属组件。


三、为什么需要限流?

先看一个现实问题。

假设订单接口:

POST /api/order

系统正常承载能力:

500 QPS

结果秒杀活动开始:

50000 QPS

如果全部放进去:

50000 请求
      ↓
Tomcat
      ↓
Service
      ↓
MySQL

可能发生:

线程池耗尽
   ↓
数据库连接池耗尽
   ↓
SQL 大量排队
   ↓
CPU 100%
   ↓
GC 增加
   ↓
接口超时
   ↓
整个系统挂掉

所以现实系统不能遵循:

来多少请求就处理多少请求。

因为计算机资源永远是有限的。

正确思想是:

系统能处理多少,就只放多少进来。

例如:

最大 500 QPS

那么:

请求 1~500
↓
正常执行

超过部分
↓
限流

返回:

系统繁忙,请稍后重试。

这就是:

Flow Control

流量控制,也就是限流。


四、限流的核心思想

假设水管最多只能承受:

每秒 100 升

结果突然灌入:

每秒 10000 升

如果没有阀门:

水管爆掉

Sentinel 就像:

流量阀门

只允许:

100

进入。

剩余:

拒绝
排队
或者使用其他策略处理

因此:

宁愿拒绝一部分请求,也不能让所有请求一起失败。

这是限流最核心的思想。


五、什么是 QPS?

学习 Sentinel 会经常看到:

QPS

全称:

Queries Per Second

简单理解:

每秒请求数量。

例如:

1 秒钟收到 100 个请求

那么:

QPS = 100

如果给接口配置:

QPS = 50

大致可以理解为:

每秒允许约 50 个请求通过

超过部分触发流控规则。


六、Sentinel 中什么叫 Resource?

这是理解 Sentinel 非常重要的概念。

Sentinel 并不是简单针对:

整个应用

进行保护。

它主要围绕:

Resource

进行统计和保护。

比如:

createOrder

可以是一个资源。

queryUser

也是一个资源。

/api/order/list

也可以成为资源。

例如:

@SentinelResource("createOrder")
public Long createOrder(CreateOrderRequest request) {
    return orderService.createOrder(request);
}

这里:

createOrder

就是一个 Sentinel Resource。

Sentinel 可以统计:

QPS

平均响应时间

异常数量

当前线程数量

通过请求数量

被限流请求数量

然后根据规则决定:

Allow

或者:

Block

七、Sentinel 的基本工作原理

可以简单理解为:

请求
 ↓
Sentinel Resource
 ↓
统计当前流量
 ↓
检查规则
 ↓
┌─────────────┐
│ 是否允许?   │
└──────┬──────┘
       │
   ┌───┴───┐
   ↓       ↓
 允许      不允许
   ↓       ↓
业务代码   Block

所以 Sentinel 实际做的事情可以概括为:

统计
+
规则判断
+
流量控制

八、Sentinel 的第二个核心能力:熔断

限流解决的是:

请求太多。

熔断解决的是:

下游已经不正常了。

例如:

Order Service
     ↓
Payment Service

正常情况下:

Payment
响应时间:

50ms

突然 Payment Service 出问题:

5000ms

甚至:

Timeout

如果 Order Service 继续疯狂请求:

请求1
 ↓
等待5秒

请求2
 ↓
等待5秒

请求3
 ↓
等待5秒

大量线程全部等待 Payment。

最终:

Payment Service
挂掉
   ↓
Order Service
线程耗尽
   ↓
Order Service
也挂掉

然后调用 Order 的系统也可能受到影响。

这就是:

服务雪崩


九、什么是熔断?

熔断的思想非常像家里的:

保险丝。

如果电流异常:

保险丝断开

避免整个电路烧坏。

Sentinel 发现某个资源:

异常比例非常高

或者:

慢调用比例非常高

就可以暂时:

Circuit Open

也就是:

打开熔断器。

后续请求不再真正调用故障服务。

例如:

Order
 ↓
Sentinel
 ↓
发现 Payment 已经被熔断
 ↓
直接快速失败

而不是:

Order
 ↓
Payment
 ↓
等待5秒
 ↓
Timeout

这就是:

Fail Fast,快速失败。


十、熔断器的三个经典状态

熔断器通常可以理解为三个状态:

Closed

Open

Half-Open

1. Closed

正常状态。

Order
 ↓
Payment

正常调用。


2. Open

Sentinel 发现:

大量异常

或者:

大量慢调用

于是:

Circuit Breaker Open

后续请求:

Order
 ↓
Sentinel
 ↓
快速失败

不继续冲击 Payment。


3. Half-Open

熔断一段时间以后,Sentinel 需要判断:

下游是不是已经恢复了?

于是:

放少量请求过去测试

如果恢复:

Half-Open
   ↓
Closed

如果依然异常:

Half-Open
   ↓
Open

整个过程:

Closed
   ↓
异常达到阈值
   ↓
Open
   ↓
等待恢复时间
   ↓
Half-Open
   ↓
成功 → Closed
失败 → Open

十一、什么叫降级?

熔断和降级经常一起出现。

假设一个电商首页需要:

用户信息

商品

库存

推荐

广告

积分

优惠券

其中:

商品
订单
支付
库存

属于核心业务。

而:

猜你喜欢
推荐商品
广告
积分展示

相对没有那么核心。

双十一系统压力特别大的时候,我们可能决定:

推荐系统暂时关闭

用户访问首页:

推荐商品

不再执行复杂算法。

直接:

{
  "recommendations": []
}

这样可以把资源优先留给:

订单
支付
库存

这就是:

服务降级

简单理解:

系统资源不足时,优先保核心功能,暂时牺牲非核心功能。


十二、熔断和降级有什么区别?

很多初学者会混淆。

可以这样理解。

熔断

关注:

下游不健康

例如:

支付服务大量超时

于是:

先不调用它

降级

关注:

当前功能可以暂时降低服务质量

例如:

推荐服务不可用

那么:

返回空推荐

所以可以记:

熔断负责“断掉有问题的调用”。

降级负责“断掉以后给用户什么结果”。

两者在实际项目中经常配合使用。


十三、什么是 blockHandler?

Sentinel 中经常会看到:

blockHandler

它主要负责:

处理 Sentinel 规则触发以后产生的 BlockException。

例如:

@SentinelResource(
    value = "queryOrder",
    blockHandler = "queryOrderBlock"
)
public OrderVO queryOrder(Long id) {

    return orderService.queryOrder(id);
}

如果触发:

限流

熔断规则

热点参数规则

可能进入:

public OrderVO queryOrderBlock(
        Long id,
        BlockException ex) {

    OrderVO vo = new OrderVO();
    vo.setMessage("系统繁忙,请稍后重试");

    return vo;
}

流程:

queryOrder
   ↓
Sentinel Rule
   ↓
触发 Block
   ↓
queryOrderBlock

所以:

blockHandler

可以简单记成:

Sentinel 自己把请求挡下来以后,执行什么逻辑。


十四、什么是 fallback?

另外还有一个:

fallback

它更多用于:

业务代码执行过程中产生异常时提供兜底逻辑。

例如:

@SentinelResource(
    value = "queryUser",
    fallback = "queryUserFallback"
)
public UserVO queryUser(Long userId) {

    return remoteUserService.queryUser(userId);
}

如果远程调用发生异常:

public UserVO queryUserFallback(
        Long userId,
        Throwable throwable) {

    UserVO user = new UserVO();

    user.setId(userId);
    user.setName("默认用户");

    return user;
}

可以粗略理解:

Sentinel 规则阻断
↓
blockHandler


业务方法自身异常
↓
fallback

这是两个很重要的概念。


十五、热点参数限流是什么?

这是 Sentinel 一个非常实用的功能。

假设有接口:

GET /api/product?id=100

正常情况下,每个商品请求比较平均:

id=1
100 QPS

id=2
80 QPS

id=3
50 QPS

突然某个商品变成爆款:

id=8888

变成:

50000 QPS

如果直接限制整个:

/api/product

会导致其他商品也无法访问。

Sentinel 可以根据:

参数

进行流控。

比如:

id=8888

最大:
500 QPS

但是:

id=9999

仍然可以正常访问。

这就是:

Hotspot Parameter Flow Control

热点参数限流。


十六、热点参数限流适合什么业务?

例如:

秒杀商品 ID

热门商品 ID

明星用户 ID

热门文章 ID

热门视频 ID

热门商户 ID

有时候真正把系统打爆的不是:

整个接口

而是:

某一个特别热门的参数值

热点参数限流就是专门解决这类问题的。


十七、什么是系统保护?

前面限流一般保护:

某一个 Resource

但是 Sentinel 还可以从:

整个应用

的角度保护系统。

例如系统已经出现:

CPU 很高

Load 很高

线程很多

入口 QPS 很高

这时候继续接受大量请求可能会:

拖垮整个 JVM

于是 Sentinel 可以根据系统整体运行状态采取保护措施。

可以理解成:

单个接口限流
↓
保护一个接口


系统保护
↓
保护整个应用

十八、Sentinel Dashboard 是什么?

Sentinel 提供:

Sentinel Dashboard

也就是:

Sentinel 控制台。

通过 Dashboard 可以查看:

实时 QPS

通过数量

拒绝数量

资源信息

流量规则

熔断规则

热点规则

系统规则

例如:

order-service

/api/order/create
QPS = 200

/api/order/list
QPS = 500

/api/order/detail
QPS = 100

然后配置:

/api/order/create

最大 QPS:

100

超过以后:

Block

这对于学习 Sentinel 非常直观。


十九、Sentinel 和 Nacos 为什么经常一起使用?

在很多 Spring Cloud Alibaba 项目里会看到:

Sentinel
+
Nacos

这是因为:

Sentinel

主要负责:

执行流控规则。

而:

Nacos

可以负责:

存储和下发配置。

例如:

order-service

需要一条规则:

/api/order/create
QPS = 100

这个规则可以存储在:

Nacos

然后 Sentinel Client 获取配置。

结构:

                 Nacos
                   |
             Sentinel Rules
              /          \
             ↓            ↓
      Order Service   User Service

所以:

Nacos
→ 保存规则
Sentinel
→ 执行规则

二十、为什么需要规则持久化?

如果规则只存在:

应用内存

那么:

应用重启

可能导致规则丢失。

生产环境显然不能:

每次服务重启
↓
手动重新配置所有规则

所以通常需要:

配置中心

持久化 Sentinel Rule。

例如:

Nacos

就是很常见的解决方案。


二十一、Sentinel 和 Eureka / Nacos 注册中心有什么区别?

这几个东西非常容易混。

可以直接记:

Eureka / Nacos 注册中心
↓
解决“服务在哪里”

Sentinel:

解决“服务现在还能不能安全调用”

例如:

Order Service
      ↓
Nacos / Eureka
      ↓
找到 Payment Service

然后:

Order Service
      ↓
Sentinel
      ↓
判断:
Payment 是否已经熔断?
请求是否超限?

然后才决定:

是否调用

所以:

注册中心

解决:

找谁?

Sentinel:

能不能继续调?


二十二、Sentinel 和 Gateway 有什么关系?

Gateway:

负责请求入口
路由
认证
鉴权
过滤

Sentinel:

负责流量保护

所以二者可以配合:

Internet
   ↓
Gateway
   ↓
Sentinel
   ↓
Microservices

例如:

/api/order/**

最大:

1000 QPS

超过的请求直接在 Gateway 层处理。

这样可以减少后端:

Order Service

的压力。


二十三、Sentinel 和 WAF 有什么区别?

WAF 主要解决:

恶意攻击

例如:

SQL Injection

XSS

恶意扫描

异常 Bot

Sentinel 主要解决:

系统稳定性

例如:

正常用户突然太多

接口 QPS 太高

下游变慢

服务大量异常

比如:

SQL Injection

应该:

WAF 拦截

而:

双十一 100 万正常用户抢购

应该:

Sentinel 限流

可以记:

WAF
→ Security
Sentinel
→ Stability

二十四、Sentinel 和 Hystrix 有什么关系?

学习早期 Spring Cloud 的人,经常会看到:

Hystrix

它也有:

熔断

降级

隔离

等能力。

Sentinel 和它解决的问题存在一定重叠。

但是 Sentinel 不仅关注:

熔断

还非常强调:

流量控制

热点参数

系统保护

实时监控

因此在 Spring Cloud Alibaba 技术体系中,经常会看到:

Sentinel

负责服务流量治理。


二十五、单体项目如何使用 Sentinel?

假设一个普通 Spring Boot:

Spring Boot
   |
   ├── UserController
   ├── OrderController
   └── ReportController

其中报表接口:

/api/report/export

一次执行:

查询几十万数据
+
Excel 生成
+
大量 CPU
+
大量内存

如果同时:

100 个用户

点击导出。

可能:

100 个重任务
   ↓
CPU 打满
   ↓
Memory 增加
   ↓
GC
   ↓
整个后台卡死

可以使用 Sentinel:

最大并发:

3

那么:

前 3 个
↓
执行

第 4 个以后
↓
系统繁忙,请稍后再试

这也是 Sentinel 非常合理的使用场景。


二十六、单体中熔断有什么意义?

假设单体应用调用:

短信平台

支付宝

微信支付

物流平台

地图 API

OCR 服务

比如:

Spring Boot
     ↓
SMS Provider

短信供应商突然:

响应时间 10 秒

如果有:

500 个请求

同时发送短信:

500 个线程
↓
全部等第三方
↓
线程池耗尽
↓
整个 Spring Boot 卡死

Sentinel 可以在:

短信服务持续异常

以后触发熔断。

后续请求:

快速失败

避免大量线程继续等待。

所以:

即使不是微服务,只要存在第三方依赖,也有熔断价值。


二十七、什么时候应该使用 Sentinel?

Sentinel 特别适合下面这些场景:

场景 是否推荐
秒杀 非常推荐
抢优惠券 非常推荐
高并发下单 推荐
短信验证码 推荐
第三方 API 推荐
支付接口 推荐
报表导出 推荐
热门内容 推荐
微服务远程调用 推荐
普通低并发 CRUD 不一定需要
几个人使用的后台 通常没必要

所以不是:

用了微服务
↓
必须 Sentinel

也不是:

单体
↓
不能 Sentinel

真正应该判断:

有没有流量风险?

有没有慢调用?

有没有第三方依赖?

有没有热点?

有没有系统雪崩风险?

二十八、Sentinel 不能解决所有问题

Sentinel 很强,但不要把它理解成万能组件。

例如:

SQL 本身很慢

应该:

优化 SQL

而不是:

全部靠 Sentinel

数据库没有索引:

加索引 / 改查询

内存泄漏:

修代码

接口设计错误:

重新设计

Sentinel 做的是:

在异常情况下保护系统。

而不是:

掩盖系统本身存在的问题。


二十九、一个完整的微服务架构中 Sentinel 在哪里?

把常见组件串起来:

                       Internet
                          |
                          ↓
                         WAF
                          |
                          ↓
                       Gateway
                          |
                       Sentinel
                          |
             ┌────────────┼────────────┐
             ↓            ↓            ↓
           User         Order       Payment
          Service      Service      Service
             ↑            ↑            ↑
             └────────────┼────────────┘
                          |
                         Nacos

这些组件分别负责:

WAF
→ Web 安全
Gateway
→ 请求入口、路由、鉴权
Sentinel
→ 限流、熔断、降级、系统保护
Nacos
→ 服务注册发现、配置管理
微服务
→ 真正业务

这样整个微服务体系就非常清楚了。


三十、一个真实下单流程

用户:

创建订单

请求首先:

Internet
   ↓
WAF

WAF 判断:

是不是攻击?

正常:

↓
Gateway

Gateway:

认证
鉴权
路由

然后:

↓
Sentinel

Sentinel 判断:

当前 QPS 是否过高?

如果:

当前 500 QPS

最大允许 1000 QPS

那么:

Allow

进入:

Order Service

Order Service 需要:

Inventory Service

通过:

Nacos

获得库存服务地址。

然后调用库存。

如果库存服务最近:

大量超时

Sentinel:

触发熔断

于是:

不再疯狂调用库存
↓
快速失败
↓
返回业务兜底结果

这样:

库存服务故障

就不会轻易演变成:

订单服务故障
↓
Gateway 故障
↓
整个网站故障

这就是 Sentinel 真正的意义。


三十一、Sentinel 真正防的是什么?

Sentinel 最终防止的是:

雪崩效应

例如:

Database 变慢
    ↓
Product Service 变慢
    ↓
Order Service 等待
    ↓
Gateway 等待
    ↓
线程大量堆积
    ↓
整个系统崩

有 Sentinel:

Database / 下游变慢
    ↓
Product Service 异常
    ↓
Sentinel 检测异常
    ↓
熔断
    ↓
快速失败
    ↓
控制故障范围

所以 Sentinel 最重要的思想就是:

控制故障传播。


三十二、学习 Sentinel 最重要的几个关键词

刚开始不需要背几十个配置。

先记:

Resource

Flow Control

Circuit Breaker

Degrade

Hotspot

System Protection

BlockHandler

Fallback

对应:

Resource
→ 被保护的资源

Flow Control
→ 限流

Circuit Breaker
→ 熔断

Degrade
→ 降级

Hotspot
→ 热点参数保护

System Protection
→ 系统级保护

BlockHandler
→ Sentinel 规则触发后的处理

Fallback
→ 业务异常的兜底逻辑

把这些理解清楚,Sentinel 就已经真正入门了。


三十三、Sentinel 的核心思想总结

最终可以把 Sentinel 压缩成:

正常情况下:

Request
   ↓
Sentinel
   ↓
Business

流量过大:

Request
   ↓
Sentinel
   ↓
Limit

下游异常:

Request
   ↓
Sentinel
   ↓
Circuit Breaker

非核心业务:

Request
   ↓
Degrade
   ↓
Fallback

系统快撑不住:

CPU / Load / Threads
        ↓
     Sentinel
        ↓
   System Protect

三十四、面试怎么回答 Sentinel?

如果面试官问:

Sentinel 是什么?

可以回答:

Sentinel 是阿里巴巴开源的流量治理和容错组件,主要用于限流、熔断降级、热点参数流控和系统自适应保护。Sentinel 会围绕 Resource 统计 QPS、异常、响应时间和线程等指标,并根据配置的规则决定请求是否允许通过。当系统流量过高或者下游服务大量超时、异常时,可以通过限流或者熔断快速失败,避免局部故障扩散形成系统雪崩。

如果只用一句大白话:

Sentinel 就是系统里的限流阀和保险丝:流量太大就限制,服务坏了就熔断,非核心功能必要时降级,核心目标就是不要让整个系统被拖死。


三十五、最后总结

Sentinel 主要解决:

流量过大
服务变慢
下游故障
热点流量
系统资源不足
故障传播

核心能力:

Sentinel
   │
   ├── 限流
   │
   ├── 熔断
   │
   ├── 降级
   │
   ├── 热点参数
   │
   └── 系统保护

学习 Sentinel 时最重要的不是记 API。

而是理解下面这一条逻辑:

系统资源有限
    ↓
流量不可能无限进入
    ↓
所以需要限流

下游服务可能故障
    ↓
不能无限等待
    ↓
所以需要熔断

非核心功能可以牺牲
    ↓
保护核心业务
    ↓
所以需要降级

局部故障不能无限传播
    ↓
所以需要 Sentinel

Sentinel 最终解决的其实就是一句话:

当系统面对异常流量和局部故障时,通过限制、隔离和快速失败,将问题控制在一个可接受范围内,让整个系统继续活着。

对于真正的工程系统来说:

系统稳定不是“永远不会出现故障”,而是“出现故障以后,不会轻易全盘崩掉”。

而这,正是 Sentinel 存在的价值。

Sentinel 入门详解:一篇搞懂限流、熔断、降级与系统保护
http://clxhxhhr.top/posts/558/
作者
clxstart
发布于
2026-09-09
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。
文章目录
目录