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

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

前言

  • 问题列表

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

  • 举例说明

    假设上游服务是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

高并发解决方案之熔断处理相关推荐

  1. Java 高并发_JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过!...

    JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过! 1.JPG (37.82 KB, 下载次数: 0) 2018-12-3 09:40 上传 2.JPG (28 ...

  2. 互联网高并发解决方案相关面试题

    高并发服务限流特技有哪些算法? 传统计算器算法,滑动窗口计数器算法,令牌桶算法和漏桶算法. 传统计数器限流算法有什么弊端? 传统计数器限流方式不支持高并发,存在线程安全问题.若大量访问请求集中在计数器 ...

  3. 《Java并发编程入门与高并发面试》or 《Java并发编程与高并发解决方案》笔记

    <Java并发编程入门与高并发面试>or <Java并发编程与高并发解决方案>笔记 参考文章: (1)<Java并发编程入门与高并发面试>or <Java并发 ...

  4. [转]淘宝下单高并发解决方案

    周末参加了@淘宝技术嘉年华 主办的技术沙龙, 感觉收获颇丰,非常感谢淘宝人的分享.这里我把淘宝下单高并发解决方案的个人理解分享一下.我不是淘宝技术人员,本文只是写自己的理解,所以肯定是会有一些出入的. ...

  5. 关于SQL SERVER高并发解决方案

    现在大家都比较关心的问题就是在多用户高并发的情况下,如何开发系统,这对我们程序员来说,确实是值得研究,最近找工作面试时也经常被问到,其实我早有去关心和了解这类问题,但一直没有总结一下,导致面试时无法很 ...

  6. 打车业务下单高并发解决方案

    简介: 打车业务下单高并发解决方案 前言 在技术领域有一条准则,即不存在银弹技术.在实际工作中,通常无法通过几项简单的技术组合就解决实际业务中各种场景下的复杂问题.虽然追求架构的简单简洁也是架构师的目 ...

  7. 高并发解决方案--负载均衡

    高并发解决方案--负载均衡 1,什么是负载均衡? 当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能.那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首 ...

  8. 【java】 java 高并发解决方案和高负载优化方法

    [java] java 高并发解决方案和高负载优化方法 参考文章: (1)[java] java 高并发解决方案和高负载优化方法 (2)https://www.cnblogs.com/lonelywo ...

  9. 数据库高并发解决方案(一)查询优化

    数据库高并发解决方案(一)查询优化 参考文章: (1)数据库高并发解决方案(一)查询优化 (2)https://www.cnblogs.com/wanglijun/p/10879314.html 备忘 ...

最新文章

  1. 阿联酋gitex_航空公司网站不在乎您的隐私后续行动:阿联酋航空以以下方式回应我的文章:...
  2. Php-SPL库中的迭代器类详解(转)
  3. Matlab调用函数实现CIC滤波器
  4. 托管代码与非托管代码
  5. 腾讯云服务器搭建WampServer环境
  6. 标准PSO辨识NARMAX模型源码程序
  7. 【一雪前耻!】两种方法判断大小端模式
  8. react报Maximum update depth exceeded
  9. Django模型之Meta选项详解
  10. v-model数据绑定分析
  11. (原创)Python 自动化测试框架详解
  12. HDU.1007 Quoit Design
  13. JavaScript console.log导致错误:“不赞成在主线程上使用同步XMLHttpRequest…”
  14. C++ STL 一个简单的文件输入输出示例
  15. 下一代防火墙评测--网界
  16. Java给树加子节点个数统计
  17. 相机sd卡格式化后还能不能数据再恢复
  18. 阶乘很简单?恕我直言,阶乘相关的面试题你还真不一定懂!
  19. Openresty 安装luarocks
  20. Web3:开源文化下的技术创新

热门文章

  1. 六大主流防火墙正确设置技巧(转)
  2. 使用SyGate代理服务器使局域网连接到Internet
  3. 第一课时(下):破解基础之常见加壳程序特征
  4. 免费的在线影视网站汇总(包括图片,小说等)
  5. unity实战之lol技能释放范围
  6. 快速排序(附优化方案)
  7. glibc中malloc的详细解释
  8. 顺序Gauss 消元法
  9. 泛圈科技:YottaChain数据存储的最佳选择
  10. 密码泛在化实践者之路