跳到主要内容

Sentinel 教程

欢迎学习 Sentinel!本教程将带你从零基础开始,全面掌握阿里巴巴开源的流量控制组件。

什么是 Sentinel?

Sentinel 是阿里巴巴开源的面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度帮助开发者保障微服务的稳定性。

核心定位

Sentinel 的核心思想是将"流量"作为保障系统稳定性的切入点。在分布式系统中,服务之间的调用关系错综复杂,一个服务的稳定性问题往往会引发连锁反应,导致整个系统雪崩。Sentinel 通过对流量进行精细化控制,在系统面临高并发、不稳定依赖等场景时提供保护。

Sentinel 与 Hystrix 的对比

在 Sentinel 出现之前,Netflix 的 Hystrix 是最流行的熔断降级组件。Sentinel 相比 Hystrix 有以下优势:

特性SentinelHystrix
隔离策略信号量隔离线程池隔离/信号量隔离
熔断降级策略基于响应时间、异常比例、异常数基于异常比例
实时监控可视化控制台,实时监控简单监控
动态规则配置支持多种数据源需要结合配置中心
控制台提供开箱即用的控制台不完善
流量控制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 开发,提供可视化的监控和规则管理功能。通过控制台,可以实时查看资源的运行情况,动态配置规则。

教程目录

入门指南

核心功能

控制台与整合

知识速查

  • 速查表 - Sentinel 常用配置和命令速查

学习建议

  1. 理解核心概念:资源、规则、Slot Chain 是 Sentinel 的核心,理解这些概念是学习 Sentinel 的基础
  2. 动手实践:搭建本地环境,实际配置各种规则,观察效果
  3. 结合场景学习:将 Sentinel 的功能与实际业务场景结合,理解其应用价值
  4. 阅读源码:对于进阶学习者,阅读源码可以深入理解 Sentinel 的实现原理

参考资料

准备好开始学习了吗?点击下一章开始你的 Sentinel 学习之旅!