第7章 LinkedIn关注会员
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
每当 你在生产中运行一个混沌实验时,你都有可能影响到产品的用户。没有忠实的用户,我们就没有系统可维护,因此我们在精心策划实验时,必须把用户放在第一位。虽然一些小的影响可能是不可避免的,但非常重要的一点是,要尽量减小混乱实验的爆炸半径,并制定简单的恢复计划,使一切恢复正常。事实上,将爆炸半径最小化是混沌工程的高级原则之一(见第3章)。在本章中,你将学习到坚持这一原则的最佳实践,以及如何在软件行业内实施这一原则的故事。
为了更好地理解这一主题,让我们将视线转移到汽车行业。所有现代汽车都要经过制造商、第三方和政府的严格碰撞测试,以确保发生事故时乘客的安全。为了进行这些测试,工程师们会利用模拟人体的碰撞测试假人,这些假人配有多个传感器,可帮助确定碰撞对实际人体的影响。
在过去的几十年里,汽车碰撞测试假人有了长足的发展。2018 年,美国国家公路交通安全管理局(NHTSA)推出了 Thor,它被称为有史以来最逼真的碰撞测试假人。雷神拥有约 140 个数据通道,为工程师提供了丰富的数据,让他们了解事故会对真人造成怎样的影响,而像雷神这样的假人能够让制造商和政府对投放市场的车辆充满信心。1
这似乎是不言自明的:既然可以模拟撞击,为什么还要让真人经受故意撞击,以测试车辆的结构完整性和安全机制呢?这一想法同样适用于软件的混沌工程。
就像雷神的几个传感器决定撞击力一样,多年来,工程师们已经开发出了多种方法来检测稳定状态的偏差。即使是规模有限的故障实验,我们也能看到它是否会对指标造成扰动,是否会对用户体验造成影响。实验的设计应尽可能减少对用户的影响,至少要等到您对自己的系统有足够的信心,能够以类似的方式大规模处理这些故障。
即使您采取了所有必要的预防措施(甚至更多)来最大限度地减少混乱实验中对用户的伤害,仍有可能造成不可预见的影响。正如墨菲定律所说,"任何可能出错的事情都会出错"。如果实验导致应用程序开始出现超出用户可接受范围的错误行为,您需要一个红色按钮来关闭实验。只需点击一下鼠标,就能轻松恢复到稳定状态。
从灾难中学习
回顾一下那些出了差错的著名安全实验事件,有助于我们总结出应该如何规划和实施自己的混乱实验。即使实验的介质不同,我们也可以从这些实验的失误中得到启示,以尽量避免我们犯类似的错误,最终造成不良后果。
1986 年的切尔诺贝利灾难是最臭名昭著的灾难性工业失败案例之一。当时,核电站的工人正在进行一项实验,以观察在断电的情况下,核芯是否仍能得到充分冷却。尽管有可能造成严重后果,但安全人员在实验过程中并不在场,也没有与操作人员协调,以确保他们的行动将风险降至最低。
在实验过程中,本应只是关闭电源,结果却恰恰相反;电量激增,引发了数次爆炸和火灾,导致放射性尘降,对周围地区造成了灾难性后果。2在实验失败后的几周内,有 31 人死亡,其中两人是核电站的工人,其余是因辐射中毒的应急工作人员。3
事故后的分析表明,当时的系统处于不稳定状态,没有相应的保障措施,也没有 "足够的仪器和警报来警告和提醒操作人员注意危险"。4这些因素导致了我们今天所知道的灾难,而它们与计划和执行软件实验所涉及的因素之间有着明显的相似之处。
即使是在风险较低的情况下,例如在网站中注入错误而不是减少核电站的电力,我们仍然需要在每次实验中将用户放在第一位。在进行混沌实验时,我们必须汲取切尔诺贝利事故的教训,确保以安全第一的方式规划实验,将对用户的潜在影响降至最低。 ...