作者简介:曾任职于阿里巴巴,每日优鲜等互联网公司,任技术总监,15年电商互联网经历。

关于熔断,网上的文章很多,但是真正讲明白的文章寥寥无几。很多作者互相抄袭,缺乏自己的认知和理解。

分享熔断之前,咱们先说说大家更熟悉的Timeout。Timeout和熔断有关系吗?别急,往下看就清楚啦!

我们在跨系统调用、跨服务调用以及调用第三方接口时,一般会设置超时时间。有两个作用:其一,出于用户体验考虑,啥结果也不返回,一直让人等下去,确实受不了。其二,出于系统性能问题的考虑,并发不高时timeout可以避免线程阻塞带来的性能问题,但是并发高时timeout就不能解决问题啦。

现在轮到熔断大显身手了。

熔断是什么?

一种降级手段。当服务不可用时,用来避免连锁故障,雪崩效应。发生在服务调用的时候,在调用方做熔断处理。

熔断的意义是什么?

我们使用熔断前要先弄清楚熔断的真正意义,避免用错给系统带来麻烦。实际上,用一句话就可以描述熔断的意义:上游服务快速失败(Fail Fast),并保护下游服务

详细解释一下,假设上游服务是A,下游服务是B,A调用B,B发生故障,开启熔断:

  • 对于上游服务A:请求到A后直接快速返回(返回值可以是默认值,或者通过一种后背(Fallback)方案获取的值),快速失败,不再发送到B。 避免因为B故障,导致请求线程持续等待,进而导致线程池线程和CPU资源耗尽,进而导致A无响应甚至整条调用链故障。

  • 对于下游服务B:熔断后,请求被A拦截,不再发送到B,B压力得到缓解,避免了仍旧存活的B被压垮,B得到了保护。

熔断状态流转过程:

假设上游服务是A,下游服务是B,A调用B。

熔断生命周期包括三个状态:关闭,半开启,开启。

关闭状态->开启状态,A调用B请求失败次数在设定时间内达到阈值,开启熔断

开启状态->半开启状态,熔断开启后,熔断器根据设定时间间隔定期自动进入半开启状态

半开启状态->关闭状态(或开启状态),半开启状态下会从A发送少量请求到B来试探B服务是否能正常提供服务,如果请求成功率达到阈值就关闭熔断,否则就回到熔断开启状态

熔断适用场景

出于系统性能问题的考虑,并发不高时timeout可以避免线程阻塞带来的性能问题,但是并发高时timeout就不能解决问题啦。这时可以用熔断。

只要是服务之间的调用,并且能设计合理的获取返回值的方案(返回值可以是默认值,或者通过一种后备(Fallback)方案获取的值),一般业务场景都可以做熔断处理。比如电商行业,在sku不是很多的场景下,我们可以在订单服务冗余库存数据(注意控制合理的安全库存,防超卖)。下单减库存时,如果库存服务挂了,开启熔断后,我们可以直接从订单服务取库存,订单服务取不到库存,按扣减库存失败处理。这个可以做为后备(Fallback)方案。

有哪些开源实现

Hystrix,Resilience4j等

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

熔断的意义和适用场景,你真的清楚吗?相关推荐

  1. Html页面head标签元素的意义和应用场景

    相信在html5之前,很少人会关注html页面上head里标签元素的定义和应用场景,可能记得住的只有"title"."keyword"和"descri ...

  2. SpringCloud微服务的熔断机制和熔断的意义?

    什么是微服务的熔断机制 在2017年2月1日,GitLab公司的运维人员就出现过这样的事故.当时运维人员在进行数据库维护时,通过执行rm -rf命令,删除了约300GB生产环境数据.由于数据备份失效, ...

  3. 消息中间件的意义和应用场景 (activeMq)

    消息中间件一般两个功能,解耦和异步处理,分别举个例子吧 解耦合: 比如我们做一个微博产品中的好友系统,就很需要使用消息中间件 当我们添加一个关注的时候, 涉及以下几个子系统 推荐系统,需要根据你关注的 ...

  4. Html学习总结(2)——Html页面head标签元素的意义和应用场景

    相信在html5之前,很少人会关注html页面上head里标签元素的定义和应用场景,可能记得住的只有"title"."keyword"和"descri ...

  5. qos 流控功能_探讨一下QoS存在的意义以及使用场景

    2012年时在使用上海电信2.6MB下行/135KB上行的带宽时,当时没设定了QOS的网络下载迅雷连 路由管理界面都打不开,而设定了QOS则可以正常打开web管理界面至今想不通为什么. 从我的思维我认 ...

  6. 数字化工厂建设智能车间的意义与应用场景

    工厂数字化车间是智能车间的第一步,也是实现智能制造的重要基础.事实上,无论任何行业,凡是涉及到生产,都离不开生产车间.工厂数字化车间建设有三条主线: 第一条主线是以机床.热处理设备.机器人.测量测试设 ...

  7. AI 场景的价值体现——视觉 AI 技术落地实践

    https://www.infoq.cn/article/2017/12/Ground-practice-visual-AI?utm_source=related_read&utm_mediu ...

  8. Spring Cloud Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)

    文章目录 一. Sentinel概念 1. 什么是Sentinel? 2. Sentinel功能特性 3. Sentinel VS Hystrix 二. Docker部署Sentinel Dashbo ...

  9. Sentinel 熔断降级原理

    Sentinel 熔断降级原理 一.概述 对于熔断这个概念,我们并不陌生,比如股市熔断机制,当股指波幅达到规定的熔断点时,交易所为控制风险采取的暂停交易措施.亦或者是电流熔断,当通过的电流超出导线所能 ...

最新文章

  1. 不愧是大佬用Python做一个游戏辅助脚本,完整编程思路分享!
  2. dva 中使用绝对路径/别名的方法
  3. 成功解决ValueError: fill value must be in categories
  4. python编的俄罗斯方块游戏_手把手制作Python小游戏:俄罗斯方块(一)
  5. consumer和partition的数量建议
  6. 【AI面试题】Softmax的原理是什么,有什么作用
  7. 运营九年,这款音乐手游宣布停服!将从应用商店下架...
  8. 杭电4506小明系列故事——师兄帮帮忙
  9. [No0000120]Python教程3/9-第一个Python程序
  10. 魔法方法——Python
  11. 进程和线程的基本概念与区别
  12. poster模板_高分北斗大赛报名进行中,ppt、poster展示模板推送
  13. SQL: 员工薪水中位数
  14. 新手小白如何挑选吉他,附几款超高性价比吉他推荐
  15. 佳能软件不用光盘安装升级包的方法
  16. JavaWeb开发基础:连接数据库的demo和数据库连接工具类DB.java
  17. 启动RocketMQ报错:Please set the JAVA_HOME variable in your environment, We need java 64
  18. 蓝牙耳机+大鼠标垫+笔记本电脑支架
  19. window.scrollTo滚动
  20. js判断当前电脑是否安装flash插件

热门文章

  1. 16项不可抗拒的云创新
  2. 如何解决Linux下侦听端口被占用
  3. Python中的super()用法
  4. 计算机ppt继续教育,泰州市专业技术人员继续教育公需科目PPT2010试卷及答案
  5. df满足条件的值修改_文科生学 Python 系列 16:泰坦尼克数据 2(缺失值处理)
  6. python中使用flask实现人脸实时检测
  7. 用matlab读取三角波及其频谱,信号与系统利用MATLAB分析信号频谱作业(第四章)以及结论.doc...
  8. php ascii转native,编码转换工具native2ascii的使用
  9. python输出到语音播放_用Python写一个语音播放软件
  10. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13