Sentinel 详细使用指南(从入门到进阶)
Sentinel 是阿里巴巴开源的分布式系统流量治理平台,核心能力覆盖流量控制、熔断降级、系统保护、授权控制、热点限流等,旨在解决微服务架构下的流量过载、级联故障等问题。本指南将从核心原理、环境部署、客户端接入、规则配置、进阶特性到生产实践,全方位详细讲解 Sentinel 的使用。
一、核心原理与架构
在使用前需理解 Sentinel 的底层逻辑,避免配置踩坑:
1. 核心架构
Sentinel 分为 控制台(Dashboard) 和 客户端(应用接入) 两部分:
- 控制台:负责规则配置、监控数据展示、集群管理,不参与业务流量处理。
- 客户端:嵌入应用内部,通过
Slot 链实现流量控制、熔断等核心逻辑(Slot 是 Sentinel 的核心扩展点,按顺序执行)。
2. Slot 链执行顺序(关键)
客户端的核心逻辑通过 Slot 链串联,执行顺序固定:
NodeSelectorSlot(构建调用链)→ ClusterBuilderSlot(集群统计)→ LogSlot(日志记录)→
StatisticSlot(指标统计,核心:收集 QPS、异常率等数据)→ AuthoritySlot(授权控制)→
SystemSlot(系统保护)→ FlowSlot(流量控制)→ DegradeSlot(熔断降级)→ HotSpotSlot(热点限流)
规则生效依赖对应 Slot,例如:流控规则由 FlowSlot 执行,熔断规则由 DegradeSlot 执行。
3. 核心概念补充
| 概念 | 说明 |
|---|---|
| 资源 | 被保护的对象(接口、方法、URL 等),需通过注解 / 代码显式标记。 |
| 规则 | 对资源的控制策略(流控、熔断等),支持动态配置、实时生效。 |
| 簇点 | 已被 Sentinel 监控的资源(懒加载,资源首次被调用后才会显示在控制台)。 |
| 调用链 | 资源的调用路径(如 A 接口 → B 方法 → C 服务),支持链路级规则配置。 |
| 令牌桶 / 漏桶 | 流量控制的底层算法(Sentinel 默认用令牌桶,排队等待模式用漏桶)。 |
| 半开状态 | 熔断后的恢复阶段,允许少量请求尝试,成功则恢复正常,失败则重新熔断。 |
二、环境部署(控制台 + 客户端)
1. 控制台部署(生产级)
控制台是可视化管理中心,支持多环境部署(单机 / 集群),以下是生产可用的部署方案:
(1)下载控制台
从 Sentinel GitHub Release 下载最新稳定版(推荐 1.8.x 及以上),文件格式为 sentinel-dashboard-xxx.jar。
(2)启动参数配置(关键)
默认启动仅适合测试,生产需配置端口、账号密码、日志、集群等参数:
java -jar sentinel-dashboard-1.8.6.jar \
--server.port=8080 \ # 控制台端口(默认8080)
--sentinel.dashboard.auth.username=admin \ # 登录用户名(默认sentinel)
--sentinel.dashboard.auth.password=123456 \ # 登录密码(默认sentinel)
--logging.file.name=/data/logs/sentinel/dashboard.log \ # 日志路径
--sentinel.api.port=8719 \ # 客户端通信端口(默认8719,集群需统一)
--spring.datasource.url=jdbc:mysql://localhost:3306/sentinel?useSSL=false \ # 持久化数据源(可选)
--spring.datasource.username=root \
--spring.datasource.password=root \
--spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- 端口说明:8080 是控制台 Web 端口,8719 是客户端与控制台的通信端口(客户端需配置此端口)。
- 日志配置:建议指定日志路径,便于问题排查。
(3)控制台集群部署(高可用)
生产环境需避免控制台单点故障,支持多实例集群:
- 多个控制台实例使用相同的数据源(如 MySQL、Nacos),确保规则同步。
- 客户端配置多个控制台地址(用逗号分隔):
spring: cloud: sentinel: transport: dashboard: 192.168.1.100:8080,192.168.1.101:8080
2. 客户端接入(多框架适配)
Sentinel 支持 Java 原生、Spring Boot、Spring Cloud、Dubbo、Gateway 等多种框架,以下是最常用的接入方案:
(1)Spring Boot 接入(基础版)
步骤 1:引入依赖
<!-- Sentinel 核心依赖 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.6</version> <!-- 与控制台版本一致 -->
</dependency>
<!-- 注解支持(@SentinelResource) -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-annotation-aspectj</artifactId>
<version>1.8.6</version>
</dependency>
<!-- 控制台通信依赖 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.8.6</version>
</dependency>
步骤 2:配置控制台地址
在 application.yml 中配置:
spring:
application:
name: sentinel-demo # 应用名(控制台显示用)
# Sentinel 配置
sentinel:
transport:
dashboard: 192.168.1.100:8080 # 控制台地址
port: 8719 # 客户端通信端口(默认8719,被占用自动递增)
eager: true # 饥饿加载(默认懒加载,启动后立即初始化,避免首次调用不显示簇点)
步骤 3:启用注解支持
添加配置类,启用 @SentinelResource 注解:
import com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SentinelConfig {
// 启用 @SentinelResource 注解
@Bean
public SentinelResourceAspect sentinelResourceAspect() {
return new SentinelResourceAspect();
}
}
(2)Spring Cloud 接入(推荐,整合更友好)
Spring Cloud Alibaba 提供了专门的 Starter,简化接入:
步骤 1:引入依赖
<!-- Spring Cloud Alibaba Sentinel Starter -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.10.RELEASE</version> <!-- 适配 Spring Cloud 版本 -->
</de

1750

被折叠的 条评论
为什么被折叠?



