容错模式全景
容错不是银弹,但离了容错寸步难行。
分布式系统就像一个精密的生态系统,故障是常态而非例外。一次网络抖动、一个数据库慢查询、一段 GC 停顿——这些看似微小的问题,在复杂的调用链中会被放大,最终演变成一场全站故障。
容错模式是应对这些问题的系统性方法论。不是靠「多加服务器」来硬扛,而是通过设计让系统在面对局部故障时依然保持整体可用。
容错模式的完整图谱
三大类容错模式
容错模式组合使用
单一容错模式往往不够,需要组合使用才能应对复杂的故障场景:
为什么需要组合使用?
- 限流:保护系统不被突发流量冲垮
- 超时:防止请求无限等待
- 熔断:当故障持续时快速失败,不再调用
- 重试:处理瞬时故障
- 降级:故障发生时返回有损但可用的结果
模式之间的关系
容错模式的选型指南
容错设计的原则
原则一:分层设计
每一层都需要自己的容错机制:
原则二:快速失败优于等待
当系统已经出现问题时,继续等待只会让情况更糟:
原则三:降级要优雅
降级不是「返回空」或「抛异常」,而是返回「尽可能有用的部分功能」:
容错模式的常见误区
误区一:只加模式,不加监控
容错机制生效时,团队可能完全不知道——直到用户投诉。
正确做法:监控容错机制本身,包括熔断器状态、重试次数、限流触发次数。
误区二:重试次数过多
重试是把双刃剑,太多重试会放大故障。
正确做法:限制重试次数,使用指数退避。
误区三:降级逻辑太简单
降级返回 null 或空对象,可能导致下游代码空指针异常。
正确做法:设计有意义的降级响应,而非简单返回空。
本章总结
核心要点:
- 容错模式分为三类:预防性、检测性、恢复性,各有分工
- 容错模式需要组合使用:限流 + 超时 + 熔断 + 重试 + 降级形成完整链路
- 快速失败优于等待:让问题快速暴露,而非堆积后崩溃
- 降级要优雅:返回有意义的兜底数据,而非简单返回空
- 监控容错机制本身:知道什么时候降级了、什么时候熔断了
接下来我们将深入讲解每个具体的容错模式,从最核心的熔断器模式开始。