Sentinel[超详细讲解]-7 -之 -熔断降级[异常比例阈值]

news2025/4/18 8:15:58

📖 主要讲解熔断降级之 --- 异常比例阈值  🚀

1️⃣ 背景

        Sentinel 以流量作为切入点,提供了很多的丰富的功能,例如🤗: 流量控制,熔断降级等,它能够有效的适用各个复杂的业务场景,如削峰填谷,集群的流量控制等。在这些场景中,异常比例阈值作为 Sentinel 熔断降级规则中的一个重要参数,起着至关重要的作用。当某个服务的异常比例 超过设定的阈值时,Sentinel 会自动触发熔断机制,迅速切断对该服务的请求,避免因持续异常导致资源耗尽,从而防止故障的扩散,进而保障了整个系统的稳定性。

2️⃣ 目的

   这篇文章我们将探讨熔断降级🚨 之异常比例数,我们希望达成以下具体的目标

  1. ✅深入剖析异常比例阈值的核心思想熔断机制
  2. ✅详细解读异常比例阈值相关的 核心参数
  3. ✅通过实际的代码示例和案例分析,展示异常比例阈值在不同场景下的配置方法和应用效果
  4. ✅总结异常比例阈值配置的最佳实践和注意事项。

3️⃣ 核心思想

        核心思想😍:当某个服务的 🔜 响应时间变慢,并且💔 慢请求的比例超过一定阈值时,系统自动触发熔断。

        目的🉑 : 避免无效请求占用资源,从而防止持续异常导致资源耗尽,保障了分布式系统的稳定性和可用性。

4️⃣ 熔断机制

       ✅ 统计窗口:系统会设定一个时间窗口(如10秒),在这个窗口内统计请求的异常情况。

       ✅ 异常比例计算:在统计窗口内,计算异常请求数占总请求数的比例。

       ✅阈值触发:当异常比例超过预设的阈值(如50%)时,触发熔断。

       ✅ 熔断开启:熔断器打开,后续请求直接快速失败,不再调用实际服务。

       ✅恢复尝试:经过设定的熔断时长后,熔断器会进入半开状态,允许少量请求通过以测试服务是否恢复。

流程图如下👉

5️⃣ 核心参数

核心参数说明🤖:

参数含义示例值作用
grade熔断策略类型ERROR_RATIO指定按异常比例熔断
count异常比例阈值0.5(50%)异常请求占比超过此值时触发熔断
timeWindow熔断持续时间10(秒)熔断后10秒进入半开状态(试探恢复)
minRequestAmount最小请求数10统计窗口内请求数≥10才计算比例
statIntervalMs统计窗口长度10000(10秒)每10秒统计一次异常比例

6️⃣ 代码事例

下面是一段配置异常比例阈值熔断规则的关键代码
public static void initErrorRatioRule() { 

 List<DegradeRule> rules = new ArrayList<>();
 DegradeRule rule = new DegradeRule();
 rule.setResource("error_service");
 rule.setGrade(CircuitBreakerStrategy.ERROR_RATIO.getType());
 rule.setCount(0.5); 
 rule.setTimeWindow(10); 
 rule.setMinRequestAmount(5); 
 rule.setStatIntervalMs(1000); 
 rules.add(rule);
 DegradeRuleManager.loadRules(rules); 
}

✅代码说明

1.创建规则列表:这行代码创建了一个DegradeRule类型的列表rules,用于存储熔断规则。

List<DegradeRule> rules = new ArrayList<>();

2.创建单个熔断规则:用于配置具体的熔断规则。

DegradeRule rule = new DegradeRule();

3.设置资源名:保护的资源名称为error_service。在 Sentinel 中,资源是一个抽象概念,可以是一个方法、一 个接口、一个服务等。通过指定资源名,Sentinel 可以对该资源进行监控和规则应用。

