Sentinel:流量防卫兵/熔断降级

一、简介

Sentinel 是阿里巴巴开源、面向分布式微服务的流量治理组件 ,以流量 为切入点,实现限流、熔断降级、系统保护,保障服务稳定性,承接阿里多年双 11 大促流量防护场景。 GitHub:https://github.com/alibaba/Sentinel 官网:https://sentinelguard.io/
定位:不止熔断,是一套完整流量防护体系;Spring Cloud Alibaba 标配组件,替代已停止维护的 Hystrix。

二、五大核心能力

1. 流量控制(FlowRule)

限制资源访问速率,防止突发流量打垮服务。

  • 阈值类型:QPS(每秒请求数)、并发线程数

  • 流控策略:直接限流、关联限流、链路限流

  • 流控效果(流量整形)

    • 直接拒绝(默认):超过阈值立即拒绝

    • Warm Up 预热:冷启动缓慢抬升阈值,保护刚启动服务

    • 匀速排队(漏桶):固定速率放行,削峰填谷,适合秒杀

2. 熔断降级(DegradeRule)

下游服务不稳定时,快速失败,防止服务雪崩。支持3 种熔断策略

  1. 慢调用比例:超过最大 RT 的请求占比超标(下游接口变慢)

  2. 异常比例:异常请求占比超标

  3. 异常数:单位窗口异常总数超标(低流量场景)

熔断状态:Closed → Open → Half-Open

Open:直接拒绝;时间窗结束进入半开,探测一次请求;成功则恢复,失败继续熔断。

3. 热点参数限流(HotParamRule)

细粒度限流:针对请求参数值限流 例:限制商品 ID=1001 每秒最多访问 5 次,不影响其他商品;防 "热点商品、单个用户刷接口"。

4. 系统自适应保护(SystemRule)

整机维度防护,根据 CPU 负载、平均 RT、入口 QPS、线程数自适应限流,防止服务器整体被打挂。

5. 权限控制(AuthorityRule)

黑白名单:根据调用方 origin 来源,允许 / 拒绝访问资源。

三、核心概念

  1. 资源 Resource 被保护对象:接口、方法、代码块(@SentinelResource、SphU API 定义)

  2. 规则 Rule 流控 / 降级 / 热点 / 系统 / 权限规则,支持动态推送

  3. Slot Chain(责任链) Sentinel 底层核心流水线:请求依次经过统计、限流、熔断等插槽

  4. 滑动窗口 指标统计底层实现,默认 1s 窗口,记录 QPS、异常数、RT,用于实时判断是否触发规则

四、@SentinelResource 常用注解

复制代码
@SentinelResource(
    value = "resourceName",          // 资源名(必须)
    blockHandler = "handleBlock",    // 限流/熔断触发(BlockException)
    fallback = "handleFallback"      // 业务异常兜底
)
  • blockHandler:限流、熔断、权限拒绝触发

  • fallback:业务代码抛出异常兜底(不包含限流异常)

五、Sentinel Dashboard 控制台

可视化面板,能力:

  • 实时秒级监控、簇点链路查看调用树

  • 在线编辑各类防护规则,动态推送到应用

⚠️ 默认内存规则 :应用重启规则丢失;生产必须对接持久化数据源:Nacos / Apollo / ZooKeeper / Redis

六、Sentinel vs Hystrix(高频面试)

|-------|----------------------------|--------------------|
| 对比项 | Sentinel | Hystrix |
| 维护状态 | 持续活跃维护 | Netflix 官方停止维护 |
| 隔离方式 | 信号量隔离(并发线程数限流) | 线程池隔离 + 信号量 |
| 核心能力 | 限流 + 熔断 + 热点 + 系统保护 + 流量整形 | 仅熔断降级,限流能力弱 |
| 熔断策略 | 慢调用比例 / 异常比例 / 异常数 3 种 | 仅失败比例 |
| 流量整形 | 预热、匀速排队 | 不支持 |
| 控制台 | 功能完备,实时监控 + 动态规则 | 简陋 |
| 规则持久化 | 原生支持 Nacos 等 | 需自行实现 |

核心结论:新项目微服务优先 Sentinel。

七、简单 SpringBoot 接入示例

1. 依赖

复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2. 配置

复制代码
spring:
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8080 #控制台地址
        port: 8719 #客户端通信端口

spring: cloud: sentinel: transport: dashboard: 127.0.0.1:8080 #控制台地址 port: 8719 #客户端通信端口

3. 代码

复制代码
@RestController
public class DemoController {
    @GetMapping("/hello")
    @SentinelResource(value = "helloResource", blockHandler = "blockHandler")
    public String hello(){
        return "ok";
    }
    //限流/熔断兜底
    public String blockHandler(BlockException e){
        return "访问过于频繁,请稍后重试";
    }
}

八、生产常见问题

  1. 规则重启丢失:必须接入 Nacos 持久化

  2. Feign 调用不生效:开启 feign.sentinel.enabled=true

  3. 全局异常处理器吞异常 → Sentinel 无法统计业务异常

  4. 区分 blockHandlerfallback 使用场景

  5. 集群限流:单机限流无法应对多实例,开启集群流控

相关推荐
多敲代码防脱发6 天前
Alibaba Sentinel(熔断、限流)(国内下载Sentinel)
java·开发语言·sentinel
2601_962181969 天前
【Spring Cloud Alibaba】Sentinel 服务熔断与流量控制
sentinel
lv__pf11 天前
Sentinel【TL微服务10、11】
java·微服务·sentinel
凤山老林11 天前
高可靠 API 网关架构:Spring Cloud Gateway 集成 Sentinel 实现智能限流、动态路由与安全管控
安全·spring cloud·架构·sentinel
就叫_这个吧13 天前
java springcloud熔断降级组件sentinel基础应用及nacos持久化处理
java·spring cloud·nacos·sentinel
aikopen13 天前
高可用 API 网关限流与微服务过载保护实战:从 Sentinel 动态阈值到 DB 连接池舱壁
数据库·微服务·sentinel
ruleslol16 天前
Sentinel限流
sentinel
肠畔码农16 天前
高可用底座:Redis 哨兵机制(Sentinel)底层内核拆解
redis·bootstrap·sentinel
LayZhangStrive21 天前
后端通识 - 远程服务调用RPC
网络·网络协议·rpc·sentinel·openfeign·远程服务调用