← 中文资源

简体中文版本

向下游传播请求截止时间

为每次下游调用传递绝对截止时间,在跳与跳之间分配预算,超时即取消工作而非无限等待。

阅读英文原文

概述

截止时间是对整个请求的承诺,而非单次调用。传播剩余预算并践行取消,可避免一个慢跳耗掉全部延迟额度。

关键步骤

  1. 在边界依据整体超时计算绝对截止时间。
  2. 每个下游超时都由剩余预算推导,而非固定值。
  3. 截止时间过后取消在途工作并传播取消。
  4. 预算耗尽时返回 504 与超时信息。

验证

  • 下游调用获得的超时逐渐变小。
  • 超时请求立即返回 504。
  • 被取消的请求停止下游工作。
  • 没有跳会阻塞超过绝对截止时间。

注意事项

  • 绝对截止时间要求各主机时钟大致同步,否则应改用逐跳超时。
  • 除非每层都践行取消,截止时间仅具建议性。

适用范围

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

建议在正式环境落地前先在预发或隔离环境演练一遍,把关键观测指标与负责人一并记录,确保出现异常时能快速定位并恢复。

const deadline = ctx.deadline ?? Date.now() + budget;
const remaining = deadline - Date.now();
if (remaining <= 0) throw new DeadlineExceeded();
await fetch(url, { signal: AbortSignal.timeout(remaining) });