Sentinel 是阿里巴巴开源的一款轻量级流量控制组件,专注于解决分布式系统中的流量失控、服务稳定性问题,核心能力包括流量控制、熔断降级、系统保护等。其设计理念是“流量即资源”,通过对资源的精细化管控,保障系统在高并发、异常场景下的稳定性。
一、核心能力与应用场景
Sentinel 的核心价值在于:
- 流量控制:限制接口/服务的 QPS 或并发线程数,防止流量突增击垮系统(如秒杀、大促场景)。
- 熔断降级:当依赖的服务出现异常(如响应慢、错误率高)时,自动“熔断”调用,避免故障扩散(如第三方支付接口超时)。
- 系统保护:从整体维度监控系统指标(CPU、负载、总 QPS 等),防止全系统资源耗尽。
- 来源控制:基于调用来源(如 IP、服务名)实现黑白名单管控(如禁止恶意 IP 访问)。
适用场景:微服务接口保护、API 网关限流、数据库访问控制、第三方服务调用熔断等。
二、快速入门步骤
以 Spring Boot 项目为例,快速集成 Sentinel 并实现流量控制:
1. 引入依赖
在 pom.xml 中添加 Sentinel 核心依赖和 Spring Boot 适配依赖:
<!-- Sentinel 核心包 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.6</version> <!-- 版本可按需选择 -->
</dependency>
<!-- Spring Boot 自动配置 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2021.0.5.0</version> <!-- 需与 Spring Cloud 版本匹配 -->
</dependency>
2. 启动 Sentinel 控制台
控制台是可视化配置规则、监控流量的工具,步骤如下:
- 下载 sentinel-dashboard.jar(选择 1.8.x 稳定版)。
- 启动控制台(默认端口 8080,账号密码均为
sentinel):java -jar sentinel-dashboard-1.8.6.jar --server.port=8080 - 访问
http://localhost:8080,登录后进入控制台界面。
3. 配置应用与控制台通信
在 Spring Boot 项目的 application.yml 中,指定控制台地址,让应用将数据上报至控制台:
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080 # 控制台地址
port: 8719 # 应用与控制台通信的端口(默认8719,自动递增)
4. 定义需要保护的“资源”
资源是 Sentinel 保护的对象(如接口、方法),通过注解或 API 定义:
方式 1:注解方式(推荐,适合 Spring 项目)
使用 @SentinelResource 注解标记资源,并指定限流/熔断后的处理方法:
@RestController
public class OrderController {
// 定义资源名为 "createOrder",blockHandler 处理限流/熔断触发的异常
@SentinelResource(value = "createOrder", blockHandler = "handleCreateOrderBlock")
@GetMapping("/order/create")
public String createOrder() {
return "订单创建成功";
}
// 限流/熔断的降级处理方法(参数、返回值需与原方法一致,额外加 BlockException 参数)
public String handleCreateOrderBlock(BlockException e) {
return "当前订单请求过多,请稍后再试!";
}
}
方式 2:API 方式(通用,适合非 Spring 项目)
通过 SphU.entry() 和 SphU.exit() 手动标记资源范围:
public void processPayment() {
// 标记资源 "processPayment"
Entry entry = null;
try {
entry = SphU.entry("processPayment");
// 业务逻辑:处理支付
System.out.println("处理支付中...");
} catch (BlockException e) {
// 限流/熔断时执行
System.out.println("支付请求被限流!");
} finally {
if (entry != null) {
entry.exit(); // 释放资源
}
}
}
5. 配置流量控制规则
启动应用后,访问一次 http://localhost:8080/order/create(触发资源注册),然后在 Sentinel 控制台配置规则:
- 左侧菜单选择 流量控制,点击 新增流控规则。
- 配置规则参数:
- 资源名:填写
createOrder(与注解中value一致)。 - 阈值类型:选择 QPS(每秒请求数)。
- 阈值:设置为
5(每秒最多允许 5 次请求)。 - 其他参数默认(直接限流当前资源)。
- 资源名:填写
- 点击 新增,规则立即生效。
6. 测试限流效果
用工具(如 Postman、Apache JMeter)每秒发送 10 次请求到 /order/create:
- 前 5 次请求返回 “订单创建成功”。
- 超过 5 次的请求返回 “当前订单请求过多,请稍后再试!”,说明限流规则生效。
三、核心概念速览
- 资源(Resource):被保护的业务单元(接口、方法等),通过名称唯一标识。
- 规则(Rule):控制策略,包括流量控制、熔断降级、系统保护等规则。
- 上下文(Context):标记一次调用链路的元数据(如调用来源),用于精细化控制。
- 控制台(Dashboard):可视化管理界面,用于配置规则、查看监控数据。
四、进阶方向
- 熔断降级配置:在控制台配置“熔断降级规则”,当接口错误率超过阈值时自动熔断。
- 规则持久化:将规则存储到 Nacos/Apollo 配置中心,避免应用重启后规则丢失。
- 自定义限流策略:通过实现
RateLimiter接口,定义业务专属的限流逻辑(如基于用户等级的动态阈值)。
Sentinel 入门的核心是理解“资源定义-规则配置-效果验证”的闭环,通过控制台的可视化操作,能快速上手并验证其流量控制能力。