我记得在分布式系统的早期,故障似乎是不可避免的、突发的、混乱的,几乎不可能推理出原因。看着服务在生产环境中失效,有一件事变得很清楚:如果我们想要可靠的系统,就必须练习有意的故障并从中学习。
这个想法并非一夜之间出现的。15年前,我在亚马逊担任工程师和呼叫主管,我的团队负责亚马逊零售网站的正常运行时间和性能。网站每宕机一分钟,我们就会损失数万美元的收入。我的团队构建了一套故障注入工具来帮助准备黑色星期五等重要时刻,这些工具后来在整个组织中得到采用。
与此同时,Netflix推出了他们的开源工具混沌猴,这真正推动了混沌工程的理念。虽然在当时仍然是一种前沿实践,但有目的地在生产环境中终止服务器揭露了脆弱的假设,使Netflix的工程组织不仅更加有弹性,而且成为世界上最优秀的组织之一。
当我加入Netflix时,我参与了他们第二代故障注入工具的工作,这些工具不再是随机关闭服务器,而是运行特定的、假设驱动的实验,控制影响范围并最大化学习效果。这就是我们开始谈论流感疫苗类比的地方。世界各地的领先工程组织开始接受这样的想法:有思想地向他们的系统注入损害,以便有条不紊地、系统地建立对它的抵抗力,这是一项值得的努力。
在亚马逊和Netflix工作多年让我近距离了解这些可靠性工作对两家数字企业成功的重要性。我强烈感觉到未来每家公司都会需要它们,所以我决定在2016年创立Gremlin。我的目标很直接:为每个工程团队提供安全、可靠、简单的混沌工程。早期实践者看到了故障注入的价值,但它是分散的、临时的,通常局限于少数精英组织。Gremlin着手改变这种状况。
安全的工具很重要,因为你无法扩展一个有风险客户体验的实践,而现实地说,大多数工程组织没有自信地运行这些实验的经验。作为回应,我们构建了控制措施,如爆炸半径限制、安全保护和直接回滚,以便团队能够自信地运行实验。Gremlin代理可以自动停止和回滚测试,健康检查可以监控系统的意外行为,任何团队成员都可以按下停止按钮立即停止正在运行的测试。这降低了准入门槛,让更多团队在生产环境中验证假设并强化他们的系统,而不会有不必要的风险。
方法论同样重要。混沌工程是经验性的:形成关于稳定状态的假设,设计受控实验来挑战该假设,观察影响并迭代。Gremlin致力于将该流程编码为手册和教程,以便团队能够从随机故障注入转向假设驱动的实验。教授团队如何定义稳定状态指标、设计有意义的攻击和解释结果,有助于使混沌工程成为可重现的工程实践,而不是偶尔的好奇心。
集成是第三个支柱。为了让混沌工程发挥作用,它必须存在于团队已经使用的相同工作流程中,例如CI/CD流水线、可观察性堆栈和事件审查流程。我们构建了集成和示例,展示如何将攻击与监控关联、安排实验,并利用Gremlin作为事后验证的一部分。今天,团队可以一键设置智能健康检查,通过我们的API自动化实验,甚至将Gremlin连接到他们喜欢的AI模型。这使混沌工程不再是一个单独的活动,而更像是正常可靠性工作的一部分。
所以我们成功地找到了如何使混沌工程成为一种有效、安全和可复制实践的方法。但这就是我们遇到障碍的地方。从本质上说,混沌工程是关于探索和发现的,这使它非常适合回答个别问题,比如"如果在我们的依赖链中添加100毫秒的延迟会发生什么?"对个别工程师来说回答这个问题非常重要,但企业担心的是其他问题,比如"我们的系统是否足够可靠,能够为我们的客户提供服务?"
这就是我们需要超越混沌工程,以可测量、可跟踪和可报告的方式管理整个组织的可靠性的地方。我们从混沌工程已经证明有效的相同故障注入技术开始,然后分层一个更系统化、可扩展的方法。手动实验被设计为定期安全运行的自动化测试集合或测试套件所取代。结果被组合以产生可靠性评分,可以随时间跟踪,以查看公司系统的可靠性并证明可靠性工作的影响。
现在我们有了一个不仅显示你的系统何时宕机,而且可以预测未来可靠性并用于防止故障的指标。这是混沌工程梦想的最终实现。特定专家仍然可以使用针对性实验来发现新的故障模式,而已知的故障模式可以在整个系统中进行测试,以验证弹性、发现风险,并为团队提供具有预测性指标的真正可靠性可见性。
这很好,因为我们现在发现自己处于软件历史上最戏剧性的转变之一。AI正以前所未有的水平加速代码生成和部署,虽然AI生成的代码对速度很有好处,但并非没有风险。AI代码已被证明会导致错误、配置漂移和其他导致事故的问题增加。这并不意味着我们都应该停止使用AI,但确实需要更好的保护措施和测试。
现在比以往任何时候都更重要的是,从混沌工程开始的主动可靠性测试和管理变得至关重要。工程组织根本承受不起希望获得弹性并且只有在故障导致代价高昂、痛苦的停机时才发现故障的做法。他们需要预测性可靠性测试和指标,以便他们能够系统地测量、管理和改善可靠性。
Q&A
Q1:混沌工程是什么?它有什么作用?
A:混沌工程是一种主动测试系统可靠性的方法,通过有意在生产环境中注入故障来发现系统的脆弱点。它能帮助工程团队在真正的故障发生之前发现并修复潜在问题,提高系统的整体弹性和可靠性。
Q2:Gremlin是什么?它如何改进了混沌工程?
A:Gremlin是一个混沌工程平台,让混沌工程变得更安全、简单和可重复。它提供了爆炸半径控制、自动回滚、健康检查等安全保护措施,并且可以与现有的CI/CD流水线和监控系统集成,让更多团队能够安全地进行混沌工程实践。
Q3:AI时代为什么需要更好的可靠性管理?
A:AI正在加速代码生成和部署,但AI生成的代码可能包含更多错误、配置漂移等问题,增加了系统故障的风险。因此需要更系统化的可靠性测试和预测性指标,帮助组织在AI驱动的快速开发环境中保持系统稳定性。