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

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

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

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.dtcms.com/a/109029.html

相关文章:

  • 万字重谈C++——类和对象篇
  • JAVA并发编程高级--深入解析 Java ReentrantLock:非公平锁与公平锁的实现原理
  • 【零基础入门unity游戏开发——2D篇】2D 游戏场景地形编辑器——TileMap的使用介绍
  • 虚拟电商-话费充值业务(六)话费充值业务回调补偿
  • MINIQMT学习课程Day3
  • Enovia许可配置和优化
  • seaweedfs分布式文件系统
  • RAC磁盘头损坏问题处理
  • 特征金字塔网络(FPN)详解
  • 【易订货-注册/登录安全分析报告】
  • Oracle触发器使用(二):伪记录和系统触发器
  • 构建个人专属知识库文件的RAG的大模型应用
  • BUUCTF-web刷题篇(9)
  • idea插件(自用)
  • video标签播放mp4格式视频只有声音没有图像的问题
  • NVIDIA显卡
  • 2.3 路径问题专题:剑指 Offer 47. 礼物的最大价值
  • Apollo配置中心登陆页面添加验证码
  • OpenCV销毁窗口
  • 浅谈软件成分分析 (SCA) 在企业开发安全建设中的落地思路
  • 数据库--SQL
  • Pytorch深度学习框架60天进阶学习计划 - 第34天:自动化模型调优
  • 维拉工时自定义字段:赋能项目数据的深度洞察 | 上新预告
  • React-router v7 第一章(安装)
  • JDBC常用的接口
  • coding ability 展开第八幕(位运算——基础篇)超详细!!!!
  • Spring Boot 集成 Redis 对哈希数据的详细操作示例,涵盖不同结构类型(基础类型、对象、嵌套结构)的完整代码及注释
  • PyQt6实例_A股日数据维护工具_使用
  • OpenCV 引擎:驱动实时应用开发的科技狂飙
  • 操作系统(一):概念及主流系统全分析