← 中文资源

简体中文版本

添加负载卸载中间件

进行中请求超过实测上限时,用 503 和 Retry-After 拒绝新工作,让被接受的请求保持延迟目标。

阅读英文原文

限制接受的工作量

过载时接受一切的队列会让所有人都变慢。负载卸载限制进行中工作,并在准入边界拒绝多余请求。被接受的请求保住延迟,被拒绝的请求得到快速、明确的信号。

if (inFlight >= maxInFlight) {
  res.setHeader('Retry-After', '5');
  return res.status(503).json({ error: 'overloaded' });
}
inFlight += 1;
res.on('finish', () => { inFlight -= 1; });

测量上限

压测并找出 p95 开始超过目标的并发数。那是起始上限,不是 CPU 核数。要把排队和依赖延迟算进去。修改查询路径、实例规格或下游容量后重新评估。

正确拒绝

服务器过载使用 503 和 Retry-After;客户端配额使用 429。记录卸载数量和原因,但不要以 error 级别记录每个被拒绝请求。健康检查应排除在外,让编排器仍能观察进程。

验证边界

预期结果:将进行中上限设为固定值并发送超过该值的并发请求,超出部分立即得到带正数 Retry-After 的 503,已接受请求的 p95 仍在目标内。检查健康检查不受影响,指标记录了卸载数量。