Alibaba Sentinel | 熔断规则详解

news2024/9/23 23:25:17

文章目录

  • 简介
    • 熔断策略-慢调用比例
      • 结论:
      • 流程图:
      • 熔断结果
      • 详细解释
    • 熔断策略-异常比例
      • 结论:
      • 详细解释
    • 熔断策略-异常数
      • 结论:
      • 详细解释
    • 统计异常数、比例的方法
      • 编码
      • 加注解
      • RuntimeException
  • 总结

简介

  熔断是一种保护机制,用于防止系统在高负载或异常情况下继续承受过大的流量压力,从而导致系统崩溃或性能下降。熔断规则可以根据系统的负载情况自动触发熔断,将流量限制在一个可控范围内。




熔断策略-慢调用比例

结论:

  在统计时长内的所有请求,如果请求时间超过xx秒(慢请求)的请求超过一定的比例,且请求数大于最小请求数,将触发熔断,效果是熔断时间内的请求会快速失败。
  经过熔断时间后,进入探测恢复状态,当下一个请求仍然是慢请求(请求时间超过xx秒),则再次进入熔断状态,不是则恢复正常状态。

流程图:

在这里插入图片描述

熔断结果

在这里插入图片描述

详细解释

在这里插入图片描述

  • 最大RT:
    • 请求最大响应时间,超过这个时间的请求为慢调用。RT是响应时间(reponse time)的意思,单位为毫秒。
  • 比例阈值:
    • 慢调用的比例,超过阈值触发熔断。取值范围0.0-1.0,代表 0% - 100%。(1.8.0 引入)
  • 熔断时长:
    • 熔断开始后,在这个时间内发出的请求会快速失败。单位为秒。
  • 最小请求数:
    • 请求数小于该值时,即使异常比率超出阈值也不会熔断。(1.7.0 引入)
  • 统计时长:
    • 一个时间范围,可以是每1分钟、每3小时。根据这个时间内的请求,来统计总请求和数、计算慢调用比例。(1.8.0 引入)



熔断策略-异常比例

结论:

  在统计时长内的所有请求,如果异常的比例大于阈值,且请求数大于最小请求数,将触发熔断,效果是熔断时间内的请求会快速失败。
  经过熔断时间后,进入探测恢复状态,当下一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

详细解释

在这里插入图片描述

  • 比例阈值:
    • 异常的比例超过阈值触发熔断。取值范围0.0-1.0,代表 0% - 100% 。(1.8.0 引入)
  • 熔断时长:
    • 熔断开始后,在这个时间内发出的请求会快速失败。单位为秒。
  • 最小请求数:
    • 请求数小于该值时,即使异常比率超出阈值也不会熔断。(1.7.0 引入)
  • 统计时长:
    • 一个时间范围,可以是每1分钟、每3小时。根据这个时间内的请求,来统计总请求和数、计算慢调用比例。(1.8.0 引入)



熔断策略-异常数

结论:

  和异常比例策略是相差不大,比较的是异常数是否超过设置。

详细解释

在这里插入图片描述

  • 异常数:
    • 注意异常降级仅针对业务异常,对 Sentinel 限流降级本身的异常(BlockException)不生效。




统计异常数、比例的方法

编码

  为了统计异常比例或异常数,需要通过 Tracer.trace(ex) 记录业务异常。示例:

Entry entry = null;
try {
  entry = SphU.entry(resource);

  // Write your biz code here.
  // <<BIZ CODE>>
} catch (Throwable t) {
  if (!BlockException.isBlockException(t)) {
    Tracer.trace(t);
  }
} finally {
  if (entry != null) {
    entry.exit();
  }
}

加注解

  开源整合模块,如 Sentinel Dubbo Adapter, Sentinel Web Servlet Filter 或 @SentinelResource 注解会自动统计业务异常,无需手动调用。

  • value:资源名称,必需项(不能为空)
  • entryType:entry 类型,可选项(默认为 EntryType.OUT)
  • blockHandler / blockHandlerClass: blockHandler对应处理 BlockException(熔断时抛出的异常)的函数名称,可选项(必须public)
  • fallback:fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;

// 类级别的注解,标识整个类作为一个资源
@SentinelResource(value = "exampleResource")
public class ExampleClass {

    // 方法级别的注解,标识该方法作为一个资源
    @SentinelResource(value = "exampleMethod")
    public void exampleMethod() {
        // 方法逻辑
    }
    
    // 配置降级处理方法
    @SentinelResource(value = "exampleResource", blockHandler = "handleBlock")
    public void exampleMethodWithBlockHandler() {
        // 方法逻辑
    }
    
    // 降级处理方法,用于处理资源保护触发时的逻辑
    public void handleBlock(BlockException ex) {
        // 降级处理逻辑
    }
}

RuntimeException

  无论是否使用@SentinelResource注解,抛出的RuntimeException都会被计算为异常数。

