第3章 容错模式之一:重试策略

3.1 系统边界与分层结构

重试策略位于客户端与目标服务之间的中间层,不属于业务逻辑本身,而是容错基础设施的一部分。在分层架构中,重试策略引擎通常嵌入在以下位置之一:

  • 客户端SDK / 服务网格Sidecar:对应用程序透明,拦截出站请求。
  • API网关层:集中管理下游服务的重试策略。
  • RPC/HTTP客户端库:如 gRPC 的 retry 拦截器、Spring Retry 模板。

无论部署在哪个层,重试策略引擎的系统边界都遵循相同的原则:只对可重试错误(如 HTTP 503、网络超时、临时连接拒绝)生效,对不可重试错误(如 HTTP 400、403、鉴权失败)直接透传。

边界规则:重试引擎只处理传输层/应用层的瞬时故障,不处理业务逻辑错误。所有重试决策必须在幂等性保证的前提下执行。

3.2 组件职责与数据流

重试策略引擎内部包含四个核心组件,职责严格分离。下图展示了从请求失败到重试完成的完整数据流与控制流:

重试策略执行流程与核心机制 ① 请求失败 ② 可重试判断 幂等性校验 ③ 退避计算 指数退避 + 抖动 ④ 重试次数检查 最大重试次数阈值 ⑤ 执行重试 重试风暴防护 ⑥ 是否成功? 成功 重试循环 失败 不可重试 / 超限 🛡️ 重试风暴防范 • 全局限流器:限制并发重试请求量 • 熔断开关:故障率超阈值后快速失败 • 舱壁隔离:不同下游独立重试队列 • 最大重试窗口:时间窗口内限制重试 • 指数退避防止同时爆发 📐 指数退避 + 抖动 • 公式:delay = base × 2^attempt • 抖动:delay += random(0, base) • cap 上限:maxDelay=10s~30s • 目的:避免惊群效应,分散重试 • 常见初始值:base=100ms~1s ✅ 幂等性 & 最大重试次数 • 请求ID去重:客户端生成唯一ID • 乐观锁/版本号:防止重复更新 • 最大重试次数:通常 3~5 次 • 超过上限:进入快速失败或降级 ← 上一章 📖 返回目录 下一章 →