稳态假设(Steady State Hypothesis)
混沌工程的核心方法论:在动手注入故障之前,先定义什么是「正常」。
如果连「正常」是什么都不知道,就无法判断故障发生后系统是否还「正常」。稳态假设(Steady State Hypothesis)就是混沌工程实验的第一步:定义系统的正常行为,作为实验前后的对比基准。
什么是稳态
例如,一个订单系统的稳态可能是:
- 请求成功率保持在 99.9% 以上
- P99 延迟不超过 500ms
- 每分钟处理订单数保持在 1000~2000 之间
如果注入故障后,这些指标偏离了稳态,就说明故障对系统产生了影响。
稳态的四个维度
稳态可以从多个维度定义:
维度一:可用性
维度二:性能
维度三:一致性
稳态定义示例
示例一:电商订单系统
steady-state-definition.yaml
示例二:数据库系统
database-steady-state.yaml
稳态验证流程
常见的稳态假设错误
错误一:稳态范围过窄
如果稳态范围定义得太窄,即使是正常的业务波动也可能被判定为「稳态被破坏」。
错误二:只看平均值
平均值容易掩盖问题。例如:99% 的请求 1ms 完成,1% 的请求 10s 完成,平均延迟是 100ms——看起来正常,但实际上有 1% 的用户在经历 10 秒的等待。
错误三:指标太多或太少
指标太多会导致实验难以判定;太少则覆盖不够。
质量判断标准
一篇「稳态假设」的文章是否达标,要看它是否回答了:
- ✅ 什么是稳态,为什么需要稳态假设?
- ✅ 稳态从哪些维度定义?
- ✅ 如何量化定义稳态(有具体指标和阈值)?
- ✅ 稳态验证的完整流程是什么?
- ❌ 只给概念,没有量化定义——不达标
本章总结
核心要点:
- 稳态是混沌工程的起点:不知道什么是「正常」,就无法判断故障的影响
- 稳态要从多个维度定义:可用性、性能、一致性、容量
- 稳态必须量化:具体的指标、具体的阈值,而不是模糊的描述
- 稳态范围要合理:太窄会误判,太宽会漏判
- 优先关注长尾指标:P99/P999 比平均值更能反映真实用户体验