rule.setResource("error_service");

 4.设置熔断策略类型:熔断策略类型设置为ERROR_RATIO,即按异常比例熔断。这表示 Sentinel 会根据异常比例来判断 是否触发熔断。

rule.setGrade(CircuitBreakerStrategy.ERROR_RATIO.getType());

5.设置异常比例阈值:设置异常比例阈值为 0.5,即 50%。当在统计窗口内,该资源的异常请求比例超过 50% 时,就满足了 触发熔断的一个条件。

rule.setCount(0.5);

6. 设置熔断持续时间:设置熔断持续时间为 10 秒。当触发熔断后,在接下来的 10 秒内,对该资源的请求将被熔断,即直接 返回,而不会实际调用服务。10 秒后,熔断器会进入半开状态,进行试探性恢复。

rule.setTimeWindow(10); 

7.设置最小请求数:在统计窗口内,只有请求数大于或等于 5 时,才会计算异常比例并判断是否触发熔断。如果请求数小于 5,即使异常比例超过阈值,也不会触发熔断。这是为了避免因请求数过少导致的误判。

rule.setMinRequestAmount(5); 

8.设置统计窗口长度: 设置统计窗口长度为 1000 毫秒,即 1 秒。Sentinel 会每 1 秒统计一次该资源的请求情况,包括总请求数、异常请求数等,以计算异常比例并判断是否满足熔断条件。

rule.setStatIntervalMs(1000); 

9.加载熔断规则:

rules.add(rule);​
DegradeRuleManager.loadRules(rules); 

触发条件🈲

  • 在10秒统计窗口内:

    • 总请求数 ≥ minRequestAmount(5次)。

    • 异常请求比例 > count(50%)。

    • 示例

      • 总请求数:20次。

      • 异常请求数:12次。

      • 异常比例:12/20 = 60% > 50% → 触发熔断。

模拟调用🔧

import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;

public class ErrorRatioSimulator {
    public static void main(String[] args) {
        // 1. 初始化熔断规则
        ErrorRatioCircuitBreakerDemo.initErrorRatioRule();

        // 2. 模拟请求(50%概率抛出异常)
        while (true) {
            Entry entry = null;
            try {
                entry = SphU.entry("orderService");
                // 随机生成异常(50%概率)
                if (Math.random() > 0.5) {
                    throw new RuntimeException("Mock Error");
                }
                System.out.println("请求成功");
            } catch (BlockException e) {
                System.out.println("请求被熔断拦截");
            } catch (Exception e) {
                // 业务异常会计入统计
                System.out.println("请求异常: " + e.getMessage());
            } finally {
                if (entry != null) {
                    entry.exit();
                }
            }
        }
    }
}

7️⃣ 最佳实践和注意事项

        不同业务场景对异常的容忍度和影响程度差异巨大。对于电商支付等关键业务,任何异常都可能导致资金损失或用户流失,应设置较低的异常比例阈值,如 10% - 20%,以确保服务的高可用性;而对于一些非关键业务,如商品评论的加载服务,异常比例阈值可适当提高至 30% - 50%,在保证基本服务质量的前提下,减少不必要的熔断。同时,要考虑业务的流量高峰和低谷期。在高峰时,系统负载高,服务出现短暂异常的可能性增加,可适当放宽阈值;低谷时,系统资源充足,可收紧阈值,更严格地监控服务质量等。

8️⃣ 总结🚀

        与基于异常数的熔断策略相比,异常比例阈值策略在关注服务异常情况、适应请求量波动场景等方面具有独特优势,但也存在对异常分布不均匀情况处理不足等问题。在应用实践中,合理设置参数、建立完善的监控与调整策略是确保异常比例阈值有效发挥作用的关键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++11观察者模式示例

该示例代码采用C11标准&#xff0c;解决以下问题&#xff1a; 消除了类继承的强耦合方式&#xff1b;通知接口使用可变参数模板&#xff0c;支持任意参数&#xff1b; 示例代码 .h文件如下&#xff1a; #include <functional> #include <string> #include <…

