CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
构建可扩展系统/课时/背压与限流
RawBlame
课时目录12 节

构建可扩展系统

  1. 01可扩展性是什么
  2. 02CAP 定理
  3. 03无状态服务
  4. 04缓存与读扩展
  5. 05分片策略
  6. 06数据复制
  7. 07N+1 查询问题
  8. 08负载均衡
  9. 09背压与限流
  10. 10负载转移
  11. 11读写分离
  12. 12综合练习

背压与限流

backpressure、throttling;衔接 reliability。

30 分钟

背压与限流

下游处理不过来时,系统不能无限堆积请求。背压(Backpressure) 让慢的消费者反过来告诉生产者「慢一点」;限流(Throttling) 在入口拒绝超额流量。二者是 building-for-scale 的「刹车系统」,与 reliability-essentials 的稳定性实践一脉相承。

学习目标

  • 区分背压、限流、熔断、降级的触发点与协作关系
  • 实现令牌桶/漏桶限流,并选择合适的拒绝策略
  • 为线程池、连接池、消息队列配置有界队列

核心概念

机制作用位置行为
限流网关 / API 入口超配额返回 429
背压管道中间阻塞或 drop 上游发送
熔断调用下游快速失败,防雪崩
降级业务层返回兜底数据
突发 10k QPS → 网关限流 1k → 服务线程池 200 → DB 连接池 50
                ↓ 429           ↓ 排队/拒绝      ↓ 等待超时

常见限流算法:

  • 令牌桶:允许一定突发,平滑平均速率(Guava RateLimiter)
  • 漏桶:输出恒定,削平峰值
  • 滑动窗口:按秒/分钟计数,适合 API 配额
// 伪代码:有界队列 + CallerRunsPolicy 形成背压
new ThreadPoolExecutor(core, max, queue=new ArrayBlockingQueue<>(100),
    new ThreadPoolExecutor.CallerRunsPolicy());

拒绝策略要可观测:返回 429 + Retry-After 头,记录 metric rate_limit_rejected_total。与 nginx-essentials 的 limit_req 配合做边缘限流。

练习

  • 为一个公开 API 设计 100 QPS 全局限流 + 每用户 10 QPS
  • 检查项目线程池是否无界队列——若有,改为有界并压测
  • 阅读 reliability-essentials,画出熔断与限流在调用链上的位置

小结

扩展的上限由最慢环节决定——限流与背压让系统在过载时可控失败,而不是静默崩溃。

加载本节练习…
← 上一课
负载均衡
下一课 →负载转移