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. 集群限流:单机限流无法应对多实例,开启集群流控

相关推荐
LayZhangStrive21 小时前
后端通识 - 远程服务调用RPC
网络·网络协议·rpc·sentinel·openfeign·远程服务调用
她说可以呀4 天前
Sentinel 授权规则
开发语言·sentinel
她说可以呀4 天前
Sentinel 流控规则 · 流控模式
sentinel
她说可以呀5 天前
Sentinel 热点规则
sentinel
智码看视界5 天前
Day 45 | Sentinel流量治理:从限流到熔断降级再到系统自适应保护
sentinel·高并发·熔断降级·流量控制·微服务治理·热点参数限流
cfm_29146 天前
了解Sentinel
分布式·架构·sentinel
Bruce18016 天前
Sentinel 限流熔断学习:配置策略、限流算法对比与适用场景
sentinel
成为你的宁宁6 天前
【Sentinel部署与流量防护】
sentinel
952367 天前
Sentinel
java·后端·spring·sentinel·springcloud