知识卡片
流控用信用证额度实现背压传导
内容
Erlang进程之间靠消息传递通信,每个进程都有邮箱且默认不限大小,如果上游发送速度长期快于下游处理速度,邮箱会无限膨胀直到内存耗尽。RabbitMQ用基于信用证(credit-based)的流控解决:每对相邻进程维护一个可发送额度,每发一条消息额度减一,额度耗尽则停止向下游发送也停止接收上游消息;下游消费掉一部分积压后会通知上游补充额度,解除阻塞。这个阻塞状态会像多米诺骨牌一样沿处理链条(Connection→Channel→Queue→存储)逐级向上传导,最终减慢最上游的网络接收速率。发散:因为阻塞会沿链路精确传导,观察链路上哪一层最先进入阻塞状态,就能反向定位真正的性能瓶颈——流控机制顺带成了免费的瓶颈诊断工具。
参考来源
《RabbitMQ实战指南》第9章《RabbitMQ高阶》