当前位置: 首页 > news >正文

springcloud : 理解Sentinel 熔断与限流服务稳定性的守护神

前面学习了 springcloud: 理解Gateway网关原理

一、什么是 Sentinel?

Sentinel 是阿里巴巴开源的一款 高可用流量防卫组件,主要用于实现:

  • 限流(Flow Control)
  • 熔断降级(Circuit Breaking)
  • 系统负载保护(System Adaptive)
  • 实时监控(Dashboard)

一句话总结:

Sentinel 是运行在每个微服务节点上的“流量卫兵”,在调用链路中监控 QPS、响应时间、异常比例等指标,当检测到风险时,会主动限流或降级,从而避免系统雪崩。


二、为什么要用 Sentinel?

在微服务架构中,一个请求往往会经过多层调用:

Gateway → Service A → Service B → Service C

一旦底层服务 Service C 出现慢响应或宕机,就可能引发:

  • 级联失败:上游服务不断重试,导致所有请求堆积;
  • 线程阻塞:Tomcat 线程占满,无法响应新请求;
  • 雪崩效应:一个服务挂掉,整个系统不可用。

Sentinel 的目标,就是:

当系统出现异常或高并发时,能够自动“保护自己”。


三、Sentinel 的核心功能

功能说明举例
限流控制每秒通过的请求数(QPS)一个接口每秒最多处理 100 个请求
熔断降级当接口异常率过高或响应过慢时,临时中断请求如果 B 服务超时率超过 50%,A 不再调用 B
系统保护根据系统整体负载(如 CPU、RT)动态限流当 CPU 超过 80%,自动降低部分流量
热点参数限流对某些参数值的请求进行特殊限流对用户ID=1的请求单独限流

四、Sentinel 的执行流程(重点)

假设你在微服务中使用了 Sentinel 注解:

@GetMapping("/order")
@SentinelResource(value = "orderAPI", blockHandler = "handleBlock")
public String order() {return "success";
}

当请求进入系统时,Sentinel 的执行流程如下 👇

1️⃣ 定义资源点(Resource)

每个被 Sentinel 保护的方法、URL、接口等都会被定义为一个 “资源(Resource)”。

Sentinel 在进入资源点时调用 SphU.entry("orderAPI") 创建上下文。

try (Entry entry = SphU.entry("orderAPI")) {// 业务逻辑
} catch (BlockException ex) {// 限流或熔断处理
}

2️⃣ 检查规则链(Slot Chain)

Sentinel 内部使用 责任链模式(Slot Chain),按顺序检查各种规则:

  1. NodeSelectorSlot:记录调用链;
  2. ClusterBuilderSlot:构建集群节点统计;
  3. StatisticSlot:收集实时指标(QPS、RT、异常率);
  4. FlowSlot:执行限流规则;
  5. DegradeSlot:执行熔断规则;
  6. SystemSlot:执行系统保护;
  7. AuthoritySlot:执行授权控制。

一旦某个 Slot 检测不通过,就会抛出 BlockException,并调用 blockHandler


3️⃣ 限流判断逻辑(Flow Control)

Sentinel 内部会维护一个 滑动时间窗口(Sliding Window),统计过去 N 秒的请求量。

如果在时间窗口内请求数超过设定的 QPS,就会触发限流。

示例:
配置 QPS = 10
如果在过去 1 秒内已经通过 10 次请求,第 11 次请求将被拒绝,执行 blockHandler()


4️⃣ 熔断降级逻辑(Degrade Rule)

三种触发策略:

模式含义触发条件
RT 模式平均响应时间过高平均 RT > 阈值 且持续时间超过指定时长
异常比例异常比例过高异常率 > 比例阈值 且最少请求数达到阈值
异常数异常总数过多在指定时间窗口内异常数超过阈值

熔断触发后,Sentinel 会在一段时间内直接拒绝请求,等“冷却时间”过后再自动恢复。