总结

  

  • 服务调用保护:
      在分布式系统中,一个服务通常会依赖其他的服务进行调用。当依赖的服务出现故障或异常时,为了避免故障扩散,可以对该服务的调用进行熔断。如果调用次数超过预设的阈值,熔断规则将会触发,并且暂时停止对该服务的调用,以防止对系统产生过大的压力。

  • 外部资源保护:
      在与外部资源交互的场景中,例如调用第三方API、访问数据库等,如果外部资源的响应时间过长或出现故障,可以设置熔断规则对这些资源进行保护。当资源的响应时间超过预设的阈值或出现错误时,熔断规则会触发,暂时停止对该资源的访问,以避免长时间等待或继续请求不可用的资源。

  • 防止雪崩效应:
      当系统整体的负载达到临界值时,可能会发生雪崩效应,即由于某个组件或服务的故障导致整个系统无法正常运行。为了避免雪崩效应,可以在系统各个关键组件之间设置熔断规则。当某个组件出现故障时,熔断规则会触发并限制对该组件的访问,以保护整个系统的稳定性。

  • 限流保护:
      熔断机制可以与限流机制结合使用,对系统的访问流量进行控制。当流量超过系统的处理能力时,可以设置熔断规则进行流量控制和限制。当流量超过预设的阈值时,熔断规则会触发并拒绝部分或全部的请求,以保护系统免受过载的影响。

  通过合理设置熔断规则,可以提高系统的稳定性和可靠性,保护系统免受高负载和异常情况的影响。

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

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

相关文章

Redis持久化(RDB、AOF)

Redis持久化&#xff08;RDB、AOF&#xff09; 一、Redis高可用二、Redis持久化三、Redis的RDB持久化1、触发条件1.1 手动触发1.2 自动触发1.3 其它自动触发机制 2、执行流程3、启动时加载RED文件(恢复) 四、Redis的AOF持久化1、开启AOF2、执行流程2.1 命令追加&#xff08;app…

杂记:逆向一块FPGA核心板

最近太热了&#xff0c;实在无心看书。阵列书丢一边看不进去&#xff0c;还买了几本统计信号的甚至都没开始看&#xff08;笑&#xff09;&#xff0c;躺在床上玩玩手机摆烂&#xff0c;看到某黄色APP上有老板卖拆机的板子&#xff0c;价格美丽&#xff0c;美中不足的是没有资料…

JavaFX布局详解与代码实例

JavaFX布局详解与代码实例 一、JavaFX布局的原理1.1 JavaFX布局容器1.2 布局约束 二、常用JavaFX布局2.1 VBox和HBox布局2.2 GridPane布局2.3 BorderPane布局 三、JavaFX布局代码实例四、总结与展望 正文&#xff1a; 引言&#xff1a; JavaFX是一种功能强大的用户界面&#xf…

SFP6012-ASEMI代理MHCHXM(海矽美)二极管SFP6012

编辑&#xff1a;ll SFP6012-ASEMI代理MHCHXM&#xff08;海矽美&#xff09;二极管SFP6012 型号&#xff1a;SFP6012 品牌&#xff1a;MHCHXM&#xff08;海矽美&#xff09; 封装&#xff1a;TO-247AB 恢复时间&#xff1a;≤75ns 正向电流&#xff1a;30A 反向耐压&a…

Excel表格转换

原始数据 1部 2部 3部 4部 5部 6部 7部 8部 9部 郈思 王瑾 郈思 许嘉 郈思 施眉 郈思 王瑾 郈思 许嘉 郈思 许嘉 吕倩倩 孙帮菊 夏侯瑾 孙帮菊 吕倩倩 孙痴梦 孙帮菊 姜佳 王瑾 孙痴梦 王瑾 许嘉 施眉 施眉 杨婕 施眉 施眉 孙帮菊 杨孝洁 施眉 吕倩倩 孙痴梦 郈思 夏侯瑾 李文…

NR 吞吐量测试

前言 参考文档&#xff1a; 5G NR TBS (Transport Block size) Calculator | 5G-Tools.com 5G NR Transport Block Size (TBS) Calculation - Techplayon 5G MCS _ 搜索结果_哔哩哔哩_Bilibili 4/5G无线资源和数据调度流程:CQI上报、基站AMC调度、调度信息DCI下发、CQI到MCS的对…

网络控制地址转换管理技术

网络控制&地址转换&管理技术 一、网络控制技术ACL1.1、ACL应用场景1.2、ACL分类1.3、ACL规则1.4、基本ACL配置1.5、高级ACL配置1.6、总结 二、网络地址转换NAT2.1、NAT应用场景2.2、静态NAT2.3、静态NAT配置2.4、动态NAT2.5、动态NAT配置12.6、动态NAT配置22.7、NAPT2.…

