认识 Sentinel

0 阅读6分钟

一、Sentinel 是什么

Sentinel 是阿里巴巴开源、面向分布式微服务架构的流量治理 / 服务稳定性防护组件,核心切入点是流量,从限流、熔断降级、系统保护、热点防护等维度防止服务雪崩,支撑阿里多年双十一大促高并发场景Spring Clo...。 官网:sentinelguard.io/ Github:alibaba/Sentinel

区分:不要和 Redis Sentinel(Redis 哨兵高可用)、微软云 Microsoft Sentinel(安全 SIEM)混淆,后端微服务领域说的 Sentinel 特指阿里流量防护组件。

核心优势

  1. 轻量无依赖:核心包零第三方依赖,性能损耗极低;
  2. 生态完善:原生适配 Spring Cloud、Dubbo、Gateway、gRPC、Servlet;
  3. 功能全面:限流、熔断、热点限流、系统保护、流量整形全覆盖;
  4. 可视化控制台:秒级实时监控、动态修改规则、集群监控;
  5. 高扩展 SPI:规则持久化(Nacos/Apollo)、自定义限流 / 降级逻辑、集群限流;
  6. 低侵入接入:注解 @SentinelResource、API、过滤器三种接入方式。

二、五大核心能力

1. 流量控制(限流 FlowRule)

控制请求流量,防止瞬时流量压垮服务,多维度限流策略:

  • QPS 限流:每秒最大请求数(最常用,如接口限 100 QPS);
  • 并发线程数限流:限制同时处理请求的线程,保护慢接口、DB 查询;
  • 流量整形(匀速排队) :削峰填谷,突刺流量匀速放行,消息消费场景专用;
  • 关联限流:下游接口压力大时,限制上游调用(如订单支付压力大,限制商品查询);
  • 链路限流:只限制某一条调用链路的流量,不同入口隔离防护;
  • 限流效果:直接拒绝、排队等待、预热冷启动(缓慢提升阈值应对冷启动)。

2. 熔断降级(DegradeRule,防止雪崩)

下游服务不稳定时,切断调用、快速失败,避免请求堆积耗尽资源。 断路器三状态自动流转:

  • 关闭 Closed:正常调用,统计 RT、异常;
  • 打开 Open:触发熔断,拒绝所有请求;
  • 半开 Half-Open:熔断时长结束,放行少量请求探测,恢复正常则关闭,失败继续熔断。

三种熔断触发规则:

  1. 慢调用比例:超过指定 RT 的请求占比超标触发熔断;
  2. 异常比例:抛出业务异常请求占比超标;
  3. 异常数:固定窗口内异常请求总数达到阈值。

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 责任链(底层原理)

请求进入资源后,会依次执行一套插槽链,各司其职:

  1. StatisticSlot:统计 QPS、RT、异常数(所有规则的数据来源);
  2. FlowSlot:流量限流校验;
  3. DegradeSlot:熔断降级校验;
  4. ParamFlowSlot:热点参数校验;
  5. SystemSlot:系统负载校验;
  6. AuthoritySlot:黑白名单授权校验。 任意插槽拦截请求,直接走降级逻辑,不再执行后续插槽。

3. Context 调用上下文

基于 ThreadLocal 保存调用链路、来源信息,用于链路限流、来源授权。

四、Sentinel 组成架构

1. 客户端(接入应用)

业务服务引入依赖,埋点统计流量、执行规则校验,内置 HTTP 服务(默认 8719 端口)和控制台通信上报监控数据。

2. Sentinel Dashboard 控制台

独立 Jar 包启动,可视化操作:

  • 实时监控:单台 / 集群秒级流量、RT、异常、拦截数;
  • 规则管理:在线新增 / 修改 / 删除限流、熔断、热点规则;
  • 机器发现、簇点链路查看、熔断状态展示。

控制台默认内存存储规则,服务重启丢失;生产必须对接 Nacos/Apollo 实现规则持久化。

五、与 Hystrix 核心对比

表格

特性SentinelHystrix
维护状态持续迭代更新,阿里主推停止维护,不再更新
限流能力QPS、线程、热点、链路、匀速、系统自适应,极丰富仅线程池 / 信号量隔离,无精细化限流
控制台原生自带,监控完善仅基础监控,功能简陋
性能轻量、低损耗线程池隔离开销大
生态SpringCloud/Dubbo/Gateway 全适配仅 Spring Cloud 原生适配
扩展SPI 高度可定制扩展能力弱

选型结论:国内微服务、Spring Cloud Alibaba 体系优先 Sentinel。

六、快速接入(SpringBoot 极简示例)

  1. 引入 Maven 依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  1. 配置控制台地址 application.yml
spring:
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8080 # 控制台地址
        port: 8719 # 客户端与控制台通信端口
  1. 自定义资源埋点(注解方式)
@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 "访问过于频繁,请稍后重试";
    }
}
  1. 启动控制台 Jar
java -jar sentinel-dashboard-1.8.6.jar

访问 localhost:8080 即可在线配置规则、查看监控。

七、生产最佳实践要点

  1. 规则持久化:对接 Nacos,规则存配置中心,服务重启不丢失;
  2. 集群限流:多实例部署时使用集群限流,全局统一阈值;
  3. 分级降级:区分限流、熔断、系统过载,返回不同友好提示;
  4. 预热限流:接口冷启动配置预热,避免刚上线瞬间打满流量;
  5. 热点限流:秒杀、商品查询接口必配热点参数防护;
  6. 网关层统一防护:Spring Cloud Gateway 接入 Sentinel,前置全局限流;
  7. 监控告警:对接 Prometheus+Grafana,拦截量突增触发告警。