知识卡片

空列表被当作"全部"的自动化事故

普通读书笔记卡 · 1578.b

内容

一次机架退役操作在重启调试时,程序把需要清空的机器列表算成了空列表,而磁盘清除系统把空列表 特殊解释为”全部”,几分钟内高效地把整个colo里几乎所有机器的磁盘全部擦除。事故根源不是逻辑 错误,而是代码里存在一个从未被显式声明、却被悄悄利用的”隐含安全信号”。事后补的合理性检查、 限速、幂等性三重防护,本质是给自动化装上操作范围异常扩大时自动刹车的护栏。

参考来源

- 位置:《SRE:Google运维解密》第7章《Google 的自动化系统的演进》补充材料"自动化:允许大规模故障发生"(源文件:_epub-src/OEBPS/Text/0008_0005.xhtml) - 结论依据:原文描述该事故中,机器列表在调试重启时被算成空列表,而空列表被系统解释为"所有",导致colo中几乎所有机器被送去磁盘清除;事后补充了合理性检查、速率限制、幂等性三项防护。 - 原始内容:“代码得出需要进行清空的机器列表是(正确的)空的。不幸的是,空列表有着特殊含义,它被解释为‘所有’……我们又将接下来的几周时间用来进行代码审计,在我们的自动化系统中添加更多的合理性检查,包括速率限制,以及使整个退役流程具有幂等性。”