【C语言督学训练营 第十六天】考研中常考的排序大题(上)---- 冒泡排序、插入排序、快速排序

文章目录 前言经典的冒泡插入排序快速排序 前言 今天要介绍的部分是排序算法&#xff0c;在很久很久之前学习过十大排序&#xff0c;当时自我感觉非常良好&#xff0c;知道今天才知道我认为的大错特错。有些排序算法会考代码题&#xff0c;有些只会考小题只需要理解思想即可&a…

火山引擎DataLeap数据质量解决方案和最佳实践(二):解决方案

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 DataLeap流批数据质量解决方案 产品功能架构 火山引擎DataLeap流批数据质量解决方案有 4 个大的功能&#xff1a; 离线数据质量监控&#xff1a;解决批和微批监控…

Spring Boot 中的 CD 工具

Spring Boot 中的 CD 工具 在现代软件开发中&#xff0c;持续交付&#xff08;Continuous Delivery&#xff0c;简称 CD&#xff09;已经成为了一个非常重要的开发模式。CD 工具可以帮助我们自动化构建、测试、部署和发布软件&#xff0c;提高软件交付的速度和质量。在 Spring…

接口增量改动,研发经常忘通知测试,如何解决?

不知道大家有没有同感&#xff0c;做接口测试麻烦的不是测试本身&#xff0c;而是接口它会变&#xff0c;更麻烦的不是接口变了&#xff0c;而是它变了而你不知道。等到你测完&#xff0c;开发才悠悠跟你说 ——“那个接口我改了点东西&#xff0c;你再看一眼哈”。 我那是看一…

el-menu嵌套路由高亮

1、配置路由 2、一级导航页面配置 计算属性定义方法 3、二级导航页面

mysql知识点总结

MySQL的binlog有有几种录入格式?分别有什么区别? 有三种格式,statement,row和mixed. statement模式下,记录单元为语句.即每一个sql造成的影响会记录.由于sql的执行是有上下文的,因此在保存的时候需要保存相关的信息,同时还有一些使用了函数之类的语句无法被记录复制. row级别…

环境变量编程

问题 main 函数 (默认进程入口) int main(int argc, char* argv[], char* env[]) argc - 命令行参数个数argv[] - 命令行参数数组env[] - 环境变量数组 (最后一个元素为 NULL) 什么是环境变量&#xff1f; 环境变量是进程运行过程中可能用到的 "键值对" (NAME VA…

使用Bert,ERNIE,进行中文文本分类

GitHub - 649453932/Bert-Chinese-Text-Classification-Pytorch: 使用Bert&#xff0c;ERNIE&#xff0c;进行中文文本分类使用Bert&#xff0c;ERNIE&#xff0c;进行中文文本分类. Contribute to 649453932/Bert-Chinese-Text-Classification-Pytorch development by creatin…

centos通过源文件的方式安装node-red

centos通过源文件的方式安装node-red 一、下载源文件1.1 查看系统信息1.2 下载 二、安装配置2.1 安装nodejs2.2 安装node-red 三、pm2管理node-red进程3.1 pm23.2 node-red设置开机自启动 四、更多 [回到目录] 一、下载源文件 1.1 查看系统信息 查看你的Linux系统是32位还是6…

三、1如何运用设计原则之SOLID原则写出高质量代码?

你好我是程序员雪球。接下来我们学习一些经典的设计原则。其中包括SOLID&#xff0c;KISS&#xff0c;YAGNI&#xff0c;DRY&#xff0c;LOD等。其实这些设计原则从字面意思理解并不难。但是“看懂”和“会用”是两回事&#xff0c;而“用好”就难上加难了。 先来了解SOLID原则…

EMC学习笔记(十三)背板的EMC设计

背板的EMC设计 1.背板槽位的排列1.1 单板信号的互联要求1.2 单板板位结构1.2.1 板位结构影响1.2.2 板间互联电平、驱动器件的选择 2.背板的EMC设计2.1 接插件的信号排布与EMC设计2.1.1 接插件的选型2.1.2 接插件模型与针信号排布 2.2 阻抗匹配2.3 电源、地分配 1.背板槽位的排列…

深度学习的技术原理

目录 人工智能 深度学习的应用场景 神经网络 卷积神经网络&#xff08;CNN&#xff09; 一个神经网络运行的可视化展示 人工智能 信息技术是人类历史上的第三次工业革命&#xff0c; 计算机、 互联网、智能家居等技术的普及极大地方便了人们的日常生活。 通过编程的方式&…

xshell安装jdk1.8环境

xshell安装jdk1.8环境 大家好&#xff0c;今天我们来学习一下xshell安装jdk1.8环境&#xff0c;好好看&#xff0c;好好学&#xff0c;超详细的 第一步 进入xshell官网下载 第二步 打开xshell新建一个会话&#xff0c;如下图&#xff1a; 第三步 输入你的名称、主机ip、端口号(…