知识卡片
队列消息四态背后的资源置换逻辑
内容
RabbitMQ的队列消息会在alpha(内容与索引都在内存)、beta(内容落盘、索引在内存)、gamma(内容与索引都落盘但索引双写内存)、delta(内容与索引都只在磁盘)四种状态间流动,越往后越省内存但越费CPU和磁盘I/O——delta状态读一条消息要两次I/O(先读索引再读内容),而beta/gamma只需一次。Broker会根据实时统计出的当前内存可承载的消息数量动态把超出部分的消息往后面的状态压。发散:这本质是运行时自适应的资源置换策略——不是一刀切地”全放内存”或”全放磁盘”,而是根据当下的内存压力实时调节内存与磁盘的分配比例,把”要不要落盘”这个决策做成了连续可调的状态机。
参考来源
《RabbitMQ实战指南》第9章《RabbitMQ高阶》