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

2.4 KiB
Raw Blame History

故障注入矩阵

执行规则

  • 先在隔离环境建立 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。