一、Sentinel 是什么
Sentinel 是阿里巴巴开源、面向分布式微服务架构的流量治理 / 服务稳定性防护组件,核心切入点是流量,从限流、熔断降级、系统保护、热点防护等维度防止服务雪崩,支撑阿里多年双十一大促高并发场景Spring Clo...。 官网:sentinelguard.io/ Github:alibaba/Sentinel
区分:不要和 Redis Sentinel(Redis 哨兵高可用)、微软云 Microsoft Sentinel(安全 SIEM)混淆,后端微服务领域说的 Sentinel 特指阿里流量防护组件。
核心优势
- 轻量无依赖:核心包零第三方依赖,性能损耗极低;
- 生态完善:原生适配 Spring Cloud、Dubbo、Gateway、gRPC、Servlet;
- 功能全面:限流、熔断、热点限流、系统保护、流量整形全覆盖;
- 可视化控制台:秒级实时监控、动态修改规则、集群监控;
- 高扩展 SPI:规则持久化(Nacos/Apollo)、自定义限流 / 降级逻辑、集群限流;
- 低侵入接入:注解
@SentinelResource、API、过滤器三种接入方式。
二、五大核心能力
1. 流量控制(限流 FlowRule)
控制请求流量,防止瞬时流量压垮服务,多维度限流策略:
- QPS 限流:每秒最大请求数(最常用,如接口限 100 QPS);
- 并发线程数限流:限制同时处理请求的线程,保护慢接口、DB 查询;
- 流量整形(匀速排队) :削峰填谷,突刺流量匀速放行,消息消费场景专用;
- 关联限流:下游接口压力大时,限制上游调用(如订单支付压力大,限制商品查询);
- 链路限流:只限制某一条调用链路的流量,不同入口隔离防护;
- 限流效果:直接拒绝、排队等待、预热冷启动(缓慢提升阈值应对冷启动)。
2. 熔断降级(DegradeRule,防止雪崩)
下游服务不稳定时,切断调用、快速失败,避免请求堆积耗尽资源。 断路器三状态自动流转:
- 关闭 Closed:正常调用,统计 RT、异常;
- 打开 Open:触发熔断,拒绝所有请求;
- 半开 Half-Open:熔断时长结束,放行少量请求探测,恢复正常则关闭,失败继续熔断。
三种熔断触发规则:
- 慢调用比例:超过指定 RT 的请求占比超标触发熔断;
- 异常比例:抛出业务异常请求占比超标;
- 异常数:固定窗口内异常请求总数达到阈值。
3. 热点参数限流(ParamFlowRule)
针对高频热点参数单独限流,秒杀核心场景(如单个商品 ID、单个用户疯狂请求)。 例:商品详情接口,对商品 ID 限流,单个商品每秒最多 5 次访问,不影响其他商品。
4. 系统自适应保护(SystemRule)
从服务器整体维度防护,防止整机崩溃:
- 限制最大 QPS、最大并发线程;
- 基于 CPU 使用率自适应限流(CPU 超过 80% 自动削流量);
- 平均 RT 负载保护,系统卡顿时减少入口流量。
5. 授权规则(AuthorityRule)
黑白名单流量控制,按调用来源(app 名称、客户端标识)放行 / 拦截:
- 白名单:仅指定应用可调用;
- 黑名单:禁止指定应用访问资源。
三、核心基础概念
1. 资源 Resource
Sentinel 最小防护单元,所有需要保护的代码块都是资源:
- Web 接口 URL、Dubbo 接口、自定义方法(
@SentinelResource)、网关路由; - 每个资源独立配置限流、熔断规则。
2. Slot Chain 责任链(底层原理)
请求进入资源后,会依次执行一套插槽链,各司其职:
- StatisticSlot:统计 QPS、RT、异常数(所有规则的数据来源);
- FlowSlot:流量限流校验;
- DegradeSlot:熔断降级校验;
- ParamFlowSlot:热点参数校验;
- SystemSlot:系统负载校验;
- AuthoritySlot:黑白名单授权校验。 任意插槽拦截请求,直接走降级逻辑,不再执行后续插槽。
3. Context 调用上下文
基于 ThreadLocal 保存调用链路、来源信息,用于链路限流、来源授权。
四、Sentinel 组成架构
1. 客户端(接入应用)
业务服务引入依赖,埋点统计流量、执行规则校验,内置 HTTP 服务(默认 8719 端口)和控制台通信上报监控数据。
2. Sentinel Dashboard 控制台
独立 Jar 包启动,可视化操作:
- 实时监控:单台 / 集群秒级流量、RT、异常、拦截数;
- 规则管理:在线新增 / 修改 / 删除限流、熔断、热点规则;
- 机器发现、簇点链路查看、熔断状态展示。
控制台默认内存存储规则,服务重启丢失;生产必须对接 Nacos/Apollo 实现规则持久化。
五、与 Hystrix 核心对比
表格
| 特性 | Sentinel | Hystrix |
|---|---|---|
| 维护状态 | 持续迭代更新,阿里主推 | 停止维护,不再更新 |
| 限流能力 | QPS、线程、热点、链路、匀速、系统自适应,极丰富 | 仅线程池 / 信号量隔离,无精细化限流 |
| 控制台 | 原生自带,监控完善 | 仅基础监控,功能简陋 |
| 性能 | 轻量、低损耗 | 线程池隔离开销大 |
| 生态 | SpringCloud/Dubbo/Gateway 全适配 | 仅 Spring Cloud 原生适配 |
| 扩展 | SPI 高度可定制 | 扩展能力弱 |
选型结论:国内微服务、Spring Cloud Alibaba 体系优先 Sentinel。
六、快速接入(SpringBoot 极简示例)
- 引入 Maven 依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
- 配置控制台地址 application.yml
spring:
cloud:
sentinel:
transport:
dashboard: 127.0.0.1:8080 # 控制台地址
port: 8719 # 客户端与控制台通信端口
- 自定义资源埋点(注解方式)
@Service
public class GoodsService {
// value:资源名;blockHandler:限流/熔断拦截后执行的降级方法
@SentinelResource(value = "queryGoods", blockHandler = "queryGoodsFallback")
public String queryGoods(Long goodsId) {
// 业务逻辑
return "商品详情";
}
// 降级方法:参数与原方法一致,追加BlockException
public String queryGoodsFallback(Long goodsId, BlockException e) {
return "访问过于频繁,请稍后重试";
}
}
- 启动控制台 Jar
java -jar sentinel-dashboard-1.8.6.jar
访问 localhost:8080 即可在线配置规则、查看监控。
七、生产最佳实践要点
- 规则持久化:对接 Nacos,规则存配置中心,服务重启不丢失;
- 集群限流:多实例部署时使用集群限流,全局统一阈值;
- 分级降级:区分限流、熔断、系统过载,返回不同友好提示;
- 预热限流:接口冷启动配置预热,避免刚上线瞬间打满流量;
- 热点限流:秒杀、商品查询接口必配热点参数防护;
- 网关层统一防护:Spring Cloud Gateway 接入 Sentinel,前置全局限流;
- 监控告警:对接 Prometheus+Grafana,拦截量突增触发告警。