知识卡片
断路器三态转换机制及服务熔断与服务降级的区别
内容
断路器是[[七种容错策略分为事后弥补与事前保险两大类]]里”快速失败”策略最 基础的实现方式:用一个代理对象一对一接管远程调用,持续统计成功/失败/ 超时/拒绝的结果,一旦故障达到阈值就切换到OPEN状态,此后的调用直接返回 失败、根本不再真正发出远程请求,从而避免持续失败/超时对系统资源的消耗。 三态是一个有限状态机:CLOSED(正常放行真实请求,持续监控统计结果); OPEN(直接拒绝、快速失败);HALF OPEN(OPEN一段时间后由下一次请求触发, 放行一次真实调用探路,根据这次结果决定转回CLOSED还是退回OPEN,实现 弹性恢复)。CLOSED转OPEN不是”一次失败就跳闸”,而要同时满足”一段时间内 请求量达到阈值”(请求太少没必要触发)和”故障率达到阈值”(大部分都成功 也没必要触发)两个条件。断路器实现的是”服务熔断”——一种自动化的快速 失败技术手段;”服务降级”则是熔断之后上游服务该做什么的业务逻辑,是 故障发生后主动想办法绕过问题(比如把要处理的业务先记下来、留待以后 重新处理),而不是坐视故障扩散——用书中的比喻:连续打你电话没人接、换 了三个朋友电话也没打通(快速失败+故障转移都失败了),最后改用微信留言 (这个”换个方式解决问题”的动作就是降级)。降级不一定被动发生在出错后, 也可能是为应对可预见峰值流量而主动关闭部分功能,这时它就属于流量控制 的范畴而非容错。
结构图:
stateDiagram-v2
[*] --> CLOSED
CLOSED --> OPEN: 一段时间内请求量达阈值 且 故障率达阈值
OPEN --> HALFOPEN: 一段时间后由下一次请求触发
HALFOPEN --> CLOSED: 探路调用成功
HALFOPEN --> OPEN: 探路调用失败
参考来源
- 位置:《凤凰架构:构建可靠的大型分布式系统》第8章"流量治理"8.1.2节
"容错设计模式"(源文件:_epub-src对应OEBPS/Text/chapter99.xhtml)
- 结论依据:原文详述断路器CLOSED/OPEN/HALF OPEN三态转换机制及触发OPEN
的双重条件,并用电话/微信留言的比喻区分服务熔断(快速失败的自动化
手段)与服务降级(故障后主动绕过问题的业务逻辑),直接支撑本卡片结构
梳理。
- 原始内容:断路器的作用是自动进行服务熔断,这是一种快速失败的容错
策略的实现方法。在快速失败策略明确反馈了故障信息给上游服务以后,
上游服务必须能够主动处理调用失败的后果……这里的"处理"指的是一种
典型的服务降级逻辑。