文章目录
[1. 熔断机制:主动切断故障链路](#1. 熔断机制:主动切断故障链路)
[2. 隔离机制:避免资源竞争](#2. 隔离机制:避免资源竞争)
[3. 限流机制:控制流量入口](#3. 限流机制:控制流量入口)
[4. 降级机制:牺牲非核心,保核心](#4. 降级机制:牺牲非核心,保核心)
[5. 超时与重试控制:避免无限等待](#5. 超时与重试控制:避免无限等待)
[6. 服务治理与可观测性:提前发现并止损](#6. 服务治理与可观测性:提前发现并止损)
[二、Sentinel 核心定位与价值](#二、Sentinel 核心定位与价值)
[三、Sentinel 核心功能(四大核心能力)](#三、Sentinel 核心功能(四大核心能力))
[1. 流量控制:防止 "流量洪峰" 压垮服务](#1. 流量控制:防止 “流量洪峰” 压垮服务)
[2. 熔断降级:防止 "故障服务" 拖垮依赖链](#2. 熔断降级:防止 “故障服务” 拖垮依赖链)
[3. 系统自适应保护:防止 "整体系统" 过载](#3. 系统自适应保护:防止 “整体系统” 过载)
[4. 热点参数限流:精准拦截 "高频恶意请求"](#4. 热点参数限流:精准拦截 “高频恶意请求”)
[四、Sentinel 工作原理(核心概念)](#四、Sentinel 工作原理(核心概念))
[五、Sentinel 与 Hystrix 的对比(为何选 Sentinel?)](#五、Sentinel 与 Hystrix 的对比(为何选 Sentinel?))
[六、Sentinel 典型使用场景](#六、Sentinel 典型使用场景)
[1. 引入依赖](#1. 引入依赖)
[2. 启动 Sentinel 控制台](#2. 启动 Sentinel 控制台)
[3. 配置项目连接控制台](#3. 配置项目连接控制台)
[场景 1:流量控制(限制接口 QPS)](#场景 1:流量控制(限制接口 QPS))
[步骤 1:定义资源(标记需要保护的接口)](#步骤 1:定义资源(标记需要保护的接口))
[步骤 2:配置流量控制规则](#步骤 2:配置流量控制规则)
[步骤 3:测试限流效果](#步骤 3:测试限流效果)
[场景 2:熔断降级(保护依赖服务)](#场景 2:熔断降级(保护依赖服务))
[步骤 1:定义资源(标记调用下游服务的方法](#步骤 1:定义资源(标记调用下游服务的方法)
[步骤 2:配置熔断降级规则](#步骤 2:配置熔断降级规则)
[步骤 3:测试熔断效果](#步骤 3:测试熔断效果)
[使用 Sentinel 的核心流程是:](#使用 Sentinel 的核心流程是:)
前言
在微服务架构中,服务被拆分为独立、分布式的单元,彼此通过网络调用协作。这种架构虽提升了灵活性,但也引入了故障扩散、流量过载、安全漏洞、数据不一致 等风险。因此,微服务的保护 本质是:通过一系列技术手段和策略,保障微服务集群的可用性、安全性、可靠性,避免单个服务的问题影响整体系统,同时确保数据和接口的安全。微服务保护并非单一机制,而是覆盖 "服务运行、接口交互、数据存储、安全访问" 全链路的体系化方案。今天我们从雪崩问题及其解决方案来入手,简单的认识一款用来做微服务限流的技术栈------Sentienl.
一:雪崩问题及其解决方案
在微服务架构中,雪崩问题(Avalanche Effect)是指:当某个核心服务因故障(如超时、宕机、资源耗尽)不可用时,依赖它的上游服务会因持续等待或重试而耗尽自身资源(如线程池、连接池),进而导致上游服务也不可用;这种故障会沿着依赖链像多米诺骨牌一样扩散,最终引发整个微服务集群瘫痪的连锁反应。
1:雪崩问题的产生原因
雪崩的本质是 "故障扩散 + 资源耗尽 ",其触发往往是多个因素共同作用的结果,核心原因可归纳为以下 4 点:

服务器⽀持的线程和并发数有限,请求⼀直阻塞,会导致服务器资源耗尽,从⽽导致所有其它服务都不 可⽤,那么当前服务也就不可⽤了。 那么,依赖于当前服务的其它服务随着时间的推移,最终也都会变的不可⽤,形成级联失败,雪崩就发⽣了:

-
服务依赖链过长
微服务间依赖关系复杂(如 A→B→C→D),当最底层的 D 服务故障时,C 会因等待 D 的响应而阻塞,B 会因等待 C 而阻塞,最终 A 服务的线程资源被耗尽,失去处理新请求的能力。
-
流量突增与资源无隔离
若多个服务共享同一线程池 / 连接池,当某个服务因流量突增(如秒杀活动)占满资源时,其他服务会因 "抢不到资源" 而无法响应,例如:商品服务和订单服务共用线程池,商品服务的高并发请求占满线程,导致订单服务无线程可用。
-
无限制重试与超时失控
- 对故障服务的 "无限制重试" 会加剧资源消耗(如某服务已超时,仍反复重试,导致更多线程阻塞);
- 未设置合理的超时时间,请求会无限期等待(如调用支付服务未设超时,线程一直挂起,直至资源耗尽)。
-
单点故障未被及时隔离
当某个服务实例故障时,负载均衡仍将请求转发给它,导致大量请求失败,进而引发上游服务的连锁崩溃。
2、雪崩问题的解决方案
解决雪崩问题的核心思路是:"隔离故障、控制流量、快速失败、降级兜底",通过多层次机制阻断故障扩散路径,确保局部故障不影响整体系统。以下是具体解决方案:
1. 熔断机制:主动切断故障链路
原理 :当依赖服务的故障指标(如超时率、错误率)超过阈值时,触发 "熔断" 状态,暂时停止对该服务的调用,直接返回预设的 "降级响应"(如 "服务暂时不可用"),避免持续请求消耗资源。
类比:像电路中的保险丝,电流过大时自动断电,防止火灾。
关键机制:
- 熔断状态机通常包含 3 种状态:
- 闭合(Closed):正常调用依赖服务,实时统计故障指标;
- 打开(Open):故障指标超阈值时触发,拒绝所有请求,直接返回降级响应(如持续 5 秒);
- 半开(Half-Open):打开状态一段时间后进入,允许少量请求尝试调用,若成功则恢复闭合状态,否则继续保持打开。
典型实现:
- Resilience4j(轻量级,支持熔断 + 限流);
- Spring Cloud Hystrix(经典熔断组件,已停更但仍广泛使用);
- Sentinel(阿里开源,支持熔断 + 限流 + 降级一体化)。
场景:依赖第三方服务(如支付、短信)时,若第三方服务频繁超时,熔断可快速切断调用,避免本地服务线程阻塞。
2. 隔离机制:避免资源竞争
原理 :为不同服务(或接口)分配独立的资源池(线程池、连接池),实现 "资源隔离",防止单个服务的资源耗尽影响其他服务。
类比:轮船的 "防水舱",一个舱进水不影响其他舱。
常见隔离方式:
- 线程池隔离 :为每个依赖服务创建独立线程池(如调用支付服务用 "支付线程池",调用库存服务用 "库存线程池"),某线程池耗尽时,仅影响对应服务的调用,不波及其他线程池。
- 优点:隔离彻底,故障服务的阻塞线程不会影响其他服务;
- 缺点:线程切换有性能开销,适合核心服务。
- 信号量隔离 :通过信号量(计数器)限制并发调用数(如限制调用库存服务的并发量不超过 100),超过则拒绝请求。
- 优点:轻量无线程切换开销;
- 缺点:无法隔离阻塞(若服务调用卡住,信号量会一直被占用),适合非核心服务。
典型实现:
- Hystrix 默认支持线程池隔离;
- Resilience4j 支持信号量隔离(舱壁模式);
- Sentinel 支持信号量隔离。
3. 限流机制:控制流量入口
原理 :通过限制服务的请求量(QPS、并发数),确保服务不超过自身承载能力,避免因流量突增导致资源耗尽。
核心作用:从源头控制流量,防止 "过载" 成为雪崩的导火索。

常见限流策略:
- 服务级限流:限制单个服务的总 QPS(如订单服务每秒最多处理 1000 请求);
- 接口级限流:限制核心接口的 QPS(如 "下单接口" 每秒最多 500 请求);
- 用户 / IP 级限流:限制单个用户 / IP 的请求频率(如单用户每分钟最多 10 次下单,防恶意刷单);
- 分布式限流:基于 Redis 等中间件实现集群级限流(如全集群 "下单接口" 总 QPS 不超过 5000)。
典型实现:
- 网关层限流:Spring Cloud Gateway、Nginx(适合拦截流量入口);
- 应用层限流:Sentinel(支持细粒度接口限流)、Redis(基于令牌桶 / 漏桶算法)。
4. 降级机制:牺牲非核心,保核心
原理 :在系统压力过大(如 CPU / 内存超阈值)或服务故障时,主动关闭非核心功能 ,释放资源优先保障核心功能可用。
与熔断的区别 :熔断是 "被动触发"(依赖服务故障),降级是 "主动决策"(基于系统状态主动取舍)。
常见降级场景
- 流量高峰:电商秒杀时,关闭 "商品评价""推荐商品" 等非核心接口,只保留 "商品详情""下单";
- 资源不足:内存使用率超 90% 时,降级 "数据统计" 接口(返回缓存数据而非实时计算);
- 依赖故障:支付服务熔断后,降级为 "仅支持货到付款"。
实现方式:
- 配置中心动态开关(如 Apollo、Nacos):通过配置动态启用 / 禁用接口;
- 代码级降级:在接口中判断系统状态,触发降级逻辑(如
if (cpu > 80%) return 缓存数据
)。
5. 超时与重试控制:避免无限等待
超时控制:为所有服务调用设置明确的超时时间(如调用库存服务最多等待 2 秒),确保线程不会因无限等待而被长期占用。
- 原则:超时时间应 "小于上游服务的超时时间"(如 A 调用 B,B 的超时设为 2 秒,A 的超时应设为 3 秒,留 1 秒缓冲)。
重试机制:对临时故障(如网络抖动)可重试,但需满足两个条件:
- 限制重试次数(如最多 3 次),避免 "重试风暴";
- 确保接口幂等性(如用唯一订单号标识请求,避免重复下单)。
- 推荐:使用 "指数退避重试"(第一次间隔 1s,第二次 3s,第三次 5s),减少对服务的冲击。
6. 服务治理与可观测性:提前发现并止损
- 健康检查:通过 Spring Boot Actuator、K8s 探针等工具定期检测服务状态,发现不健康实例后立即从负载均衡中剔除,避免请求转发到故障节点。
- 监控告警:通过 Prometheus+Grafana 监控服务的 QPS、响应时间、错误率,设置阈值告警(如错误率 > 5% 时短信通知),提前发现异常。
- 分布式追踪:通过 SkyWalking、Jaeger 等工具跟踪请求链路,快速定位故障源头(如 "订单服务响应慢是因为调用库存服务超时")。
这时候我们来认识一款技术栈就是 Alibaba Sentinel (哨兵),它是阿里开源的一款微服务流量控制与服务保护组件,核心目标是解决微服务架构中常见的 "流量过载""服务熔断""雪崩扩散" 等问题,保障服务高可用。
二、Sentinel 核心定位与价值
在微服务架构中,服务间依赖复杂(如 A→B→C),若某个下游服务(如 C)故障或流量突增,可能导致上游服务(B、A)资源耗尽、响应超时,最终引发雪崩效应 。
Sentinel 的核心价值就是:通过 "流量控制""熔断降级""系统保护" 等机制,为微服务打造一道 "安全屏障",实现 "弹性容错"------ 既不被突发流量压垮,也不被故障服务拖死。
三、Sentinel 核心功能(四大核心能力)
Sentinel 的功能围绕 "保护服务" 展开,可概括为以下四类,覆盖微服务全链路保护场景:
1. 流量控制:防止 "流量洪峰" 压垮服务
流量控制是 Sentinel 最基础的能力,核心是限制单位时间内的请求量,避免服务因流量突增(如秒杀、促销)导致资源耗尽(CPU、内存、线程池满)。
- 控制维度 :
- QPS(每秒查询数):限制每秒最多处理的请求数(如 100 QPS,超过则拦截);
- 线程数:限制服务处理请求的最大线程数(避免线程池耗尽,适用于处理耗时较长的请求)。
- 控制效果 :
- 直接拒绝:超过阈值直接返回错误(简单粗暴,适用于非核心接口);
- 排队等待:按固定速率放行请求(如每秒 50 个,适用于需要平滑流量的场景,如秒杀下单);
- Warm Up(预热):流量从低阈值逐渐提升到目标阈值(避免冷启动时瞬间高流量冲击,适用于服务启动初期);
- 匀速排队:严格控制请求间隔,确保流量平稳(适用于对延迟敏感的场景)。
2. 熔断降级:防止 "故障服务" 拖垮依赖链
当某个下游服务(如依赖的支付服务)出现故障(响应超时、异常率高)时,Sentinel 会 "熔断" 对该服务的调用,避免上游服务持续发起无效请求,浪费资源,从而防止故障扩散(即 "雪崩")。
- 降级触发策略 (满足任一条件即熔断):
- 慢调用比例:单位时间内,慢调用(超过设定耗时阈值的请求)占比超过阈值(如 50% 请求耗时 > 500ms);
- 异常比例:单位时间内,请求异常率超过阈值(如 10% 请求抛出异常);
- 异常数:单位时间内,请求异常次数超过阈值(如 1 分钟内异常次数 > 50)。
- 熔断状态流转 :
- 闭合状态:服务正常,允许请求调用;
- 打开状态:触发降级条件,熔断开启(默认 5 秒),期间所有请求直接被拦截,不调用下游服务;
- 半开状态:熔断时间到后进入半开状态,允许少量请求尝试调用下游服务;若请求成功,恢复为闭合状态;若仍失败,重新进入打开状态。
3. 系统自适应保护:防止 "整体系统" 过载
流量控制和熔断降级是 "局部保护",而系统自适应保护是 "全局保护"------ 基于系统整体指标(如 CPU 使用率、系统负载、内存占用)动态调整流量,避免整个服务集群被压垮。
- 核心逻辑:当系统 CPU 使用率超过阈值(如 80%)或负载过高时,Sentinel 会主动拦截部分非核心请求,优先保障核心接口的可用性(如 "下单" 接口优先于 "商品浏览" 接口)。
4. 热点参数限流:精准拦截 "高频恶意请求"
针对 "热点请求"(如某个用户 ID 频繁刷接口、某个商品 ID 被集中抢购),Sentinel 支持按参数维度限流,避免单个参数值占用过多资源。
- 示例:限制 "用户 ID=123" 的请求每秒最多 10 次,而其他用户不受限,防止恶意用户刷接口。
四、Sentinel 工作原理(核心概念)
Sentinel 的运作依赖 3 个核心概念,理解它们就能掌握其底层逻辑:
核心概念 | 定义 | 示例 |
---|---|---|
资源 | 要保护的 "对象",即微服务中需要控制的接口、方法 | 订单接口 /order/create 、支付方法 pay() |
规则 | 保护资源的 "策略",包括流量控制规则、熔断降级规则等 | 为 /order/create 接口配置 "QPS 上限 100" 的规则 |
Slot 链 | 处理请求的 "责任链",每个 Slot 负责一项特定功能(如统计流量、检查规则、处理降级) | 请求进入后,先通过 FlowSlot 检查流量阈值,再通过 DegradeSlot 检查是否熔断 |
工作流程:


- 开发者通过注解(如
@SentinelResource
)或配置,将接口 / 方法标记为 "资源"; - 为资源配置 "规则"(如流量阈值、熔断条件),规则存储在 Sentinel 控制台或本地配置中;
- 当请求进入资源时,Sentinel 会触发
Slot 链
处理:- 先通过统计类 Slot(如
StatisticSlot
)收集流量数据(QPS、异常数); - 再通过规则类 Slot(如
FlowSlot
、DegradeSlot
)检查是否触发限流 / 熔断; - 若触发规则,执行预设的 "兜底逻辑"(如返回默认值、提示 "服务繁忙");若未触发,正常调用资源。
- 先通过统计类 Slot(如
五、Sentinel 与 Hystrix 的对比(为何选 Sentinel?)
提到微服务容错,很多人会想到 Netflix Hystrix,但 Sentinel 在功能和易用性上更具优势,两者对比如下:
特性 | Alibaba Sentinel | Netflix Hystrix |
---|---|---|
核心定位 | 流量控制 + 熔断降级 + 系统保护(全链路保护) | 熔断降级(核心是容错,流量控制较弱) |
规则配置 | 支持动态配置(控制台实时生效,无需重启服务) | 需通过代码或配置文件修改,动态性差 |
监控能力 | 自带控制台,支持实时流量监控、规则编辑、链路追踪 | 需依赖 Turbine + Dashboard,配置复杂 |
易用性 | 轻量级(Jar 包仅 1.5MB),支持 Spring Cloud 无缝集成 | 组件重,依赖多,已停止更新(2018 年后不再维护) |
流量控制粒度 | 支持 QPS、线程数、热点参数等多维度 | 仅支持线程池隔离,粒度较粗 |
适用场景 | 微服务全链路保护(秒杀、高并发场景优先) | 简单的服务容错场景(已逐步被 Sentinel 替代) |
六、Sentinel 典型使用场景
- 秒杀 / 促销场景:用 "流量控制(Warm Up + 匀速排队)" 平滑流量,避免瞬间高请求压垮下单接口;
- 服务依赖保护:用 "熔断降级" 保护依赖链(如订单服务依赖支付服务,若支付服务故障,订单服务熔断调用,返回 "支付暂时不可用");
- 系统过载保护:用 "系统自适应保护" 在 CPU 过高时,优先保障核心接口(如下单、支付),拦截非核心接口(如商品评论);
- 恶意请求拦截:用 "热点参数限流" 限制单个用户 / IP 的请求频率,防止刷接口。
七、sentinel的具体使用流程
使用 Alibaba Sentinel 保护微服务通常需要以下步骤:环境搭建→资源定义→规则配置→监控与调优 。下面以 Spring Boot 项目 为例,详细介绍 Sentinel 的核心使用流程。
1. 引入依赖
在 pom.xml
中添加 Sentinel 核心依赖(以 Spring Cloud Alibaba 生态为例):
<!-- Sentinel 核心依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.7.RELEASE</version> <!-- 版本需与 Spring Cloud 版本匹配 -->
</dependency>
<!-- 可选:Sentinel 控制台通信依赖(用于动态配置规则) -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.8.6</version>
</dependency>
2. 启动 Sentinel 控制台
Sentinel 提供可视化控制台,用于配置规则、监控流量。
-
下载控制台 JAR 包 :从 Sentinel 官方仓库 下载
sentinel-dashboard-${version}.jar
(如sentinel-dashboard-1.8.6.jar
)。 -
启动控制台 :
java -jar sentinel-dashboard-1.8.6.jar --server.port=8080
控制台默认端口为
8080
,访问http://localhost:8080
,默认账号密码均为sentinel
。
3. 配置项目连接控制台
在 application.yml
中配置项目与控制台的通信:
spring:
application:
name: order-service # 服务名称,将显示在控制台中
# Sentinel 配置
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080 # 控制台地址
port: 8719 # 本地客户端与控制台通信的端口(默认8719,若被占用会自动+1)
核心操作:定义资源与配置规则
Sentinel 的核心是 "保护资源",资源可以是接口、方法等。下面通过具体场景演示如何使用。
场景 1:流量控制(限制接口 QPS)
目标 :限制 /order/create
接口的 QPS 不超过 10(每秒最多处理 10 个请求)。
步骤 1:定义资源(标记需要保护的接口)
通过 @SentinelResource
注解标记接口为资源,并指定兜底方法(限流 / 熔断时执行):
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OrderController {
// 定义资源:value为资源名称,blockHandler为限流/熔断时的兜底方法
@GetMapping("/order/create")
@SentinelResource(value = "createOrder", blockHandler = "createOrderBlockHandler")
public String createOrder() {
// 实际业务逻辑:创建订单
return "订单创建成功";
}
// 兜底方法:参数需与原方法一致,且最后多一个BlockException参数
public String createOrderBlockHandler(BlockException e) {
return "当前请求过多,请稍后再试(限流兜底)";
}
}
步骤 2:配置流量控制规则
通过 Sentinel 控制台动态添加规则:
- 启动项目后,访问一次
/order/create
接口(Sentinel 采用 "懒加载",首次访问后资源才会显示在控制台)。 - 进入控制台,左侧菜单选择 "流量控制" ,点击 "新增流控规则" :
- 资源名:填写
createOrder
(与@SentinelResource
的value
一致); - 阈值类型:选择 "QPS";
- 单机阈值:填写
10
; - 其他保持默认,点击 "新增"。
- 资源名:填写
步骤 3:测试限流效果
用工具(如 Postman、JMeter)快速连续访问 /order/create
接口,当 QPS 超过 10 时,会返回兜底方法的内容 "当前请求过多,请稍后再试"。
场景 2:熔断降级(保护依赖服务)
目标 :当调用下游库存服务(InventoryService
)的失败率过高时,自动熔断,避免拖累当前服务。
步骤 1:定义资源(标记调用下游服务的方法
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.stereotype.Service;
@Service
public class OrderService {
// 调用下游库存服务的方法(假设存在InventoryClient)
@SentinelResource(value = "checkInventory", blockHandler = "checkInventoryBlockHandler",
fallback = "checkInventoryFallback")
public boolean checkInventory(Long productId) {
// 模拟调用下游服务:可能抛出异常或超时
if (productId % 2 == 0) { // 模拟50%失败率
throw new RuntimeException("库存服务异常");
}
return true; // 库存充足
}
// 熔断时的兜底方法(blockHandler:触发熔断规则时执行)
public boolean checkInventoryBlockHandler(Long productId, BlockException e) {
System.out.println("库存服务已熔断,暂时无法检查库存");
return false;
}
// 业务异常时的兜底方法(fallback:原方法抛出异常时执行)
public boolean checkInventoryFallback(Long productId, Throwable e) {
System.out.println("库存服务调用失败,执行 fallback");
return false;
}
}
步骤 2:配置熔断降级规则
在控制台左侧菜单选择 "熔断降级",点击 "新增降级规则":
- 资源名:填写
checkInventory
; - 降级策略:选择 "异常比例";
- 异常比例阈值:填写
0.5
(失败率超过 50% 触发熔断); - 熔断时长:填写
5
(熔断 5 秒后进入半开状态); - 最小请求数:填写
10
(至少 10 个请求才判断异常比例)。
步骤 3:测试熔断效果
多次调用 checkInventory
方法(可通过 Controller 间接调用),当失败率超过 50% 时,Sentinel 会触发熔断,后续请求直接执行 checkInventoryBlockHandler
兜底方法。5 秒后进入半开状态,允许少量请求尝试,若成功则恢复正常,否则继续熔断。
高级配置:动态规则持久化
默认情况下,Sentinel 规则存储在内存中,服务重启后规则会丢失。生产环境需将规则持久化到配置中心(如 Nacos、Apollo)。
以 Nacos 持久化 为例:
-
引入依赖:
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> <version>1.8.6</version> </dependency> -
在
application.yml
中配置 Nacos 数据源:spring:
cloud:
sentinel:
datasource:
ds1: # 数据源名称(自定义)
nacos:
server-addr: localhost:8848 # Nacos地址
dataId: order-service-sentinel-rules # 存储规则的dataId
groupId: DEFAULT_GROUP
rule-type: flow # 规则类型(flow:流量控制;degrade:熔断降级) -
在 Nacos 中创建
order-service-sentinel-rules
配置,内容为 JSON 格式的规则:[
{
"resource": "createOrder",
"limitApp": "default",
"grade": 1, // 1:QPS;0:线程数
"count": 10, // 阈值
"strategy": 0, // 0:直接;1:关联;2:链路
"controlBehavior": 0 // 0:直接拒绝;1:Warm Up;2:匀速排队
}
]
四、监控与调优
- 实时监控:控制台 "实时监控" 页面可查看服务的 QPS、响应时间、异常数等指标。
- 链路追踪:结合 SkyWalking 等工具,可查看请求在多个服务间的调用链路及 Sentinel 规则执行情况。
- 规则调优:根据监控数据调整阈值(如 QPS 阈值、熔断时长),平衡 "可用性" 与 "用户体验"。
使用 Sentinel 的核心流程是:
- 引入依赖并连接控制台;
- 通过
@SentinelResource
标记需要保护的资源(接口 / 方法); - 在控制台配置流量控制、熔断降级等规则;
- 编写兜底逻辑,确保异常时服务优雅降级;
- 结合持久化和监控,保障规则稳定生效。
通过这些步骤,可有效防止微服务因流量过载或依赖故障引发的雪崩问题。
总结
Sentinel 是微服务架构中 "服务保护" 的核心工具,它通过 "流量控制" 防过载、"熔断降级" 防雪崩、"系统保护" 保全局,解决了微服务高可用的核心痛点。相比 Hystrix,它更轻量、功能更全面、配置更灵活,目前已成为 Spring Cloud Alibaba 生态中不可或缺的组件,广泛应用于电商、金融等高并发场景。今天就到这里,今天依旧是深蹲不写BUG,我们一起加油努力!!