文章目录
-
-
- 一、核心定位与价值
- 二、与同类工具的对比(Hystrix)
- 三、核心功能
-
- [1. 流量控制(Flow Control)](#1. 流量控制(Flow Control))
- [2. 熔断降级(Circuit Breaking)](#2. 熔断降级(Circuit Breaking))
- [3. 系统负载保护(System Protection)](#3. 系统负载保护(System Protection))
- [4. 热点参数限流(Hot Parameter Flow Control)](#4. 热点参数限流(Hot Parameter Flow Control))
- [5. 实时监控与动态规则](#5. 实时监控与动态规则)
- 四、核心概念
- 五、工作原理
- 六、简单使用示例
-
- [1. 引入依赖(Spring Cloud Alibaba)](#1. 引入依赖(Spring Cloud Alibaba))
- [2. 定义受保护的资源(注解方式)](#2. 定义受保护的资源(注解方式))
- [3. 配置 Sentinel 控制台](#3. 配置 Sentinel 控制台)
- [4. 配置限流规则](#4. 配置限流规则)
- 七、适用场景
- 总结
-
Sentinel 是阿里巴巴开源的一款 分布式系统流量控制工具 ,核心目标是 保障微服务架构的稳定性 。它以"流量"为切入点,提供了流量控制、熔断降级、系统负载保护、热点参数限流等功能,可无缝集成到 Spring Cloud、Dubbo、Spring Boot 等主流框架,是微服务高可用保障的核心组件之一。
一、核心定位与价值
在微服务架构中,服务间依赖复杂,某一环节故障(如流量突增、服务响应慢)可能引发"雪崩效应"(级联失败)。Sentinel 的核心价值在于:
- 当系统面临流量激增(如秒杀、促销)时,通过限流防止服务被压垮;
- 当依赖的服务不可用(如超时、异常)时,通过熔断降级快速失败,避免资源耗尽;
- 实时监控系统运行状态,动态调整规则,保障系统在可控范围内稳定运行。
二、与同类工具的对比(Hystrix)
| 特性 | Sentinel | Hystrix(已停止维护) |
|---|---|---|
| 核心能力 | 流量控制、熔断降级、系统保护、热点限流等(更全面) | 熔断降级、线程隔离(功能相对单一) |
| 规则配置 | 支持动态配置(控制台、API、配置中心),实时生效 | 主要通过代码配置,动态调整较复杂 |
| 监控能力 | 内置实时监控面板,支持秒级数据统计 | 需结合 Turbine、Dashboard,配置复杂 |
| 性能 | 轻量级,基于 Netty 异步处理,性能损耗低 | 基于线程池隔离,性能损耗较高 |
| 生态集成 | 无缝集成 Spring Cloud、Dubbo、K8s 等 | 集成范围较窄,社区支持减弱 |
三、核心功能
Sentinel 的功能围绕"流量治理"展开,核心包括以下模块:
1. 流量控制(Flow Control)
- 作用:限制接口/服务的请求QPS(每秒查询率)或并发线程数,防止流量超过系统承载能力。
- 常见策略 :
- 直接限流:对目标资源直接限制QPS(如限制接口每秒最多100次请求);
- 关联限流:当A接口流量过大时,限制关联的B接口(如"下单"接口过载时,限制"查询商品"接口);
- 链路限流:只限制某条调用链路的流量(如限制"从订单服务调用用户服务"的流量,不限制其他链路)。
2. 熔断降级(Circuit Breaking)
- 作用:当依赖的服务出现高频错误(如超时、异常)时,暂时"熔断"调用,避免持续失败导致资源耗尽,待服务恢复后再逐步放开。
- 熔断策略 :
- 基于失败率:当失败率超过阈值(如50%)且请求数达到最小阈值(如100次),触发熔断;
- 基于响应时间:当慢调用比例超过阈值(如50%的请求响应时间>500ms),触发熔断;
- 熔断状态:
OPEN(熔断中,直接拒绝请求)→HALF-OPEN(尝试恢复,允许部分请求)→CLOSED(正常调用)。
3. 系统负载保护(System Protection)
- 作用:从系统整体维度防止过载,而非单一接口。当系统负载(如CPU使用率、内存占用)过高时,限制入口流量,保障系统核心功能可用。
- 策略:基于系统CPU使用率、平均负载、入口QPS等指标动态调整流量,优先保障核心服务。
4. 热点参数限流(Hot Parameter Flow Control)
- 作用:对接口中"热点参数"(如高频访问的商品ID、用户ID)单独限流,避免某一参数值的请求占满全部流量。
- 示例 :接口
/goods/{id}中,id=100的请求占比极高,可单独限制id=100的QPS为50,其他ID不受限。
5. 实时监控与动态规则
- 实时监控:通过控制台实时查看接口QPS、响应时间、异常率等指标,支持秒级数据刷新。
- 动态规则:规则(限流、降级等)可通过控制台、Nacos/Apollo配置中心、API等方式动态修改,无需重启服务。
四、核心概念
理解 Sentinel 的核心概念是掌握其工作原理的关键:
| 概念 | 含义说明 |
|---|---|
| 资源(Resource) | 被 Sentinel 保护的对象,可是一个接口、方法、服务,甚至一段代码。通常通过注解 @SentinelResource 或代码埋点定义。 |
| 规则(Rule) | 对资源的控制策略,包括流量控制规则、熔断降级规则、系统保护规则等。规则可动态配置,实时生效。 |
| 插槽链(Slot Chain) | Sentinel 的核心骨架,由一系列插槽(Slot)组成,每个插槽负责特定功能(如统计、限流、降级)。请求进入时,会依次经过插槽链,执行相应逻辑。 |
| 上下文(Context) | 封装了调用链路的元数据(如调用来源、当前资源),用于区分不同的调用场景。 |
五、工作原理
Sentinel 的工作流程可概括为"资源定义→流量统计→规则检查→结果处理",核心依赖"插槽链"机制:
- 资源定义 :通过注解(
@SentinelResource)或代码(SphU.entry("resourceName"))标记需要保护的资源(如接口方法)。 - 流量拦截与统计 :当请求进入资源时,Sentinel 拦截请求,通过
StatisticSlot插槽统计该资源的实时指标(QPS、响应时间、异常数等)。 - 规则检查 :请求依次经过各功能插槽(如
FlowSlot检查限流规则、DegradeSlot检查熔断规则),若触发规则(如QPS超限),则直接拒绝请求并执行降级逻辑。 - 结果处理:若通过规则检查,允许请求执行资源逻辑;若被拦截,执行预设的降级策略(如返回默认值、抛出异常)。
六、简单使用示例
1. 引入依赖(Spring Cloud Alibaba)
xml
<!-- Sentinel 核心依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2. 定义受保护的资源(注解方式)
java
@RestController
public class OrderController {
// 用 @SentinelResource 标记资源,指定降级方法
@SentinelResource(value = "createOrder", fallback = "createOrderFallback")
@PostMapping("/order")
public String createOrder() {
// 业务逻辑:创建订单(可能依赖其他服务)
return "订单创建成功";
}
// 降级方法:当资源被限流/熔断时执行
public String createOrderFallback() {
return "当前订单量过大,请稍后再试";
}
}
3. 配置 Sentinel 控制台
-
下载 Sentinel 控制台 并启动(默认端口 8080):
bashjava -jar sentinel-dashboard-1.8.6.jar -
项目配置控制台地址(
application.yml):yamlspring: cloud: sentinel: transport: dashboard: localhost:8080 # 控制台地址
4. 配置限流规则
- 访问控制台
http://localhost:8080(默认账号密码sentinel/sentinel); - 在"簇点链路"中找到资源
createOrder,点击"流控",配置规则(如QPS=10); - 当请求QPS超过10时,自动触发降级,返回
createOrderFallback方法的结果。
七、适用场景
- 秒杀/促销限流:限制下单接口的QPS,防止流量峰值压垮系统;
- 服务熔断降级:当支付服务超时/异常时,熔断调用,返回"支付暂时不可用";
- 热点参数保护:限制高频商品ID的查询流量,避免缓存击穿;
- 系统负载控制:当CPU使用率超过80%时,限制非核心接口(如"商品评价")的流量。
总结
Sentinel 以"流量治理"为核心,通过流量控制、熔断降级等功能保障微服务稳定性,具有轻量级、功能全面、动态配置、易集成等优势。它填补了 Hystrix 停止维护后的空白,成为 Spring Cloud 生态中微服务高可用保障的首选工具。