熔断策略的概念最早可以追溯到电力系统中的保险丝。当电流过大时,保险丝会自动熔断,以防止电器设备因过载而损坏。这种简单而有效的保护机制为后来软件系统中的熔断策略提供了灵感。在软件系统中,熔断策略的工作原理类似,旨在通过监测服务调用的状态来决定是否允许请求继续发送到目标服务。

为了增强服务的可靠性和用户体验,袋鼠云数栈在数据服务产品DataAPI中引入了熔断策略。这一策略通过切断对故障服务的请求,有效避免了请求积压和资源耗尽,同时为故障服务提供了恢复的时间。这样不仅防止了系统过载和崩溃,还确保了系统的基本可用性,从而维护了整体的稳定性。此外,熔断策略还能显著减少用户的等待时间,进一步提升了用户体验

一、熔断策略的发展与演进

早期的熔断策略主要是基于简单的阈值判断。例如,当某个服务的错误率超过一定阈值时,就会触发熔断停止对该服务的调用。这种简单的熔断策略在一定程度上提高了系统的稳定性,但也存在一些局限性,例如阈值的设置比较困难,容易出现误判等。

随着软件技术的不断发展,熔断策略也在不断演进和完善。现代的熔断策略通常结合了多种技术和算法,以提高其准确性和灵活性。

1、动态阈值调整

现代的熔断策略不再依赖于固定的阈值,而是通过动态调整阈值来适应不同的系统负载和故障情况。例如,可以根据系统的历史数据和实时性能指标,自动调整熔断的阈值,以提高熔断策略的准确性。

2、熔断恢复机制

除了在故障发生时触发熔断,现代的熔断策略还注重熔断后的恢复机制。当故障服务恢复正常后,熔断策略会自动尝试重新连接该服务,以恢复系统的正常运行。这种自动恢复机制可以减少人工干预,提高系统的可用性。

3、分布式熔断

在分布式系统中,单个节点的故障可能会影响到整个系统的稳定性。为了解决这个问题,现代的熔断策略通常采用分布式的架构,将熔断决策分散到多个节点上,以提高系统的可靠性和容错性。

4、与其他技术的结合

现代的熔断策略还常常与其他技术结合使用,例如负载均衡、服务发现、自动扩缩容等。这些技术的结合可以进一步提高系统的稳定性和可用性,为用户提供更好的服务体验



二、熔断策略的数栈中的应用

目前我们支持三种熔断策略的配置:

1、慢调用比例 (SLOW_REQUEST_RATIO)

选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。



2、异常比例 (ERROR_RATIO)

当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态,若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。



3、异常数 (ERROR_COUNT)

当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。



熔断策略创建成功后,可以在任一API创建或编辑时,应用创建的熔断策略。



API发布至API市场后,熔断策略将会生效,熔断器存在3种状态:关闭、开启、半开启,状态的判断方式如下图



这三种熔断策略有效保障了用户数据服务的稳定运行,对数据服务感兴趣的朋友欢迎点击【数据服务平台DataAPI】免费试用。

《数据资产管理白皮书》下载地址https://www.dtstack.com/resources/1073/?src=szsm

《行业指标体系白皮书》下载地址https://www.dtstack.com/resources/1057/?src=szsm

《数据治理行业实践白皮书》下载地址https://www.dtstack.com/resources/1001/?src=szsm

《数栈V6.0产品白皮书》下载地址https://www.dtstack.com/resources/1004/?src=szsm

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szsm

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack

