背压

当下游处理能力不足时,向上游反馈并降低生产速率,使系统在过载下保持稳定;手段包括队列水位控制、拉模式消费与明确的拒绝策略。

信号队列积压、处理延迟、资源水位
手段消费者拉取模式、动态调节生产速率、分区暂停
兜底超过上限时明确拒绝并告警,避免无限积压
  • 入口层:令牌桶或漏桶限流,超容量请求快速拒绝
  • 链路层:消费者拉模式,按自身处理能力领取任务
  • 队列层:设置积压水位与上限,触发暂停或扩容
  • 反馈层:返回 503 加 Retry-After,或协议级流控信号
  • 观测层:积压量、积压时长与拒绝率纳入监控
协议与框架支持TCP 滑动窗口、Reactive Streams 的 request(n)、gRPC 流控、消息队列消费配额
拒绝策略明确 429 与 503 语义并给出退避建议,让上游感知节奏而非静默堆积
组合使用入口限流保护自身,背压反馈保护下游,两者按链路分层配置
无界队列属于伪背压:积压只是被隐藏,延迟无上限增长,最终集中爆发。

易错点

  • 用无界队列承接流量,积压最终导致内存溢出
  • 只在入口限流,内部链路无背压,中间层先崩溃

数据来源与参考

  • Reactive Streams 规范
  • Google SRE Book:Handling Overload
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