故障演练与混沌工程面试题:故障注入、爆炸半径、稳态指标与恢复
本页只放面试标准回答和原理跳转。完整流程、流程图、Demo 和商业场景见故障演练主线。
高频问题
| 面试题 | 标准回答 | 原理知识点 |
|---|---|---|
| 混沌工程是什么 | 混沌工程不是随机断生产,而是在明确假设、稳态指标、爆炸半径、停止条件和回滚方案下,主动注入受控故障,验证系统保护和恢复能力。 | 基本概念 |
| 为什么要做故障演练 | 超时、重试、熔断、限流、降级、幂等、补偿这些机制正常测试不一定能证明有效。故障演练能提前发现配置错误、重试放大、降级语义错误、监控缺失和恢复缺口。 | 为什么必须演练 |
| 一次标准演练怎么做 | 先提出可证伪假设,再定义稳态指标,限定爆炸半径,准备停止条件和回滚方案,然后注入故障,观察指标和业务事实;不符合预期就立即停止,修复后复演。 | 标准演练流程 |
| 爆炸半径是什么 | 爆炸半径是故障影响范围,例如一个实例、一个租户、一个可用区、1%流量。演练要从测试、预发、生产单实例、灰度租户逐步扩大,不能一上来影响全站。 | 爆炸半径设计 |
| 常见故障注入有哪些 | 常见有延迟、500错误、连接失败、读超时、丢包、CPU打满、内存压力、磁盘满、实例重启、MQ堆积、Redis变慢、DB锁等待。不同故障验证的保护机制不同。 | 故障注入类型 |
| 怎样证明系统抗雪崩 | 注入下游慢调用和错误,验证上游线程池、连接池、队列不被拖满;Deadline、Bulkhead、熔断、限流和降级按预期生效;停止故障后HALF_OPEN有限探测,恢复不产生洪峰。 | 下游慢调用 |
| 多层重试怎么演练 | 统计逻辑请求数和物理attempt数,注入下游连接失败或读超时,看Gateway、Feign、HTTP Client、业务代码是否同时重试。如果attempt数被乘法放大,说明重试Owner没收敛。 | 多层重试 |
| 写请求超时怎么演练 | 注入“下游已提交但响应丢失”场景,验证调用方不会用新请求号重放,而是按幂等号查询事实,得到成功、失败或待处理状态,再补偿或对账。 | 写请求超时 |
| 演练要观察哪些指标 | 要观察Trace、QPS、P95/P99、错误率、限流、熔断、线程池、连接池、业务流水、Outbox、MQ Lag、死信、注册中心和配置规则版本。没有证据的演练只能算感觉没出事。 | 观测证据 |
| 演练后怎么收口 | 记录事实时间线、影响面、缺陷列表、修复计划、复演结果和文档更新。演练结束不是恢复了就完,而是要证明缺陷被修复且同类故障复演通过。 | 演练后复盘 |
场景题
1. 面试官问:怎么验证熔断降级真的有效
标准回答:
我会先定义假设,例如库存查询连续慢调用时订单服务不会被拖垮。然后只对灰度租户或单实例注入库存接口2秒延迟,观察订单P99、线程池队列、HTTP连接池、熔断状态、降级返回、错误率和业务状态机。预期是上游在Deadline内失败或返回明确降级,熔断OPEN后不再持续打下游,HALF_OPEN只允许少量探测。若线程池仍被占满或降级返回伪成功,就说明保护设计有缺陷。
原理入口:下游慢调用演练。
2. 面试官问:生产能不能做混沌工程
标准回答:
可以,但必须受控。先在测试和预发验证,再进入生产单实例、灰度租户或小比例流量;必须有业务负责人、值班人、停止条件、回滚方案和监控面板。高风险动作如断全库、断全Redis、全机房切换必须走灾备演练流程和审批,不能以混沌工程名义随机破坏生产。
原理入口:爆炸半径设计。
面试回答模板
text
混沌工程是受控故障实验,不是随机断服务。一次演练要先提出假设,比如库存服务慢2秒时订单服务不会被拖垮;再定义稳态指标,比如成功率、P99、线程池队列和熔断状态;然后限制爆炸半径,比如灰度租户或单实例;准备停止条件和回滚方案;最后注入延迟、错误、断连、MQ堆积或实例重启等故障,观察Trace、Metrics、Logs和业务事实。演练后修复缺陷并复演,证明系统在真实失败下能限界、降级和恢复。本章小结
故障演练面试不要只说“我们做过压测”。要讲清假设、稳态、爆炸半径、停止条件、故障注入、观测证据、业务事实、修复和复演。
