概述
缺重试会让一次抖动直接失败请求,而无界重试则让本就吃力的上游承受自身重试的额外打击。带预算的重试把重试流量限制在基础流量的小比例内,逐次超时则保证每次尝试各有截止。
关键步骤
- 对安全的幂等条件启用 retry_on 并把 num_retries 设低。
- 设置重试预算,使重试保持在基础流量的小比例内。
- 设置短于整体超时的 per_try_timeout。
- 把重试限定在幂等方法,避免重复写入。
验证
- 瞬时故障在有限重试内恢复。
- 故障期间重试流量受预算约束。
- 每次尝试有独立超时。
- 非幂等调用不被盲目重试。
注意事项
- 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 }