三种熔断策略在数据服务API中的实践应用的更多相关文章

  1. 树的三种DFS策略(前序、中序、后序)遍历

    之前刷leetcode的时候,知道求排列组合都需要深度优先搜索(DFS), 那么前序.中序.后序遍历是什么鬼,一直傻傻的分不清楚.直到后来才知道,原来它们只是DFS的三种不同策略. N = Node( ...

  2. EF3:Entity Framework三种开发模式实现数据访问

    前言 Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发流程大相径庭,开发体验完全不一样.三种开发模式各有优缺点,对 ...

  3. Entity Framework:三种开发模式实现数据访问

    原文地址 http://blog.csdn.net/syaguang2006/article/details/19606715 前言 Entity Framework支持Database First. ...

  4. 海量大数据大屏分析展示一步到位:DataWorks数据服务对接DataV最佳实践

    1. 概述 数据服务(https://ds-cn-shanghai.data.aliyun.com)  是DataWorks产品家族的一员,提供了快速将数据表生成API的能力,通过可视化的向导,一分钟 ...

  5. 免注册公众号的三种微信推送消息服务的C#代码实现

    有时候我们需要监控一些网络上的变化,但是每次去刷新网页却又很麻烦,而且大部分刷新的时候网页并没有更新.那么有没有一个工具,可以监控网页变化,并将变化的结果推送到手机微信上呢? 这里有很多应用场景,比如 ...

  6. C# 三种方式实现Socket数据接收(经典)

    Stream.Read 方法 当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数. 语法: public abstract int Read(byte[] buffer, in ...

  7. 【转】三种方法让你在I2C通信中同时和多个从机通信

    ref:http://tieba.baidu.com/p/3769008030 对于不同地址的模块就不用多说了,直接分别对其地址进行通信即可.那么若拿到相同地址的模块,或者直接是相同的多个模块怎么办呢 ...

  8. php中使用Curl、socket、file_get_contents三种方法POST提交数据

    抓取远程内容,之前一直都在用file_get_content函数,其实早就知道有curl这么一个好东西的存在,但是看了一眼后感觉使用颇有些复杂,没有file_get_content那么简单,再就是需求 ...

  9. web三种跨域请求数据方法

    以下测试代码使用php,浏览器测试使用IE9,chrome,firefox,safari <!DOCTYPE HTML> <html> <head>     < ...

  10. rpm,docker,k8s三种方式安装部署GitLab服务

    rpm方式 源地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ wget https://mirrors.tuna.tsinghua ...

随机推荐

  1. kubectl

    ... Nodes k8s查看节点CPU消耗情况,可以用kubectl top命令,但是会出现 kubectl top nodes error: Metrics API not available 退 ...

  2. 【ESP32】移植 Arduino 库到 idf 项目中

    今天咱们要聊的内容非常简单,所以先扯点别的.上一篇水文中,老周没能将 TinyUSB 的源码编译进 Arduino 中,心有两百万个不甘,于是清明节的时候再试了一次,居然成功了,已经在 esp32 开 ...

  3. windows下jdk版本切换(bat)

    1.jdk下载 Oracle官网 https://www.oracle.com/cn/ 资源->下载->Java下载 jdk当前最新版本 jdk22版本 jdk8版本 当前页面向下拉 2. ...

  4. Asp.net mvc基础(十五)EF原理及SQL监控

    EF会自动把Where().OrderBy().Select()等这些编译成"表达式树",然后回把表达式树翻译成SQL语句,因此不是"把数据都取到内存中,然后使用集合的方 ...

  5. python Response的语法

    -- r.status_code #响应状态码 -- r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩 -- r.headers #以字典对象存储服务器响应头 ...

  6. 自定义控件,重写 TextBox 实例

    项目中可能会遇到重写控件的情况,特此记录下: 1 <Window x:Class="WpfApp6.MainWindow" 2 xmlns="http://sche ...

  7. 《HelloGitHub》第 109 期

    兴趣是最好的老师,HelloGitHub 让你对开源感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. github.com/521xueweihan/HelloG ...

  8. 国内首个「混合推理模型」Qwen3深夜开源,盘点它的N种对接方式!

    今日凌晨,通义千问团队正式开源了 Qwen3 大模型,并且一口气发布了 8 个型号,其中包括 0.6B.1.7B.4B.8B.14B.32B 以及 30B-A3B 和 235B-A22B,使用者可以根 ...

  9. Java--事务,操作数据库,实现转账

    更新:2019/3/29 目录 简介 事务的四个特性 一个小Demo 目录结构 jdbc.properties JDBCUtil.java TestTransaction.java[核心代码] 数据库 ...

  10. redis 中文乱码

    查询数据时中文乱码 解决方法: 使用 ./redis-cli 登录的时候加上 --raw参数 ./redis-cli --raw