← 中文资源

简体中文版本

执行受控的延迟混沌实验

用 Toxiproxy 在业务时间向单个依赖注入 500ms 延迟,观察 SLO 消耗并验证超时与降级行为。

阅读英文原文

概述

超时、重试、熔断和降级都是很少被执行的代码路径。延迟实验迫使它们在可观测的情况下运行。目标不是破坏生产,而是确认这些防线是否符合预期:重试有上限、超时按预期触发、降级返回可接受的结果、告警在正确阈值触发。

步骤

  1. 选择一个影响范围已知的依赖,例如支付数据库,在预发客户端与依赖之间建立代理:
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
  1. 确认毒化规则生效:toxiproxy-cli inspect payments-db 应显示 latency_downstream、延迟 500 和抖动 50。
  2. 用 hey -z 5m -c 20 https://staging.example.com/checkout 施压,观察 p99、超时数、重试数和降级命中。
  3. 移除毒化规则,确认一分钟内恢复,并把结果与发现的缺口写入实验记录。

验证

预期 p99 上升约等于注入延迟,但仍在超时预算内;重试次数有界,熔断或降级按设计生效。移除规则后延迟回到基线。若所有请求立即失败,说明注入延迟超过客户端超时,应降低到 300ms 再观察降级过程。

注意事项

  • Toxiproxy 只操纵 TCP 连接,无法模拟 CPU、磁盘或代码级延迟。
  • 预发流量与生产不同,实验结论说明行为,不代表精确的生产影响。
  • 实验应在业务时间有人值守时进行,并确认预发客户端确实指向代理端口。
  • 发现缺失超时或无界重试后应修复并重跑同一实验,确认行为改变。