# 故障注入矩阵 ## 执行规则 - 先在隔离环境建立 15 分钟稳定基线,再注入单一故障。 - 每次只改变一个变量,记录开始/恢复时间与所有指标。 - 任何数据库写故障后都核对 Proxy 状态、审计和 outbox,而非只看 HTTP 状态码。 - 故障恢复后至少观察两个健康检查周期和一个 Snapshot 完整发布周期。 ## 场景 ### Provider - DNS NXDOMAIN、连接超时、TLS 失败、401、429、500。 - 响应超过 `maxResponseBytes`、模板超过 `templateTimeout`、非法 Proxy。 - 合法空列表、全部重复、部分重复加部分新增。 预期:只有合法空列表增加 Empty;429 尊重 Retry-After;其余 Error 退避; duplicate-only 不触发 Sequential 切换。 ### PostgreSQL - 断开 60 秒、连接池耗尽、锁等待、事务提交失败、只读切换。 预期:Gateway 继续使用最后 Snapshot;Extract 不返回未提交记录;恢复后 outbox 补发且不重复应用。 ### Redis - 断开、延迟 2 秒、Leader key 丢失、主从切换。 预期:Gateway 无影响;Provider Fetch 不出现多个有效 Leader;全局限流明确降级; 恢复后 epoch 单调。 ### Controller - 杀死 Leader、滚动重启全部副本、阻断 Worker 控制流。 预期:`maxStaleAge` 内 Gateway 继续,之后停止新流量;Leader 切换不重复计费 Fetch;Delta 缺口触发完整 Snapshot。 ### Gateway - 杀死一个 Pod、驱逐一个节点、丢失一个可用区、耗尽 FD。 预期:LoadBalancer 摘除 NotReady Pod;ownership 租约过期前不分给新 Worker; 剩余容量满足已验证故障域目标。 ### Checker - 慢目标、DNS 延迟、队列积压、杀死一半 Pod。 预期:优先新 Proxy 和 SUSPECT;稳定 Proxy 降频;队列有界;Observation 重投 不导致非法状态回退。 ### Distribution - 100 个并发请求争用相同 Proxy;数据库在事务提交时断开;Gateway 同时满载。 预期:每个 Proxy 最多返回一次;提交失败不返回代理;allOrNothing 整批回滚; 池中始终剩余 `reserveForGateway`;没有 Release 恢复路径。 ### 配置与 Secret - 未知字段、错误正则、缺失 Upstream、公开监听无保护、凭据轮换失败。 预期:新 Revision 整体拒绝,旧不可变 Snapshot 继续;认证错误计 Error 而不是 Empty;日志不出现 Secret。