您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 提升RabbitMQ单队列QPS的简单方案
提升RabbitMQ单队列QPS的简单方案背景:当前RabbitMQ在开启confirm,ack和持久化的情况下,单个队列QPS为7k-8k,打开Hipe能达到10k。若使用多个队列则在我们的测试机上测得QPS能达到22k。但使用多个队列有以下两个限制:1.队列数量与程序的逻辑相关,有些情况下不能使用多个队列。2.使用多队列传输消息不能保证消息顺序性。为此需要一个即能在不增加队列数量,又能保证消息顺序性的优化方案。方案:瓶颈分析:RabbitMQ中消息的传递路径如下图所示:RabbitMQ将消息处理的各种逻辑做成一个进程流水线,这样能够一定程度上增加并发度,提升性能,目前测得这条流水线的瓶颈在amqqueue进程。思路:1.增加amqqueue进程的数量,增加并发度。2.在接收channel进程对消息进行顺序化处理,保证消息顺序性。实现方式:ChannelChannelslot0slot1slot2slot3SeqmodN=0SeqmodN=1SeqmodN=2SeqmodN=3publishdeliver1.声明多个内部队列。ReaderChannelamqqueueChannelWriter2.定制一个Exchange,路由规则为将消息的序号取模后放到相应队列。3.RabbitMQ支持exchange到exchange的binding,所以可以让这个定制的Exchange作为“逻辑的queue”实现“一个queue”的逻辑。4.在接收进程中,建立多个消息接收的slot,接收到新的要投递的消息时,先放入对应的slot中,消息按顺序挨个从slot中取出消息投递出去,若当前slot中没有待投递的数据则等待。
本文标题:提升RabbitMQ单队列QPS的简单方案
链接地址:https://www.777doc.com/doc-2419643 .html