知识卡片

故障-错误-失败三层模型

专业/工作 · 517.c

内容

韧性设计需要先分清三个递进概念:fault(缺陷)是内部状态出错,比如一个本该返回非空值的方法返回了 null;error(错误)是缺陷被触发后系统行为与预期产生的偏差,比如因此抛出空指针异常;failure(失败)是错误没被拦截、最终让系统对外表现异常,比如接口对所有请求都返回 500。三者是链式关系,韧性设计的目标就是在链条的每一环设置屏障,让 fault 不演变成 error,让 error 不扩散成 failure。发散:熔断器、超时、重试这些手段本质上都是在这条链的不同位置插入”止损点”,而不是试图消灭 fault 本身——因为分布式系统里 fault 不是意外,是常态。

参考来源

《Cloud Native Spring in Action》第1章《Introduction to cloud native》