在后端世界,有一种东西特别昂贵,
但很少有人意识到它的成本:
“我很确定这块逻辑不会有问题。”
一、一个被无数次验证的现象
几乎每一次严重线上事故,
复盘时都会听到类似的话:
- “这块逻辑我们一直这么用”
- “当初设计时是确定没问题的”
- “这个场景不可能发生”
- “理论上不会走到这里”
而事故发生的方式,往往正是:
那个被“确定排除”的场景,出现了。
二、系统最怕的不是“不确定”,而是“过早确定”
很多系统在设计阶段,会做大量假设:
- 状态只会按这个顺序走
- 数据不会乱
- 异步最终一定会成功
- 下游接口是稳定的
- 重试次数足够多就能成功
这些假设在早期都成立。
问题是:
系统一旦变大,这些假设就会开始逐个失效。
三、错误的确定性是如何慢慢形成的?
1️⃣ 成功路径被过度强化
系统跑通一次,就开始被认为:
“这是正确路径。”
于是:
- 异常路径没人关心
- 回滚逻辑没人测
- 极端情况没人模拟
成功路径变成唯一现实。
2️⃣ 异常被“包起来”了
为了稳定,系统开始:
- catch 所有异常
- 自动重试
- 自动补偿
- 自动兜底
看起来很健壮,
但实际效果是:
系统在不断吞掉“失败信号”。
3️⃣ 监控只关注“结果”,不关注“过程”
例如:
- 请求成功率
- QPS
- RT
但很少有人长期看:
- 重试率
- 补偿触发率
- 状态回滚率
- 异步积压变化
系统正在“勉强成功”,
但你却以为它“运行良好”。
四、为什么错误的确定性比不确定性更危险?
因为不确定性会让你:
- 警惕
- 留后路
- 保守演进
而错误的确定性会让你:
- 删除保护
- 合并分支
- 简化校验
- 忽略异常
直到有一天,你发现:
系统已经失去了自我修复能力。
五、真正成熟的系统,反而对自己“不自信”
你会发现顶级系统:
- 经常失败
- 经常拒绝请求
- 经常暴露异常
- 经常打断流程
它们不是脆弱,
而是在持续确认一个事实:
“我现在还能不能相信自己。”
六、一个反直觉但非常重要的原则
系统中所有“永远不会发生”的判断,
最终都会变成事故的入口。