5️⃣ 异常处理与恢复

限流或熔断被触发后,Sentinel 会抛出:

BlockException

并调用开发者定义的:

blockHandler

示例:

public String handleBlock(BlockException ex) {return "系统繁忙,请稍后再试";
}

五、Sentinel Dashboard 可视化监控

Sentinel 提供了一个强大的 可视化控制台(Dashboard),可以:

  • 实时查看每个接口的 QPS、RT、异常数;
  • 动态添加限流/降级规则;
  • 一键修改阈值,无需重启服务;
  • 支持集群限流配置。
# 启动 Sentinel 控制台
java -jar sentinel-dashboard.jar --server.port=8080

配置客户端连接:

spring:cloud:sentinel:transport:dashboard: localhost:8080port: 8719

六、与 Gateway、Nacos、OpenFeign 的关系

模块作用Sentinel 结合点
Gateway统一流量入口可以直接在 Gateway 层限流,保护下游服务
Nacos服务注册发现Sentinel 规则可以注册在 Nacos 实现动态推送
OpenFeign服务调用保护调用端防止下游接口慢响应导致雪崩

示例:

  • Gateway 限流请求入口;
  • Feign 调用时使用 Sentinel 保护;
  • Nacos 同步规则配置,实现动态限流。

七、可能遇到的问题与优化建议

问题原因解决方案
限流误判阈值设置过低结合实际 QPS 做压测后设定
熔断频繁触发异常统计周期太短延长统计窗口时间
分布式多实例不一致各节点规则不同步结合 Nacos 实现统一规则推送
阻塞调用时间过长BlockHandler逻辑过重保证限流降级逻辑轻量化
控制台无法连接端口被防火墙拦截检查 8719dashboard 端口配置

八、总结一句话

Sentinel 是分布式系统的“保险丝”,
它不负责业务逻辑,而是让系统在「异常与高压」下依然可用。

http://www.dtcms.com/a/557071.html

相关文章:

  • Webpack Tree Shaking 原理与实践
  • 一文讲透 npm 包版本管理规范
  • Qt 绘画 Widget 详解:从基础到实战
  • 【计算机网络】深入理解网络层:IP地址划分、CIDR与路由机制详解
  • 力扣3281. 范围内整数的最大得分
  • 力扣hot100----15.三数之和(java版)
  • 网站建设最重要的是什么什么是网站的主页
  • 影视传媒网站源码成华区建设局网站
  • 快速搭建网站 开源网络营销推广的目的是什么
  • 超越传统:大型语言模型在文本分类中的突破与代价
  • 【洛谷算题】顺序,分支,循环结构部分题目分享
  • Jmeter吞吐量控制器详解
  • 最全网站源码分享哈尔滨建设发展集团有限责任公司
  • 机器学习-KNN算法示例
  • 【随机访问介质访问控制-1】为什么纯 ALOHA 效率不到 20%?3 大随机访问 MAC 协议拆解
  • 有关电子商务网站建设与维护的书籍具有价值的响应式网站
  • C++笔记(面向对象)定义虚函数规则 运行时多态原理
  • 自然语言处理(NLP)之文本预处理:词元化——以《时间机器》文本数据集为例
  • Java-165 Neo4j 图论详解 欧拉路径与欧拉回路 10 分钟跑通:Python NetworkX 判定实战
  • WindowsRE文件夹不显示
  • 【PID】非标准PID控制是否影响控制目标 chapter1(补充)思考
  • 数码和easy
  • 做网站跟app的区别做网站的要求
  • 酷维网站模版wordpress 分类页id
  • MySQL查询一行数据为何变慢?深度排查与优化指南
  • Crashpad介绍
  • 博兴县建设局网站襄阳云平台网站建设
  • 若依分离版前端部署在tomcat刷新404的问题解决方法
  • qcustomplot 显示坐标轴
  • Java Web 项目打包部署全解析:从 IDEA 配置到 Tomcat 运行