Sentinel
Sentinel 是阿里巴巴开源的面向分布式服务架构的流量控制组件,以流量为切入点,从流量控制(限制每秒请求数或并发线程数)、熔断降级(故障时切断请求防止雪崩)、系统负载保护等多个维度保护服务稳定性。
适用场景:微服务架构的流量控制、高并发系统的熔断降级、秒杀/抢购等流量突增场景。
提示
阿里巴巴开源的流量控制组件,支持熔断降级和系统自适应保护
核心概念
| 概念 | 说明 |
|---|---|
| 资源 | 需要保护的内容,可以是方法、接口或代码块 |
| 规则 | 针对资源定义的流控、降级、热点等策略 |
核心功能
| 功能 | 说明 |
|---|---|
| 流量控制 | 限制 QPS(每秒请求数)或并发线程数 |
| 熔断降级 | 基于慢调用比例(响应慢的请求占比)、异常比例、异常数熔断 |
| 系统自适应保护 | 从 CPU、Load(系统负载)、RT(响应时间)等维度保护系统 |
| 热点参数限流 | 针对热点参数(如商品ID、用户ID)进行限流 |
| 权限控制 | 支持黑白名单控制 |
快速开始
引入依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>基本使用:
@RestController
public class TestController {
@GetMapping("/test")
@<mark>Sentinel</mark>Resource(value = "test", fallback = "fallback")
public String test() {
return "OK";
}
public String fallback(Throwable e) {
return "降级返回";
}
}流量控制
流控模式
| 模式 | 说明 |
|---|---|
| 直接 | 针对当前资源直接限流 |
| 关联 | 当关联资源达到阈值时,限制当前资源 |
| 链路 | 只统计从指定入口进来的流量 |
流控效果
| 效果 | 说明 |
|---|---|
| 快速失败 | 直接拒绝,抛出异常 |
| Warm Up | 预热(QPS 从阈值/冷加载因子开始逐步提升,避免冷启动时流量突增) |
| 排队等待 | 匀速排队(请求排队等待,超时则失败),超时则失败 |
熔断降级
| 策略 | 说明 | 适用场景 |
|---|---|---|
| 慢调用比例 | 慢调用比例超过阈值触发熔断 | 长时间调用 |
| 异常比例 | 异常比例超过阈值触发熔断 | 稳定性监控 |
| 异常数 | 异常数超过阈值触发熔断 | 突发异常 |
控制台
Sentinel 提供 Web 控制台进行规则配置和实时监控:
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080与 Hystrix 对比
| 维度 | Sentinel | Hystrix |
|---|---|---|
| 线程模型 | 信号量隔离(不创建新线程,开销低) | 线程池隔离(创建新线程,开销高) |
| 熔断策略 | 慢调用/异常比例/异常数 | 异常比例 |
| 流控 | QPS/并发线程数 | 无 |
| 控制台 | 实时监控+规则配置 | 仅监控 |
| 维护状态 | 活跃 | 停止维护 |
常见问题处理
规则不生效
- 检查
@SentinelResource注解是否正确 - 确认 Sentinel Dashboard 是否正常运行
- 检查规则是否推送到应用
误熔断
- 调整熔断阈值:慢调用比例阈值、异常比例阈值
- 增加熔断时长:
timeWindow参数 - 检查下游服务响应时间