win10 笔记本电脑安装 pytorch+cuda+gpu 大模型开发环境过程记录

win10 笔记本电脑安装 pytorchcudagpu 大模型开发环境过程记录 文章部分内容参考 deepseek。 以下使用命令行工具 mingw64。 安装 Anaconda 安装位置&#xff1a; /c/DEVPACK/Anaconda3 然后安装 Python 3.10.16 &#xff08;略&#xff09; $ conda create -n pytorch_…

Layout Inspector平替跨平台布局分析器のAppium Inspector

引言 因为我有一个api为26的设备&#xff0c;因为 Layout Inspector 无法在 API 26 以下设备上使用&#xff0c;并且现在AS的 Hierarchy Viewer 和Android Device Monitor 均已经在SDK中剔除&#xff0c;故想再搜一个pc版的布局查看器&#xff0c;发现Appium Inspector学习成本…

常见NLP指标PPL,F1,Rouge-L,Accuracy (CLS),Accuracy (EM)总结

常见NLP指标PPL&#xff0c;F1&#xff0c;Rouge-L总结 1.PPL 2.F1 3.Rouge-L 4.Accuracy (CLS) 5.Accuracy (EM)

Redis数据结构之ZSet

目录 1.概述2.常见操作2.1 ZADD2.2 ZRANGE2.3 ZREVRANGE2.4 ZRANGEBYSCORE2.5 ZSCORE2.6 ZCARD2.6 ZREM2.7 ZINCRBY2.8 ZCOUNT2.9 ZMPOP2.10 ZRANK2.11 ZREVRANK 3.总结 1.概述 ZSet和Set一样也是String类型元素的集合&#xff0c;且不允许重复的成员&#xff0c;不同的是ZSet…

磁盘分析工具合集:告别C盘焦虑!

今天李师傅带大家盘点五款硬盘空间分析利器&#xff0c;帮你精准定位那些"吃空间"的元凶&#xff0c;让C盘告别臃肿烦恼&#xff01; 一、WizTree 这款NTFS磁盘的"透视眼"堪称效率典范。它通过直接读取硬盘主文件表(MFT)实现秒级扫描&#xff0c;1TB机械…

20250405在荣品的PRO-RK3566开发板使用Rockchip原厂的buildroot系统来适配gmac1

【暂时还没有解决让PRO-RK3566的eth0/gmac1开机就启动】 PRO-RK3566作为iperf服务器&#xff1a; rootrk3566-buildroot:/# ifconfig rootrk3566-buildroot:/# ifconfig -a rootrk3566-buildroot:/# ifconfig eth0 up rootrk3566-buildroot:/# ifconfig rootrk3566-buildroot:/…

每日一题(小白)模拟娱乐篇14

直接理解题意&#xff0c;一分钟扩散一次&#xff0c;那么2020分钟也就是需要循环2020次&#xff0c;然后加入扩散后的条件&#xff0c;每一个次扩散使方格子的总量1&#xff08;只要有一个点扩散就无需看其他的点&#xff09;&#xff0c;若干次循环过后总数之和即所有黑色格子…

使用 Python 爬取并打印双色球近期 5 场开奖数据

使用 Python 爬取并打印双色球近期 5 场开奖数据 前期准备安装所需库 完整代码代码解析 1. 导入必要的库2. 定义函数 get_recent_five_ssq 3. 设置请求的 URL 和 Headers 4. 发送请求并处理响应5. 解析 HTML 内容6. 提取并打印数据7. 错误处理 首先看下运行的效果图&#xff1a…

再见VS Code!Google IDE 正颠覆传统开发体验

云端开发的革命&#xff1a;Google Project IDX 如何颠覆传统开发体验 在软件开发领域&#xff0c;Google 最新推出的 Project IDX 绝非仅仅是另一个“基于浏览器的 VS Code”——它是一次真正的范式转变。与 VS Code、Cursor 等传统工具不同&#xff0c;IDX 是一个完全云原生的…

