编程指南-学习建议编程指南-学习建议
首页
学习方向
技术学习
🚀 编程指南
首页
学习方向
技术学习
🚀 编程指南
  • 三、技术学习

    • 技术指南

      • 前端技术知识

        • 什么是前端?
      • 后端技术知识

        • 什么是缓存?
        • 什么是工作流技术?
        • 什么是反向压力?
        • 什么是热数据探测?
        • 数据库也能版本控制?
        • /tech-learning/guide/backend/how-search-engine-works.html
        • /tech-learning/guide/backend/learn-concurrency.html
        • /tech-learning/guide/backend/other-databases.html
      • 通用技术知识

        • 什么是前后端分离?
        • /tech-learning/guide/general/what-is-redirect.html
        • 什么是单例模式?
        • /tech-learning/guide/general/what-is-magic-value.html
        • 什么是负载均衡?
        • /tech-learning/guide/general/what-is-multi-env.html
        • /tech-learning/guide/general/what-is-magic-number.html
        • 什么是 Linux?
        • /tech-learning/guide/general/what-is-cloud-dev.html
    • 系统设计

      • 如何设计一个实时排行榜系统?
      • /tech-learning/system-design/elasticsearch-optimization.html
      • /tech-learning/system-design/file-upload.html
      • /tech-learning/system-design/log-system.html
      • /tech-learning/system-design/software-sword.html
      • 如何设计好 API 接口?
      • /tech-learning/system-design/sdk-development.html
      • /tech-learning/system-design/architecture-design.html
      • /tech-learning/system-design/release-stability.html
    • 开发经验

      • 解决 Bug 经验
      • 如何快速上手新项目?
      • /tech-learning/dev-experience/enterprise-software.html
      • /tech-learning/dev-experience/opensource-contribute.html
      • 什么是代码规范?为什么要遵循代码规范?
      • /tech-learning/dev-experience/company-standards.html
      • /tech-learning/dev-experience/code-reuse.html
      • /tech-learning/dev-experience/quick-website.html
      • /tech-learning/dev-experience/vscode-remote.html
      • /tech-learning/dev-experience/linux-vm-remote.html
      • /tech-learning/dev-experience/young-contributor.html
      • /tech-learning/dev-experience/no-force-shutdown.html
      • /tech-learning/dev-experience/no-hardcode.html
      • /tech-learning/dev-experience/backend-attention.html
      • 千万别直接敲代码!(写代码前要做的事)
      • /tech-learning/dev-experience/project-attention.html
      • /tech-learning/dev-experience/website-online.html
      • /tech-learning/dev-experience/tech-selection.html

什么是反向压力?

反向压力(Backpressure)是高并发系统中的重要概念,今天来聊聊。

什么是反向压力

简单说,反向压力就是下游处理不过来,告诉上游慢一点。

举个例子:

  • 你是流水线上的工人,负责包装
  • 前面的工人做得太快,你包装不过来
  • 你告诉前面的工人:"慢一点,我处理不过来了"

这就是反向压力。下游向上游反馈"太快了"。

为什么需要反向压力

没有反向压力会怎样

如果上游不管下游能不能处理,一直往下发数据:

  • 数据堆积在内存里,内存溢出
  • 系统越来越慢,最后崩溃

有反向压力的好处

  • 不会无限制堆积数据
  • 系统可以稳定运行
  • 资源得到合理利用

反向压力的应用场景

消息队列

生产者发消息太快,消费者消费不过来。

可以让消费者反馈给生产者,或者限制队列大小。

响应式编程

Reactor、RxJava这些响应式框架,都内置了反向压力机制。

流处理

Flink、Spark Streaming处理数据流,也需要考虑反向压力。

API调用

调用下游服务太频繁,可能导致下游扛不住。需要限流。

常见的处理策略

缓冲

把多余的数据先存起来,慢慢处理。

但缓冲区有上限,满了还是要处理。

丢弃

处理不过来就丢掉。

适合可以丢失的数据,比如监控数据。

阻塞

下游慢了,上游就等着。

简单但可能影响系统吞吐量。

降级

处理不过来就简化处理逻辑,比如不写数据库只写日志。

最后

反向压力的核心思想是:系统要有自我保护能力。

不能让上游无限制地往下游发数据,否则整个系统都会崩溃。

这个概念在高并发系统设计中非常重要。

上次更新: 2025/12/7 09:34
Prev
什么是工作流技术?
Next
什么是热数据探测?