Sentinel 教程
欢迎学习 Sentinel!本教程将带你从零基础开始,全面掌握阿里巴巴开源的流量控制组件。
什么是 Sentinel?
Sentinel 是阿里巴巴开源的面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度帮助开发者保障微服务的稳定性。
核心定位
Sentinel 的核心思想是将"流量"作为保障系统稳定性的切入点。在分布式系统中,服务之间的调用关系错综复杂,一个服务的稳定性问题往往会引发连锁反应,导致整个系统雪崩。Sentinel 通过对流量进行精细化控制,在系统面临高并发、不稳定依赖等场景时提供保护。
Sentinel 与 Hystrix 的对比
在 Sentinel 出现之前,Netflix 的 Hystrix 是最流行的熔断降级组件。Sentinel 相比 Hystrix 有以下优势:
| 特性 | Sentinel | Hystrix |
|---|---|---|
| 隔离策略 | 信号量隔离 | 线程池隔离/信号量隔离 |
| 熔断降级策略 | 基于响应时间、异常比例、异常数 | 基于异常比例 |
| 实时监控 | 可视化控制台,实时监控 | 简单监控 |
| 动态规则配置 | 支持多种数据源 | 需要结合配置中心 |
| 控制台 | 提供开箱即用的控制台 | 不完善 |
| 流量控制 | QPS 限流、并发线程数限流 | 不支持 |
| 热点参数限流 | 支持 | 不支持 |
| 系统自适应保护 | 支持 | 不支持 |
| 维护状态 | 活跃开发中 | 停止维护(进入维护模式) |
Sentinel 的应用场景
Sentinel 承接了阿里巴巴近 10 年双十一大促流量的核心场景,应用场景非常丰富:
1. 秒杀场景
在秒杀活动中,瞬时流量可能达到平时流量的几十倍甚至上百倍。如果不进行流量控制,系统很容易被冲垮。Sentinel 可以通过 QPS 限流,将流量控制在系统可承受的范围内。
2. 消息削峰填谷
在消息队列场景中,可能存在消息堆积的情况。Sentinel 的匀速排队模式可以让消息以均匀的速度被处理,避免系统被突发流量压垮。
3. 服务熔断降级
当依赖的下游服务出现故障时,响应时间变长或错误率升高,如果不进行熔断,会导致自身服务的线程池被耗尽。Sentinel 可以自动熔断不稳定的调用,防止故障蔓延。
4. 集群流量控制
在分布式环境中,单机的限流可能无法满足整体控制的需求。Sentinel 支持集群流量控制,可以在集群维度进行统一的流量控制。
5. 热点参数限流
某些场景下,需要对特定的参数值进行精细化限流。例如,对热门商品 ID 进行限流,而对普通商品不限流。
Sentinel 核心概念
资源
资源是 Sentinel 的核心概念,可以是代码中的一个方法、一段代码块,或者一个 HTTP 接口。只要通过 Sentinel API 定义的资源,都可以进行流量控制、熔断降级等操作。
定义资源的方式:
// 方式一:使用 SphU.entry() 定义资源
Entry entry = null;
try {
entry = SphU.entry("resourceName");
// 业务逻辑
} catch (BlockException e) {
// 被限流或降级的处理逻辑
} finally {
if (entry != null) {
entry.exit();
}
}
// 方式二:使用 @SentinelResource 注解
@SentinelResource(value = "resourceName", blockHandler = "handleBlock")
public String doSomething() {
// 业务逻辑
return "success";
}
public String handleBlock(BlockException e) {
return "blocked";
}
规则
规则定义了对资源的保护策略,主要包括以下几种类型:
- 流量控制规则(FlowRule):控制资源的访问 QPS 或并发线程数
- 熔断降级规则(DegradeRule):当资源响应时间或异常率达到阈值时进行熔断
- 系统保护规则(SystemRule):从系统维度保护应用,如 CPU 使用率、系统 Load 等
- 热点参数规则(ParamFlowRule):针对特定参数值进行限流
- 授权规则(AuthorityRule):根据调用来源进行黑白名单控制
Slot Chain
Sentinel 的工作原理是通过 Slot Chain(插槽链)来实现的。每个资源都会对应一个 Slot Chain,请求进入资源时会依次经过各个 Slot 进行处理:
请求 -> NodeSelectorSlot -> ClusterBuilderSlot -> LogSlot -> StatisticSlot -> FlowSlot -> DegradeSlot -> SystemSlot -> AuthoritySlot -> 业务逻辑
主要 Slot 的作用:
- NodeSelectorSlot:负责收集资源的调用路径,构建调用链路树
- ClusterBuilderSlot:构建集群节点,用于存储集群维度的统计数据
- StatisticSlot:实时统计请求信息,如 QPS、响应时间、异常数等
- FlowSlot:根据流量控制规则进行限流判断
- DegradeSlot:根据熔断降级规则进行熔断判断
- SystemSlot:根据系统保护规则进行系统级保护
- AuthoritySlot:根据授权规则进行来源访问控制
Sentinel 架构
Sentinel 分为两个部分:
核心库(Java 客户端)
核心库不依赖任何框架或库,能够运行于所有 Java 运行时环境。核心库提供了流量控制、熔断降级、系统保护等核心功能。
控制台(Dashboard)
控制台基于 Spring Boot 开发,提供可视化的监控和规则管理功能。通过控制台,可以实时查看资源的运行情况,动态配置规则。
教程目录
入门指南
- 快速开始 - 5 分钟快速上手 Sentinel
核心功能
控制台与整合
- 控制台 - Sentinel 控制台的部署和使用
- Spring Cloud 整合 - 与 Spring Cloud Alibaba 整合
知识速查
- 速查表 - Sentinel 常用配置和命令速查
学习建议
- 理解核心概念:资源、规则、Slot Chain 是 Sentinel 的核心,理解这些概念是学习 Sentinel 的基础
- 动手实践:搭建本地环境,实际配置各种规则,观察效果
- 结合场景学习:将 Sentinel 的功能与实际业务场景结合,理解其应用价值
- 阅读源码:对于进阶学习者,阅读源码可以深入理解 Sentinel 的实现原理
参考资料
准备好开始学习了吗?点击下一章开始你的 Sentinel 学习之旅!