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

为了增强服务的可靠性和用户体验,袋鼠云数栈在数据服务产品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. bug|SCSS相关问题

    参考链接 [系统学习css]scss和sass以及 less的关系,node-sass.dart-sass和sass-loader是啥

  2. ESP32+Arduino入门(四):OLED屏随机显示古诗

    前言 我觉得去做一些简单又好玩的案例是入门很好的选择. 在实践的过程中会碰到很多需求很多问题在解决这些需求这些问题的过程就是在学习的过程. 今天我来分享一个随机显示古诗的案例,如果对此感兴趣可以跟我一 ...

  3. Sql Server数据库远程连接访问设置

    步骤一:设置sql server数据库 1.以新建一个新用户名test作为远程连接登录名.在本地登录sql server数据库,安全性->右键用户名 2.点击根目录右键,选择属性 选择安全性 选 ...

  4. 想靠RAG提升模型回答质量,那是不可能的

    提供AI咨询+AI项目陪跑服务,有需要回复1 上周写了一篇AI知识库的文章:聊聊与一体机同等级的智商税:AI知识库 事实上,文章对于AI知识库是稍带了点否定的色彩,因为单独的知识库毫无意义,但企业本身 ...

  5. 如何在 MySQL 中监控和优化慢 SQL?

    如何在 MySQL 中监控和优化慢 SQL? 在 MySQL 中,慢 SQL 查询是指那些执行时间较长的查询,通常会影响数据库的性能和响应时间.通过监控和优化这些慢 SQL 查询,可以提高数据库的效率 ...

  6. Sentinel源码—6.熔断降级和数据统计的实现

    大纲 1.DegradeSlot实现熔断降级的原理与源码 2.Sentinel数据指标统计的滑动窗口算法 1.DegradeSlot实现熔断降级的原理与源码 (1)熔断降级规则DegradeRule的 ...

  7. 代码随想录第二十五天 | Leecode 491. 非递减子序列、46. 全排列、47. 全排列 II

    Leecode 491. 非递减子序列 题目描述 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 .你可以按 任意顺序 返回答案. 数组中可能含有重 ...

  8. 信息资源管理综合题之“绘制利用RSA进行数字签名的过程图并进行简要说明”

    一.李三在上课中听不懂利用RSA进行数字签名的过程,老师便在黑板上清晰地画出了利用RSA进行数字签名过程图,李三方才明白是什么一回事.假设数字签名的原文方为A,按收方为B,A的公钥为(e,n),私钥为 ...

  9. 集合流之"计算集合中的Integer或Double或BigDecimal的sum总和(累计)"

    一.BigDecimal类型 BigDecimal withdrawalFeeExchange = groupDeverList.stream().map(DevWeekReport::getWith ...

  10. 从零开始,打造一款属于自己的JavaScript编程语言

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...