← 中文资源

简体中文版本

在不牺牲时延的情况下批量发起网络调用

用小调度窗口把大量小请求合并为更少的批量调用,降低往返开销。

阅读英文原文

目标

客户端发起成千上万个小请求,往返开销主导总耗时。本配方在请求层引入合并:把窗口内到达的请求收集起来,每 10 毫秒合并为一次批量调用,并把批量响应按项分发回各调用方;提醒对时延敏感的调用应保持极小窗口或允许退出批处理。

步骤要点

  1. 在窗口内收集请求并定时批量发送。
  2. 把批量响应按项分发回各调用方。
  3. 对时延敏感调用保持极小窗口或退出批处理。
  4. 设置批量上限并在达到时提前发送。
const pending = [];
let scheduled = false;
function enqueue(item) {
  pending.push(item);
  if (scheduled) return;
  scheduled = true;
  setTimeout(flush, 10);
}

排错提示

  • 窗口会给每个调用增加延迟。
  • 批处理过大需设上限。
  • 错误处理需按项映射失败。

适用边界

  • 需要端点支持批量。
  • 会增加固定小延迟。