高并发解决方案之熔断处理

article/2025/9/20 10:08:27

高并发解决方案之熔断处理

  • 前言
  • 概念
  • 基本介绍
  • 三种状态
  • 熔断方式
  • 常用框架
    • 功能对比
    • 使用介绍
  • 参考链接

前言

  • 问题列表

    跨系统、跨服务调用第三方接口时,第三方接口响应超时或者服务不可用,发生连锁故障进而导致雪崩效应。

  • 举例说明

    假设上游服务是A,下游服务是B,A调用B,B发生故障,导致请求线程持续等待,进而导致线程池线程和CPU资源耗尽,最终导致A无响应甚至整条调用链故障。

概念

  • 熔断是什么?

    熔断一般是指依赖的外部接口出现故障的情况断绝和外部接口的关系强调的是服务之间的调用能实现自我恢复的状态

  • 作用

    在服务的依赖调用中,被调用方出现故障时,熔断通过限制自己对外部系统的调用,起到节约响应时间、维护链路稳定的作用。

    熔断流程简图

基本介绍

  • 熔断流程图

    熔断流程图

  • 考虑问题

    1. 针对不同的异常,定义不同的熔断后处理逻辑

    2. 设置熔断的时长,超过这个时长后切换到HALF OPEN进行重试。

    3. 记录请求失败日志,供监控使用。

    4. 主动重试,比如对于connection timeout造成的熔断,可以用异步线程进行网络检测,比如telenet,检测到网络畅通时切换到HALF OPEN进行重试。

    5. 补偿接口,断路器可以提供补偿接口让运维人员手工关闭

    6. 重试时,可以使用之前失败的请求进行重试,但一定要注意业务上是否允许这样做

  • 适用场景

    1. 服务故障或者升级时,让客户端快速失败;

    2. 失败处理逻辑容易定义;

    3. 响应耗时较长,客户端设置的read timeout会比较长,防止客户端大量重试请求导致的连接、线程资源不能释放。

三种状态

  • CLOSED

    默认状态。断路器观察到请求失败比例没有达到阈值,断路器认为被代理服务状态良好。

  • OPEN

    断路器观察到请求失败比例已经达到阈值,断路器认为被代理服务故障,打开开关,请求不再到达被代理的服务,而是快速失败。

  • HALF OPEN

    断路器打开后,为了能自动恢复对被代理服务的访问,会切换到半开放状态,去尝试请求被代理服务以查看服务是否已经故障恢复。如果成功,会转成CLOSED状态,否则转到OPEN状态。

熔断方式

  • 主调熔断

    主调熔断是熔断的主要场景,在微服务中是结合服务注册和发现组件来使用的。主调通过服务发现组件来获取被调的实例,如果主调的失败达到了一个阈值,服务发现组件会熔断被调的实例

  • 被调熔断

    被调熔断,被调实例获取当前的实例负载情况,如果 cpu/内存/io 等超过了一定的阈值,那么就会触发熔断,将抛弃进来的请求。此时熔断和限流比较像,一个是基于负载情况,一个是根据配置的阈值情况。

常用框架

功能对比

  • 对比图

    熔断技术选型对比

使用介绍

  • hystrix

    <dependency><groupId>com.netflix.hystrix</groupId><artifactId>hystrix-core</artifactId><version>1.4.21</version></dependency>
  • Resilience4j

    <dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-circuitbreaker</artifactId><version>1.3.1</version></dependency>

    断路器 resilience4j-circuitbreaker:超过故障率的熔断
    限流 resilience4j-ratelimiter:指定时间周期内,限制访问次数。
    基于信号量的隔离 resilience4j-bulkhead:设置最大并发数量。
    请求重试 resilience4j-retry:针对指定异常,进行重试。
    限时 resilience4j-timelimiter:限制方法最大执行时长。

    创建流程

    正常创建熔断器对象的过程是 “CircuitBreakerConfig -> CircuitBreakerRegistry -> CircuitBreaker”。

  • sentinel

    <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.2</version></dependency>

    DegradeSlot

    这个 slot 主要针对资源的平均响应时间(RT)以及异常比率,来决定资源是否在接下来的时间被自动熔断掉。

