服务熔断和服务降级_分布式系统架构设计三十六式之服务治理 熔断降级模式...

导读

分享是最好的学习,一个知识领域里的 “道 法 术 器” 这四个境界需要从 微观、中观以及宏观三个角度来把握。微观靠实践,中观是套路,宏观靠领悟。本系列文章我把它命名为《分布式系统架构设计三十六式》,讲诉分布式系统里最重要的三十六个虚数的中观套路,而微服务的本质也是分布式,因此搞明白这三十六个最重要的知识点也就同时能搞明白微服务。

在前一篇《分布式系统架构设计三十六式之服务治理-隔板模式》里讲诉了 分布式系统资源隔离设计模式-隔板模式,本文将讲诉服务治理里的“熔断降级”模式。另作者能力与认知都有限,欢迎大家拍砖留念。

动机

在分布式系统里经常会遇到这样的场景:

  1. 系统负载突然过高,比如突发的访问量、过多的请求并发数以及过多的IO等都会造成某个节点故障,比如节点A,然后节点A挂了,又把负载转给节点B,然后节点B又负载过高,接着B又挂了,就这样一连串的挂过去从单点故障造成系统级的级联故障;

  2. 在云服务里“可用性”指标是一个非常重要的SLA指标,在可用性出现不达标的情况下需要根据SLA进行赔偿,因此,我们希望分布式系统不管出现怎么样的故障,比如服务器故障,磁盘故障,网络故障都能保持可用性,起码要保证单点故障不会造成系统故障,比如,在系统出现严重故障的时候,可以停止负载较高的写操作从而保证“读”或者“查询“服务。

对应这两个场景,我们希望在分布式系统里能避免级联故障、提供快速失败快速恢复的能力以及保证服务的高可用,因此,这里引出 “熔断降级模式”

熔断模式

熔断模式也称之为断路器模式,英文单词是“circuit breaker”,“circuit breaker”是一个电路开关,其基本功能是检测到电流过载就中断电路,在检测到电流正常时又能自动或手动恢复工作,从而保护断路器背后的电源设备安全。这里需要将”断路器“与 “保险丝”进行区分,断路器可以通过手动或自动的复位从而恢复正常工作,而保险丝是运行一次必须更换。

在分布式系统里 “熔断模式”的设计思想来源于此,当系统里响应时间或者异常比率或者异常数超过某个阈值时,比如超时次数或重试次数超过某个阈值就会触发熔断,接着所有的调用都快速失败,从而保证下游系统的负载安全,在断开一段时间后,熔断器又打开一点试着让部分请求负载通过,如果这些请求成功那么断路器就恢复正常工作,如果继续失败,则继续关闭服务走快速失败通道,接着继续这个过程直到重试的次数超过一定的阈值从而触发更为严重的“降级模式”

熔断模式设计思路

下图是一个熔断模式的设计思路:

d64dfd9ae5e03d4265cff38e78c06bbf.png

图片来源于引文[1],版权归原作者所有

  1. 首先熔断器是处于闭合(closed)状态的,如果请求超时次数,异常数或者异常比率超过一定的阈值则熔断器会被打开;

  2. 接着熔断器处于打开(Open)状态,所有走到这个路径里的请求会走快速失败通道从而避免负载下行,但是这里不会一直都是打开的,过一个时间周期会自动切换到半打开(Half-open)状态;

  3. 在接下来是半打开(half-open)状态,在这里认为之前的错误可能被修复了,因此允许通过部分请求试着看看能不能处理成功,如果这些请求处理成功,那么就认为之前导致失败的错误已被修复,此时熔断器就切换到闭合状态并且将错误计数器重置。如果这些试着发送的请求还是处理失败,则认为导致之前失败的问题仍然存在,熔断器切回到打开方式,然后开始重置计时器给系统一定的时间来修复错误。半打开状态能够有效防止正在恢复中的服务被突然而来的大量请求再次打挂;

  4. 接着重复以上过程,直到半打开状态重复的次数达到一定的阈值发现故障还没被修复,从而触发”降级“状态

降级模式

服务降级简单来说就是这一功能或服务直接不能用,对比“熔断”,降级是更严重的故障处理方式,最后拿来兜底用的。比如某个功能出故障,“熔断”是不管怎么样,都希望这个功能还能救活,降级是发现试着救了几次发现还是救不活,就下狠心砍掉这个部分,断臂求生,起码要保证整体是活的,这样整体还有救活的希望。

从系统的角度来说降级有 读功能降级,写功能降级以及级联组件降级,自动降级或者人工降级。比如,在云服务里,为了保证高可用性,在出现系统级的故障后,可以把写功能降级,就是这个服务只能读,只能查询不能写了,因此在设计的比较好的云服务里,按时间的维度来度量可用性已经没有太大的意义,因为不管怎么样它都是服务可用的,起码部分服务可用,因此在云服务里更合理的新的衡量可用性的指标方式是请求失败比率。

降级模式设计思路

  • 超时降级:在超时次数达到一个阈值后就降级;

  • 限流降级:某些访问量太大的场景会触发限流,当达到限流阈值后,请求也会被降级;

  • 失败比率降级:在失败的比率达到一定比率后就开始降级;

  • 系统故障降级:比如网络故障,硬盘故障,电源故障,服务器故障;

作者简介

常平,中科大硕,10年+数据相关经验,主要工作背景为分布式系统、存储、缓存、微服务、云计算以及大数据,现就职于DELL EMC。

参考资料

[1] https://en.wikipedia.org/wiki/Circuit_breaker

[2] https://martinfowler.com/bliki/CircuitBreaker.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值