混沌工程是在分布式系统中主动注入故障的实践,通过在生产环境或类生产环境中模拟真实故障,验证系统的韧性、自愈能力和降级策略是否名副其实,而不是等到故障真实发生时才仓促应对。
混沌工程并非随机搞破坏,而是有严格方法论的科学实验。其五大核心原则包括:定义稳态 —— 明确系统的正常行为指标(如响应延迟P99、错误率),作为判定实验是否成功的基准;假设多样化现实世界事件 —— 模拟硬件故障、网络分区、流量尖刺等真实事件;在生产中运行实验 —— 类生产环境永远无法完全复制生产,真正的信心来自生产环境实验;自动化持续运行 —— 混沌实验不应是一次性的,而应像回归测试一样持续运行;最小化爆炸半径 —— 通过限流、灰度范围、即时终止机制控制影响范围。
| 故障类别 | 具体实验 | 工具 |
|---|---|---|
| 资源耗尽 | CPU打满、内存泄漏、磁盘写满、文件描述符耗尽 | ChaosBlade, stress-ng |
| 网络故障 | 延迟注入、丢包、DNS解析失败、网络分区 | Toxiproxy, Chaos Mesh |
| 进程/K8s故障 | 杀死Pod、驱逐节点、删除CRD资源 | Chaos Mesh, LitmusChaos |
| 依赖故障 | 数据库主从切换、Redis缓存击穿、消息队列堆积 | 自定义脚本, Gremlin |
| 区域性故障 | 模拟整个可用区宕机、云服务API不可用 | AWS Fault Injection Simulator |
一个规范的混沌实验应遵循以下流程:提出假设(如"用户服务Pod被终止时,API网关应在5秒内摘除不健康节点")→ 定义稳态指标(API成功率>99.9%)→ 设计最小范围实验(仅影响1个用户服务Pod)→ 注入故障 → 观察稳态是否保持 → 若稳态偏离,立即终止实验并排查根因 → 记录结果,推动架构改进。
混沌实验的成功与否不应仅以"系统没挂"来评判,而应以以下指标衡量:MTTD(平均故障检测时间)—— 注入故障到告警触发的时间;MTTR(平均故障恢复时间)—— 从告警触发到系统恢复稳态的时间;用户影响 —— 实验期间是否有用户感知到服务质量下降。