← 中文资源

简体中文版本

为 Envoy 配置带预算的重试

在 Envoy 代理启用带重试预算与逐次超时的重试,使瞬时故障得以恢复,又不会加剧上游负载。

阅读英文原文

概述

缺重试会让一次抖动直接失败请求,而无界重试则让本就吃力的上游承受自身重试的额外打击。带预算的重试把重试流量限制在基础流量的小比例内,逐次超时则保证每次尝试各有截止。

关键步骤

  1. 对安全的幂等条件启用 retry_on 并把 num_retries 设低。
  2. 设置重试预算,使重试保持在基础流量的小比例内。
  3. 设置短于整体超时的 per_try_timeout。
  4. 把重试限定在幂等方法,避免重复写入。

验证

  • 瞬时故障在有限重试内恢复。
  • 故障期间重试流量受预算约束。
  • 每次尝试有独立超时。
  • 非幂等调用不被盲目重试。

注意事项

  • Envoy 重试只覆盖代理这一跳及其可见的失败,不覆盖应用层错误。
  • 重试预算是负载控制而非正确性保证,消费方仍需幂等。

适用范围

本条目围绕「为 Envoy 配置带预算的重试」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。

route:
  retry_policy:
    retry_on: "5xx,connect-failure,reset"
    num_retries: 2
    per_try_timeout: 0.5s
    retry_budget:
      budget_percent: { value: 20 }