proxy-pool/docs/testing/failure-injection.md

70 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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