寓言
备用方案和备用司机
老程的物流车队有五十辆卡车,跑省际长途。每辆车配一名主司机,但公司规定出发前必须确认有一个备用司机——如果主司机路上生病、疲劳驾驶触发警报、或者临时有事,备用司机顶上。
这天调度员小侯接了个紧急任务:一台冷链车要在十小时内把疫苗送到六百公里外。他把路线安排好了、主司机安排好了、备用司机也确认了。出发前他又检查了一遍:燃油备用方案有没有?轮胎爆了有没有备胎?冷机坏了有没有备用冷机?GPS 坏了有没有备用导航?
副调度员说:你不是已经有备用司机了吗,还要搞这么多?小侯说:备用司机只管主司机出问题这一种情况。燃油不够、轮胎爆了、冷机坏了,换司机没用。每个环节都要有自己的回退方案。
上路后果不其然,半路上冷机出了故障。备用司机没用——他不会修冷机。但小侯提前安排的备用冷机方案起了作用:在最近的合作冷库停了四十分钟,换了一台冷机继续前进。疫苗准时送达。
事后复盘,小侯画了一张表。系统里任何组件都可能出问题,每个重要组件都应该有一个回退方案。模型挂了就切备用模型——这是模型回退。数据库超时就切只读副本——这是数据库回退。认证服务超时就用缓存凭证——这是认证回退。它们都属于回退这个大框架,但各自面对的是不同的故障点。
有一次,运维团队把模型回退的配置直接套到数据库回退上,结果数据库主库挂了之后,备库因为同步延迟丢了三分钟的数据。事故复盘结论:回退是通用思想,但每个组件的回退策略、切换条件、数据一致性要求都不同。
老程后来给调度手册加了一章,叫「回退分层」。第一层讲回退的通用原则:检测、切换、恢复、通知。第二层讲各类型回退的差异:模型回退关注响应格式兼容和延迟预算,数据库回退关注数据一致性和切换窗口,认证回退关注凭证有效性和安全边界。
新调度员入职培训的最后一页写着:当你听到「我们已经做了回退」时,先问一句——哪个组件的回退?用什么条件触发?切换后会丢什么?三个问题答不上来,那叫没做回退。