参考链接

  • Hystrix

    https://github.com/Netflix/Hystrix/wiki

  • 熔断降级

    https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7

  • 限流熔断技术选型:从Hystrix到Sentinel

    https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653550514&idx=1&sn=7b3adba358cbaa367eab9642db22215c

  • Re手册-工具篇 - Resilience4j服务熔断

    https://segmentfault.com/a/1190000022908483

  • (四)Sentinel限流&熔断实践

    https://zhuanlan.zhihu.com/p/455438260

  • circuitBreaker

    https://github.com/hirudy/circuitBreaker

  • sds

    https://github.com/didi/sds


http://chatgpt.dhexx.cn/article/uNGNRB96.shtml

相关文章

阿里云高并发解决方案

今天这篇帖子我会讲解一下金蝶财务软件K3_CLOUD高并发部署在阿里云上得解决方案,本篇博客同样适用于其他软件高并发上云部署 以我去年12月份的一个客户项目为例。 做过项目的朋友都知道,小客户比较关注的是成本,大客户关注的是价值和服务。高并发客户一般都会有专业的IT运…

高并发解决方案相关面试题

什么是DNS解析域名 DNS域名解析就是讲域名转化为不需要显示端口&#xff08;二级域名的端口一般为80&#xff09;的IP地址&#xff0c;域名解析的一般先去本地环境的host文件读取配置&#xff0c;解析成对应的IP地址&#xff0c;根据IP地址访问对应的服务器。若host文件未配置…

Token高并发解决方案

Token高并发解决方案 一&#xff1a;作为token使用的第三方 客户端模式使用token 可以采用单例模式或定义一个全局变量isRefresh 标志&#xff0c;加同步锁Synchronized来保证token过期的那个时间点&#xff0c;刷新token方法只被调用一次。 二&#xff1a;作为token服务器端…

大数据和高并发解决方案

一、网站应用背景 开发一个网站的应用程序&#xff0c;当用户规模比较小的时候&#xff0c;使用简单的&#xff1a;一台应用服务器一台数据库服务器一台文件服务器&#xff0c;这样的话完全可以解决一部分问题&#xff0c;也可以通过堆硬件的方式来提高网站应用的访问性能&…

电商中常见的高并发解决方案

目录 多级缓存 什么叫多级缓存 多级缓存的实现思路 Redis 缓存同步 MySql 数据 Nginx 限流 什么是限流 常见的限流算法之漏桶算法 nginx 限流的方式 控制速率 控制并发量&#xff08;连接数&#xff09; 在本文中&#xff0c;我们将以京东为例&#xff0c;了解电商中…

