混沌工程是什么
混沌工程是在可控范围内主动注入故障(实例宕机、网络延迟与丢包、依赖超时、磁盘写满),用真实实验验证“系统在故障下仍然可用”这一假设。它和被动等故障的区别在于:实验有明确假设、有稳态指标、有受限的爆炸半径,并且随时可以中止。实践通常从只读或旁路链路的实验起步,再逐步扩大到核心链路。
基本信息
| 前提 | 已有可观测性:稳态指标、监控与告警链路可用 |
|---|---|
| 范围 | 明确爆炸半径,从单实例、单依赖到小比例流量逐级扩大 |
| 中止 | 指标越界自动终止,且保留人工一键停止能力 |
| 产出 | 暴露的薄弱点进入缺陷跟踪,修复后排期复验 |
典型使用场景
- 容灾演练:验证主备切换、跨可用区与跨区域切换是否达到预期
- 依赖降级验证:模拟下游超时或返回错误,确认降级与熔断按设计生效
- 容量验证:在部分实例不可用时确认剩余容量能否承接全量流量
- 发布流程验证:模拟滚动发布期间的实例退出,确认不中断在途请求
- 数据一致性验证:模拟网络分区,检查两侧写入与恢复后的对账行为
流程
流程
1. 定义稳态指标(成功率、P99)
2. 提出假设:注入 X 故障,稳态不破
3. 从小范围注入(单实例、单依赖)
4. 观察并支持自动中止
5. 修复暴露的问题,纳入回归演练实验设计检查
| 项 | 要点 |
|---|---|
| 稳态假设 | 用可观测指标定义“系统正常”(成功率、P99) |
| 爆炸半径 | 单实例 → 单依赖 → 小比例流量,逐步扩大 |
| 中止条件 | 指标越界自动终止,人工一键停止可用 |
| 复盘闭环 | 暴露问题进缺陷跟踪,修复后排期复验 |
使用要点
- 先验证演练平台本身:确认它能真正注入故障,也能真正停下
- 选低风险时段与旁路链路起步,成功后再逐步向核心链路推进
- 实验前通知相关方并准备好回滚,涉及业务方时要提前对齐窗口
- 关注“未破稳态但很勉强”的现象:余量被吃掉本身就是需要处理的发现
- 把已修复的故障场景固化成回归演练,防止后续改动重新引入
混沌实验必须有终止条件与影响开关;先验证演练平台本身,再逐步扩大范围。
在没有可观测性与中止能力之前做混沌实验,等于在核心链路上直接做故障演练;实验中止按钮与指标看板要能在实验前确认可用。