S27:Backpressure 的可选最小扩展
Backpressure 是下游在容量不足时把“减速、等待或停止接收”的信号传回上游,防止无界队列把暂时过载扩大为内存、超时与重试级联。
内容类型:预习教材(不代表已完成)
日期:2026-12-19
阶段:P2 · AI Systems Engineering 90
总路线:Day 117 / 360
周次 / 节奏:W4 · 周六可选探索 / 补学
状态:教材已备;学习未完成
主题:backpressure、bounded queue、admission、retry-after
一句话定义
Backpressure 是下游在容量不足时把“减速、等待或停止接收”的信号传回上游,防止无界队列把暂时过载扩大为内存、超时与重试级联。
学习目标
- 能在 S23 simulator 中增加 bounded queue 或纸面模拟其语义。
- 能区分 queueing、backpressure、admission rejection 和 load shedding。
- 能解释上游无视信号时系统为何仍会失稳。
- 能记录一条观察,忙碌时允许只复习或休息。
核心知识
无界队列把容量问题转换为越来越长的等待和内存占用,最终请求在开始处理前已经超时。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 状态,不需实现网络协议。
最小练习或观察步骤
- 为 S23 FIFO 增加
maxQueueLength,或在纸面表中标出超过上限的请求。 - 用同一 burst fixture 比较无界与有界队列的最大等待、完成数和拒绝数。
- 为拒绝请求设计一个明确结果:retry-after、异步受理或直接失败。
- 写出上游立即重试会怎样改变 arrival。
- 若今日不想编码,只画 feedback loop 已足够。
常见误区与边界
- 队列设上限就称为 backpressure,却没有上游响应协议。
- 所有拒绝立即重试,流量反而增加。
- 只看 queue length,不看等待年龄和预计工作量。
- 过载时静默丢弃高风险任务,没有可见状态。
- 周六扩展变成复杂分布式限流器实现。
系统场景连接
批量文档摘要上游可以暂停生产任务,实时授权解释则需要快速明确结果或安全 fallback。模型服务向 Agent runtime 返回 overload 时,runtime 应遵守 deadline 与幂等,避免重复工具副作用。后续平台 golden path 可以统一提供 timeout、retry budget 和 admission 默认值。
自检问题
- Bounded queue 与 backpressure 的差别是什么?
- 为什么 retry-after 仍需要 jitter 和总 deadline?
- Queue length 为什么不足以表达 backlog 风险?
- 哪些任务适合转异步,哪些需快速拒绝?
专业课程对齐
- 阅读 vLLM 官方文档 的 serving 与 scheduler 配置,寻找并发、排队或资源限制如何暴露给调用方。
- 阅读 MIT 6.5840 的分布式故障与 RPC 相关课程材料,关注 timeout/retry 如何与服务状态交互。
- 阅读 Stanford CS329S 的 deployment 和 monitoring 内容,把拒绝率、队列年龄与用户 SLO 连接。
深入学习提示
画一张闭环:上游发请求→队列增长→下游发容量信号→上游减速。再画失败闭环:超时→立即重试→流量更高→更多超时。每个控制都写出谁做决定、依据什么状态、调用者看见什么。今日无需实现分布式令牌桶,理解反馈方向就是重点。
学后填写区
- 选择实现或纸面推演:
- queue cap 与 fixture:
- 完成/拒绝/等待的变化:
- 重试反馈回路:
- 今日是否选择休息: