概述
超时、重试、熔断和降级都是很少被执行的代码路径。延迟实验迫使它们在可观测的情况下运行。目标不是破坏生产,而是确认这些防线是否符合预期:重试有上限、超时按预期触发、降级返回可接受的结果、告警在正确阈值触发。
步骤
- 选择一个影响范围已知的依赖,例如支付数据库,在预发客户端与依赖之间建立代理:
toxiproxy-cli create payments-db -l 127.0.0.1:26379 -u db.internal:5432
toxiproxy-cli toxic add payments-db -t latency -a latency=500 -a jitter=50
- 确认毒化规则生效:
toxiproxy-cli inspect payments-db应显示latency_downstream、延迟 500 和抖动 50。 - 用
hey -z 5m -c 20 https://staging.example.com/checkout施压,观察 p99、超时数、重试数和降级命中。 - 移除毒化规则,确认一分钟内恢复,并把结果与发现的缺口写入实验记录。
验证
预期 p99 上升约等于注入延迟,但仍在超时预算内;重试次数有界,熔断或降级按设计生效。移除规则后延迟回到基线。若所有请求立即失败,说明注入延迟超过客户端超时,应降低到 300ms 再观察降级过程。
注意事项
- Toxiproxy 只操纵 TCP 连接,无法模拟 CPU、磁盘或代码级延迟。
- 预发流量与生产不同,实验结论说明行为,不代表精确的生产影响。
- 实验应在业务时间有人值守时进行,并确认预发客户端确实指向代理端口。
- 发现缺失超时或无界重试后应修复并重跑同一实验,确认行为改变。