什么是反向压力?
反向压力(Backpressure)是高并发系统中的重要概念,今天来聊聊。
什么是反向压力
简单说,反向压力就是下游处理不过来,告诉上游慢一点。
举个例子:
- 你是流水线上的工人,负责包装
- 前面的工人做得太快,你包装不过来
- 你告诉前面的工人:"慢一点,我处理不过来了"
这就是反向压力。下游向上游反馈"太快了"。
为什么需要反向压力
没有反向压力会怎样
如果上游不管下游能不能处理,一直往下发数据:
- 数据堆积在内存里,内存溢出
- 系统越来越慢,最后崩溃
有反向压力的好处
- 不会无限制堆积数据
- 系统可以稳定运行
- 资源得到合理利用
反向压力的应用场景
消息队列
生产者发消息太快,消费者消费不过来。
可以让消费者反馈给生产者,或者限制队列大小。
响应式编程
Reactor、RxJava这些响应式框架,都内置了反向压力机制。
流处理
Flink、Spark Streaming处理数据流,也需要考虑反向压力。
API调用
调用下游服务太频繁,可能导致下游扛不住。需要限流。
常见的处理策略
缓冲
把多余的数据先存起来,慢慢处理。
但缓冲区有上限,满了还是要处理。
丢弃
处理不过来就丢掉。
适合可以丢失的数据,比如监控数据。
阻塞
下游慢了,上游就等着。
简单但可能影响系统吞吐量。
降级
处理不过来就简化处理逻辑,比如不写数据库只写日志。
最后
反向压力的核心思想是:系统要有自我保护能力。
不能让上游无限制地往下游发数据,否则整个系统都会崩溃。
这个概念在高并发系统设计中非常重要。
