从可证伪的假设开始
混沌实验不是随机破坏,而是检验具体信念:“如果一个 API Pod 死亡,服务仍能满足 SLO。”假设要写明故障、预期行为、指标和观察窗口。如果结果无法与基线比较,这次实验只是演示,不是证据。
假设: 杀死三个 API Pod 中的一个,p95 仍 < 300 ms
稳态: p95 180 ms,5xx 0.02%,3 个 Pod 就绪
爆炸半径: 预发命名空间中的一个 Pod
中止: p95 > 500 ms 或 5xx > 1% 持续 60 秒
限定爆炸半径与持续时间
先在预发环境运行。需要验证生产特有行为时,使用金丝雀或单可用区,并限制时间。提前定义中止条件,并让一名观察者有权停止。中止应基于客户影响,而不只是假设失败。导致事故的混沌实验本身就是实验设计失败。
恢复与学习
移除注入并确认系统回到稳态,比较观察到的恢复时间与设计目标。为每个意外行为创建工单:缺失超时、重试风暴、仪表盘空白或运行手册缺失步骤。产出不是实验报告,而是让下一次故障变得平淡的修复与测试。
不要用混沌替代设计
注入故障无法弥补缺失的超时或单实例数据库。先修复已知基础问题。混沌最有价值的时刻,是系统已按故障设计、团队需要真实条件下的证据。