架构设计容错篇之熔断

avatar

背景

你是否有过这样的经历:家里停电了,但转头发现别人家却还有电。
这种情况,十有八九是电闸中的保险丝烧了,那保险丝为什么会烧掉呢?
因为,当电路发生故障或异常时,伴随着电流不断升高,保险丝的热度也会随之升高,到了一定的热度保险丝便会被熔断,从而使电路被断开。
那它有什么作用?显然是具有保护作用。你想想,假设是因为你家同时开启了很多大功率的设备导致的电流不断升高,此时如果保险丝不自熔断,那么会很容易引起电线外表过热发烫直至酿成火灾或者导致电器被烧坏。
保险丝也被称之为熔断器,不仅仅电闸中有熔断器,其它家用电器如洗衣机、电饭煲、空调中也都有相应的熔断器,其作用都是在保护电器本身不受外部电路故障的影响。

avatar

同样,在分布式的微服务架构中,我们也需要为服务配备一个熔断器,用于保护服务不受外部故障的影响。
为什么?微服务架构的应用系统像一张网,服务是网中的节点,服务调用是网中的关系。假设网中的某个服务发生故障或异常如请求超时,如果不对它的上游服务加以保护,那么该故障会借助"网"蔓延至上游服务,
导致上游服务的请求也超时;接下来,上游服务又将故障以相似的方式往上传播给它的上游服务,如此这般直至这个网中的服务都受影响,从而使整个系统处于完全不可用的状态。
这便是由单点故障所引起的连级故障,如果不切断故障的传播那么对整个系统的影响是灾难性的。

问题

在分布式的系统中,个别服务出现调用超时、不可用等故障是正常的。
但因为有些故障具有"传播性",如果其它服务不具备切断故障的自保能力,那么就不可避免的会受故障的影响。
所以,受电闸、电饭煲等电器中熔断器的启发,人们为微服务架构的应用引入了熔断这一概念。
熔断机制其实非常的简单,即:在上游服务调用下游服务时,如果下游服务的失败率超过一定的阀值,那么上游服务就不再调用下游服务,从而保护服务自身不受故障的影响。
在微服务中,实现熔断机制的东西被称为熔断器。

方案

avatar

熔断器位于上下游服务或消费者与提供者之间,当消费者调用提供者之前,会询问熔断器是否可以执行调用操作,如果提供者的调用失败率超过预设的阀值,那么熔断器便会打开,打开意味着调用操作不允许执行。熔断器通过下面三种状态来控制调用操作是否可执行。

avatar

关闭状态(Closed):当熔断器处于该状态时,调用操作可以正常执行,但会用一个计数器来统计一段时间内调用操作的失败次数,当然也会统计总次数和成功次数。

打开状态(Open):当一段时间内调用操作的错误率(失败次数/成功次数+失败次数)大于设定的阀值时,熔断器会进入打开状态,需要等待熔断时间超时;此时,调用操作不再被允许执行。

半开状态(HalfOpen):当等待时间超过熔断时长时,熔断器会进入半开状态;此时,会放行某个调用操作,如果执行成功那么熔断器进入关闭状态,如果执行失败那么熔断器再次回到半开状态。

回退策略
avatar

无论是熔断器处于打开状态还是执行操作失败,服务此时已经发生了错误,是将异常直接返回给消费者呢?还是有补偿机制可以弥补错误?这都需要根据具体的情况选择不同的应对策略,常见的回退策略有下面几种。

快速失败(fail-fast):直接抛出异常,适用于错误无法补救的场景,如:支付、下单等。

故障沉默(fail-silent):返回空值或缺省值如空字符、空数组、空列表等,适用于一些可降级的功能,如猜你喜欢、商品推荐等不影响用户使用的功能。

缓存(cache):放回缓存数据,适用于读接口并且脏数据对用户的影响不大,如:订单列表,收藏等。

总结

在分布式架构中,因为下游服务的某些故障具有传播性,所以上游服务需要具有即时熔断故障对其影响的能力,从而避免故障一层层往上传播引起连级故障致使整个系统不可用的风险。

扩展阅读

架构设计思维篇之结构

架构设计思维篇之概念

架构设计容错篇之重试

架构设计容错篇之熔断

架构设计容错篇之限流

架构设计事务篇之Mysql事务原理

架构设计事务篇之CAP定理

架构设计事务篇之分布式事务

架构设计消息篇之消息丢失

架构设计消息篇之保证消息顺序性

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容