漫画:什么是服务熔断?

简介: 熔断这一概念来源于电子工程中的断路器(Circuit Breaker)。在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。

image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png



小灰的答题策略,是遇到难题不断思考、不断思考,一直到考试结束为止。可以用下面这张图流程图来表示:

image.png


大黄的答题策略,是遇到难题先尝试几次思考,如果尝试一定次数不成功,则果断放弃,继续回答别的题目。等别的题目回答完毕,再回过头来重新思考那道难题。可以用下面这张图流程图来表示:

image.pngimage.png


image.png



什么是服务熔断?


熔断这一概念来源于电子工程中的断路器(Circuit Breaker)。在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。


这种牺牲局部,保全整体的措施就叫做熔断


如果不采取熔断措施,我们的系统会怎样呢?我们来看一个栗子。


当前系统中有A,B,C三个服务,服务A是上游,服务B是中游,服务C是下游。它们的调用链如下

image.png


一旦下游服务C因某些原因变得不可用,积压了大量请求,服务B的请求线程也随之阻塞。线程资源逐渐耗尽,使得服务B也变得不可用。紧接着,服务A也变为不可用,整个调用链路被拖垮。

image.png


像这种调用链路的连锁故障,叫做雪崩



正所谓刮骨疗毒,壮士断腕。在这种时候,就需要我们的熔断机制来挽救整个系统。熔断机制的大体流程和刚才所讲的考试策略如出一辙:

image.png


这里需要解释两点:


1.开启熔断

在固定时间窗口内,接口调用超时比率达到一个阈值,会开启熔断。进入熔断状态后,后续对该服务接口的调用不再经过网络,直接执行本地的默认方法,达到服务降级的效果。


2.熔断回复

熔断不可能是永久的。当经过了规定时间之后,服务将从熔断状态回复过来,再次接受调用方的远程调用。

image.pngimage.png


服务熔断的实际应用

image.png


Spring Cloud Hystrix是基于Netflix的开源框架Hystrix实现,该框架实现了服务熔断线程隔离等一系列服务保护功能。


对于熔断机制的实现,Hystrix设计了三种状态:


1.熔断关闭状态(Closed)

服务没有故障时,熔断器所处的状态,对调用方的调用不做任何限制。

2.熔断开启状态(Open)

在固定时间窗口内(Hystrix默认是10秒),接口调用出错比率达到一个阈值(Hystrix默认为50%),会进入熔断开启状态。进入熔断状态后,后续对该服务接口的调用不再经过网络,直接执行本地的fallback方法

3.半熔断状态(Half-Open)

在进入熔断开启状态一段时间之后(Hystrix默认是5秒),熔断器会进入半熔断状态。所谓半熔断就是尝试恢复服务调用,允许有限的流量调用该服务,并监控调用成功率。如果成功率达到预期,则说明服务已恢复,进入熔断关闭状态;如果成功率仍旧很低,则重新进入熔断关闭状态。


三个状态的转化关系如下图:

image.pngimage.pngimage.png


—————END—————

相关文章
|
3月前
|
监控 Java API
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
先简单介绍熔断、降级等核心概念,然后阐述SpringBoot整合Sentinel的实现方式,最后介绍Sentinel在本项目中的应用。
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
|
4月前
|
缓存 监控 负载均衡
一文讲明Hystrix熔断器
这篇文章详细阐述了Hystrix熔断器的原理和应用,解释了分布式系统中服务雪崩的问题,并展示了如何在Spring Cloud框架中使用Hystrix进行熔断和降级处理。
一文讲明Hystrix熔断器
|
4月前
|
存储 设计模式 算法
一文讲透自适应熔断的原理和实现
一文讲透自适应熔断的原理和实现
|
算法 NoSQL Java
6种限流实现,附代码![通俗易懂]
6种限流实现,附代码![通俗易懂]
744 0
6种限流实现,附代码![通俗易懂]
|
JSON 监控 算法
阿里限流神器Sentinel夺命连环 17 问?
阿里限流神器Sentinel夺命连环 17 问?
|
缓存 运维 监控
SpringCloud-Hystrix——让你的系统稳一点儿
在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会出现因等待出现故障的依赖方响应而形成任务积压,线程资源无法释放,最终导致自身服务的瘫痪,进一步甚至出现故障的蔓延最终导致整个系统的瘫痪,导致服务雪崩效应。为了解决这样的问题,产生了断路器等一系列的服务保护机制。
|
缓存 运维 监控
21.【学习心得】学习心得-限流和降级
【学习心得】学习心得-限流和降级
21.【学习心得】学习心得-限流和降级
|
消息中间件 缓存 运维
10张图带你彻底搞懂限流、熔断、服务降级
10张图带你彻底搞懂限流、熔断、服务降级
1359 0
10张图带你彻底搞懂限流、熔断、服务降级
|
Java BI Sentinel
冷饭新炒:理解断路器CircuitBreaker的原理与实现(下)
笔者之前在查找Sentinel相关资料的时候,偶然中找到了Martin Fowler大神的一篇文章《CircuitBreaker》。于是花了点时间仔细阅读,顺便温习一下断路器CircuitBreaker的原理与实现。
309 0
|
负载均衡 关系型数据库 MySQL