← 中文资源

简体中文版本

韧性验证工作流

按计划在类生产条件下注入超时、重试、熔断、兜底等机制为之存在的故障,验证韧性真实有效。

阅读英文原文

目标

代码库里每个超时与熔断器,都是对“某种可能从未发生过的故障下的行为”的声明。按计划在类生产环境注入那种故障,把声明变成已验证的事实——或者揭穿它。从未触发过的机制是信心与现实分歧最大的地方,定期重注入则能抓住悄悄腐烂的韧性。

步骤要点

  1. 盘点韧性机制:列出每个超时、重试策略、熔断器、舱壁与兜底,标明位置与所应对的故障。
  2. 一机制一故障实验:为每个机制设计应触发它的注入——超过超时的延迟、超过熔断阈值的错误率、依赖全黑触发兜底。
  3. 类生产条件下注入:在真实依赖与真实负载形态的环境运行,从指标而不只是日志观察机制是否触发。
  4. 验证用户可见行为:注入期间核对用户体验——降级但可用、正确的错误呈现、无静默数据丢失。
  5. 定期重验并对衰减告警:按计划重复实验,机制对故障不再响应时给 owner 开工单。

排错提示

配置了两年的超时注入后根本没生效是最常见的发现,机制要接在被测的真实调用路径上才作数;重构后熔断悄悄失效是韧性腐烂的常态,定期重注入就像备份要演练恢复;只看日志说熔断开了不算数,指标曲线与兜底流量占比才是证据。

适用边界

故障注入在共享环境有外溢风险,实验要配自动停止条件与爆炸半径声明;生产直接注入需要更严格的审批与值守,预生产拓扑等价是前提。

代码示例

mechanism inventory -> experiment:
  payments timeout 800ms
    fault: inject 2s latency on payments calls
    expect: p99 <= 900ms, timeout errors < 1%
    observed: p99 3.1s   FAIL (timeout not wired!)

  search breaker (50% err threshold)
    fault: inject 60% errors for 60s
    expect: breaker opens ~10s, fallback served
    observed: opened at 11s, fallbacks 100%   PASS

  catalog fallback (static cache)
    fault: full blackout 5 min
    expect: static catalog served, no 5xx
    observed: static served, 0 errors        PASS

schedule: monthly; decay alert on missed fire