【数据科学】斯皮尔曼的等级相关系数(Spearman's coefficient)

在统计数据中&#xff0c;斯皮尔曼的等级相关系数或斯皮尔曼的rho&#xff0c;以查尔斯斯皮尔曼命名并经常用希腊字母表示或&#xff0c;是秩相关的非参数度量&#xff08;两个变量的排名之间的统计依赖性&#xff09;。它评估了使用单调函数描述两个变量之间关系的程度。 两个…

python 利用Scipy计算person 和spearman相关系数

python 利用Scipy计算person 和spearman相关系数 觉得有用的话,欢迎一起讨论相互学习~ 学习以下两位大佬的讲解 (Pearson)皮尔逊相关系数和spearman相关系数&#xff08;附python实现&#xff09; 相关性系数及其python实现 皮尔逊相关系数 下面是皮尔逊相关系数的计算公式…

Python+pandas计算数据相关系数(person、Kendall、spearman)

pandas中DataFrame对象corr()方法的用法&#xff0c;该方法用来计算DataFrame对象中所有列之间的相关系数&#xff08;包括pearson相关系数、Kendall Tau相关系数和spearman秩相关&#xff09;。 pandas相关系数-DataFrame.corr()参数详解 DataFrame.corr(methodpearson, min_p…

相关性Correlations 皮尔逊相关系数(pearson)和斯皮尔曼等级相关系数(spearman)

相关性Correlations Correlations&#xff0c;相关度量&#xff0c;目前Spark支持两种相关性系数&#xff1a;皮尔逊相关系数&#xff08;pearson&#xff09;和斯皮尔曼等级相关系数&#xff08;spearman&#xff09;。相关系数是用以反映变量之间相关关系密切程度的统计指标。…

spearman学习

特征提取&#xff0c;预测都弄完了&#xff0c;现在要检查一下预测的效果。 spearman秩相关系数是度量两个变量之间的统计相关性的指标&#xff0c;用来评估当用单调函数来描述两个变量之间的关系有多好。在没有重复数据的情况下&#xff0c;如果一个变量是另外一个变量的严格…

R语言中进行Spearman等级相关分析

摘要 使用Spearman等级相关性测试两个等级变量或一个等级变量和一个测量变量之间的关联。 如果您担心非正态性&#xff0c;也可以对两个测量变量使用Spearman等级相关性而不是线性回归/相关性&#xff0c;但这通常不是必须的。 宏伟的军舰鸟&#xff08;军舰鸟magnificens&…

相关系数pearson、spearman、kendall和R语言中的cor/or.test()

相关系数pearson、spearman、kendall和R语言中的cor/cor.test 1. 相关系数pearson、spearman、kendall2. R语言cor函数和cor.test函数 1. 相关系数pearson、spearman、kendall Pearson相关系数很简单&#xff0c;是用来衡量两个数据集的线性相关程度&#xff1b;而Spearman相关…

皮尔逊(Pearson)相关系数与spearman相关系数(Python实现)

概念介绍 相关系数&#xff1a;考察两个事物&#xff08;在数据里我们称之为变量&#xff09;之间的相关程度。 相关系数大小解释 相关性绝对值无相关0 - 0.09弱相关0.1 - 0.3中相关0.3 - 0.5强相关0.5 - 1 表中所定的标准从某种意义上说是武断的和不严格的。 对相关系数的解…

3.1 相关系数(person与spearman)

1.1总体皮尔逊&#xff08;person&#xff09;相关系数&#xff1a; 在概率论与数理统计中我们学到&#xff0c;若两组数据X{x1&#xff0c;x2…xn}与Y{y1&#xff0c;y2…yn}为总体数据&#xff0c;则总体协方差为 它表示两个变量的总体误差&#xff0c;若XY相对于各自均值同…

斯皮尔曼相关(spearman)系数法

在分析指标与指标、指标与研究对象的影响程度时&#xff0c;很多时候会用到相关系数法&#xff0c;下面介绍一下斯皮尔曼相关系数法。 斯皮尔曼等级相关是根据等级资料研究两个变量间相关关系的方法。它是依据两列成对等级的各对等级数之差来进行计算的&#xff0c;斯皮尔曼等级…

Spearman 相关性分析法,以及python的完整代码应用

Spearman 相关性分析法 简介 Spearman 相关性分析法是一种针对两个变量之间非线性关系的相关性计算方法&#xff0c;同时&#xff0c;它不对数据的分布进行假设。该方法的基本思想是将两个&#xff08;也可以多个&#xff09;变量的值进行排序&#xff0c;并计算它们之间的等…

统计学三大相关系数之斯皮尔曼(spearman)相关系数

斯皮尔曼相关性系数&#xff0c;通常也叫斯皮尔曼秩相关系数。“秩”&#xff0c;可以理解成就是一种顺序或者排序&#xff0c;那么它就是根据原始数据的排序位置进行求解&#xff0c;这种表征形式就没有了求皮尔森相关性系数时那些限制。下面来看一下它的计算公式&#xff1a;…

相关系数(皮尔逊pearson相关系数和斯皮尔曼spearman等级相关系数)

目录 总体皮尔逊Person相关系数&#xff1a; 样本皮尔逊Person相关系数&#xff1a; 两点总结&#xff1a; 假设检验&#xff1a;&#xff08;可结合概率论课本假设检验部分&#xff09; 皮尔逊相关系数假设检验&#xff1a; 更好的方法&#xff1a;p值判断方法 皮尔逊相…

三大统计学相关系数(pearson、kendall、spearman)

一、皮尔逊相关系数 前边文章讲了很多了&#xff0c;这里不详细讲了&#xff0c;想了解的可以看这篇。 相似度计算&#xff08;2&#xff09;——皮尔逊相关系数 适用范围&#xff1a; 当两个变量的标准差都不为零时&#xff0c;相关系数才有定义&#xff0c;皮尔逊相关系数适…

Pearson相关系数和Spearman相关系数的区别

Pearson相关系数和Spearman相关系数的区别 1、协方差、相关系数2、Pearson相关系数3、Spearman相关系数3.1 定义3.2 什么时候用 4、两者的区别点4.1 线性相关与单调相关4.2 前提假设不同4.3 变量正态分布与否 5、实例展示6、参考资料 参考资料前两个博客讲解的非常详细&#xf…