AI+自动化测试:如何让测试编写效率提升10倍?

文章目录 摘要传统自动化测试的痛点编写测试用例太费时间测试覆盖率难以保证UI 测试维护成本高 AI 如何优化自动化测试&#xff1f;AI 生成单元测试&#xff1a;减少重复工作&#xff0c;提高覆盖率传统方法 VS AI 方法 使用 AI 生成 Python 单元测试自动补全边界情况传统方法 …

01-STM32(介绍、工具准备、新建工程)p1-4

文章目录 工具准备和介绍硬件设备stm32简介和arm简介stm32简介STM32命名规则STM32选型STM32F103C8T6最小系统板引脚定义STM32启动配置STM32最小系统电路ARM简介 软件安装注册器件支持包安装ST-LINK驱动安装USB转串口驱动 新建工程创建stm32工程STM32工程编译和下载型号分类及缩…

Win10定时任务计划无法显示要执行的EXE任务程序界面,问题解决办法

用C#开发的一款WINFORM程序&#xff0c;在电脑测试一切顺利&#xff0c;运行结果正确。但用电脑的定时任务执行时&#xff0c;程序界面不显示&#xff0c;重启电脑、各种试都不行&#xff0c;最终问题解决。 解决办法&#xff1a; 要选“只在用户登陆时运行”&#xff0c;才能执…

STM32CubeMX-H7-12-IIC读写MPU6050模块(中)-MPU6050模块详解以及软件IIC驱动

前言 上一篇我们已经完成对IIC代码基本框架的编写&#xff0c;以及获取MPU6050的ID&#xff0c;接下来我们逐一分析这个模块的功能&#xff0c;并用IIC驱动 建议看完上一篇再来看这篇 MPU6050寄存器介绍 1.电源管理寄存器&#xff08;PWR_MGMT_1&#xff0c;地址&#xff1a;0…

springboot2.7.x整合nacos+seata

1、nacos及seata下载地址 Nacos Server 下载 | Nacos 官网 Seata Java Download | Apache Seata 这里的seata版本用2.1.0版本。 2、启动nacos D:\本地-seata-nacos\nacos-server\bin>startup.cmd -m standalone 3、修改seata的conf下的application的内容 这里的数据库…

为 IDEA 设置管理员权限

IDEA 安装目录 兼容性选择管理员身份运行程序 之后 IDEA 中的操作&#xff08;包括终端中的操作&#xff09;都是管理员权限的了

单片机学习笔记8.定时器

IAP15W4K58S4定时/计数器结构工作原理 定时器工作方式控制寄存器TMOD 不能进行位寻址&#xff0c;只能对整个寄存器进行赋值 寄存器地址D7D6D5D4D3D2D1D0复位值TMOD89HGATEC/(T低电平有效)M1M0GATEC/(T低电平有效)M1M000000000B D0-D3为T0控制&#xff0c;D4-D7为T1控制 GAT…

vue3实现markdown预览和编辑

Markdown作为一种轻量级标记语言&#xff0c;已经成为开发者编写文档的首选工具之一。在Vue3项目中集成Markdown编辑和预览功能可以极大地提升内容管理体验。本文将介绍如何使用Vditor这一强大的开源Markdown编辑器在Vue3项目中实现这一功能。 一、Vditor简介 Vditor是一款浏…

高并发秒杀系统接入层如何设计

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

C++异常处理 throw try catch

C 异常处理概述 C 异常处理机制提供了一种在程序运行时捕获错误或异常情况的方式。异常处理的目的是使得程序在遇到错误时能够优雅地终止或恢复&#xff0c;并防止程序出现崩溃。C 使用 try, throw, 和 catch 关键字来实现异常处理。 异常处理的基本结构&#xff1a; throw: …