返回 S01~S90 教材库
S27 · 总 Day 117教材已备 ≠ 学习已完成

S27:Backpressure 的可选最小扩展

Backpressure 是下游在容量不足时把“减速、等待或停止接收”的信号传回上游,防止无界队列把暂时过载扩大为内存、超时与重试级联。

2026-12-19backpressure、boundedqueue、admission、retry-after

内容类型:预习教材(不代表已完成)
日期:2026-12-19
阶段:P2 · AI Systems Engineering 90
总路线:Day 117 / 360
周次 / 节奏:W4 · 周六可选探索 / 补学
状态:教材已备;学习未完成
主题:backpressure、bounded queue、admission、retry-after

一句话定义

Backpressure 是下游在容量不足时把“减速、等待或停止接收”的信号传回上游,防止无界队列把暂时过载扩大为内存、超时与重试级联。

学习目标

  1. 能在 S23 simulator 中增加 bounded queue 或纸面模拟其语义。
  2. 能区分 queueing、backpressure、admission rejection 和 load shedding。
  3. 能解释上游无视信号时系统为何仍会失稳。
  4. 能记录一条观察,忙碌时允许只复习或休息。

核心知识

无界队列把容量问题转换为越来越长的等待和内存占用,最终请求在开始处理前已经超时。Bounded queue 为 backlog 设置上限;达到上限时可拒绝、返回 retry-after、降级或把合适工作转异步。Backpressure 是协作协议:下游发信号,上游需要降低并发、延后生成或停止读取。

Admission 在入队前根据租户、预计 token、deadline 与当前容量决定是否接收;load shedding 在过载时丢弃/拒绝低价值工作;circuit breaker 则针对依赖持续失败暂时阻止调用。它们可组合,但不能都叫“限流”。

Retry 需要指数退避、jitter 和截止时间,否则所有客户端在同一时刻重试,造成 thundering herd。对已经超过用户 deadline 的请求,即使队列还有空间也可能应该拒绝。高风险工作不能静默丢弃,应提供明确状态或转人工/异步。

机制与推导

设队列上限 Qmax,arrival 时若 Q≥Qmax 则执行 admission action。接受率与拒绝率守恒:arrivals = admitted + rejected。Backlog age 比单纯 queue length 更贴近体验,因为 10 个长任务和 10 个短任务含义不同。

客户端第 k 次退避可用 delay_k=min(cap,base×2^k)+jitter。这减少同步重试,却不能增加服务总容量;若长期负载过高,必须降载或扩容。Simulator 中可只增加 queue cap 和 rejected 状态,不需实现网络协议。

最小练习或观察步骤

  1. 为 S23 FIFO 增加 maxQueueLength,或在纸面表中标出超过上限的请求。
  2. 用同一 burst fixture 比较无界与有界队列的最大等待、完成数和拒绝数。
  3. 为拒绝请求设计一个明确结果:retry-after、异步受理或直接失败。
  4. 写出上游立即重试会怎样改变 arrival。
  5. 若今日不想编码,只画 feedback loop 已足够。

常见误区与边界

  • 队列设上限就称为 backpressure,却没有上游响应协议。
  • 所有拒绝立即重试,流量反而增加。
  • 只看 queue length,不看等待年龄和预计工作量。
  • 过载时静默丢弃高风险任务,没有可见状态。
  • 周六扩展变成复杂分布式限流器实现。

系统场景连接

批量文档摘要上游可以暂停生产任务,实时授权解释则需要快速明确结果或安全 fallback。模型服务向 Agent runtime 返回 overload 时,runtime 应遵守 deadline 与幂等,避免重复工具副作用。后续平台 golden path 可以统一提供 timeout、retry budget 和 admission 默认值。

自检问题

  1. Bounded queue 与 backpressure 的差别是什么?
  2. 为什么 retry-after 仍需要 jitter 和总 deadline?
  3. Queue length 为什么不足以表达 backlog 风险?
  4. 哪些任务适合转异步,哪些需快速拒绝?

专业课程对齐

  • 阅读 vLLM 官方文档 的 serving 与 scheduler 配置,寻找并发、排队或资源限制如何暴露给调用方。
  • 阅读 MIT 6.5840 的分布式故障与 RPC 相关课程材料,关注 timeout/retry 如何与服务状态交互。
  • 阅读 Stanford CS329S 的 deployment 和 monitoring 内容,把拒绝率、队列年龄与用户 SLO 连接。

深入学习提示

画一张闭环:上游发请求→队列增长→下游发容量信号→上游减速。再画失败闭环:超时→立即重试→流量更高→更多超时。每个控制都写出谁做决定、依据什么状态、调用者看见什么。今日无需实现分布式令牌桶,理解反馈方向就是重点。

学后填写区

  • 选择实现或纸面推演:
  • queue cap 与 fixture:
  • 完成/拒绝/等待的变化:
  • 重试反馈回路:
  • 今日是否选择休息:
重点主线 · H02 · Harness 循环、状态与恢复本周配套机制实验 · W4 · 推理服务:吞吐、等待与长尾的交换 →详细讲义、离线示例与源码;按需要选读,不新增必交任务。
本页是未来 P2 的预习教材。等 P1 完成并正式进入 P2 后,再填写真实理解、练习结果和不确定项;现在阅读不会改变P1 唯一进度账本