Rabbitmq - 合理的性能/规模预期

Rabbitmq - 合理的性能/规模预期

如果有人能告诉我 RabbitMQ 的合理规模数字/限制(仅供参考,在“普通”硬件上),或者发布您对其性能的体验,我将不胜感激。我试图了解队列数量的容量、队列上的订阅者数量、扇出队列上有数百或数千个侦听器对性能的影响,以及在高容量环境中运行 Rabbit 时可能遇到的任何硬数字。

答案1

首先,您需要了解列表中哪些项目可能会达到扩展限制,哪些不会。其中一些取决于实现,因此阅读内部原理会有所帮助,例如《RabbitMQ in Action》一书。

队列数量受 RAM 限制。另一方面,正在播放的消息数量不受 RAM 限制,因为 RabbitMQ 会自动将它们分页到磁盘。有一次,我不小心在开发服务器上意外地播放了近 800 万条消息。

消息大小也没有限制,但如果单条消息的大小超过 512K,您真的应该三思而行。我最终使用内存缓存在应用程序之间传递大型对象,并且只发送包含内存缓存键的较小控制消息。但如果您真的想,您可以将巨大的 JPEG 和二进制对象(如 JAR 文件)作为消息发送。

订阅者数量是操作系统的限制,因为订阅者至少需要一个打开的 TCP 套接字。当然,这在大多数操作系统中都是可调的,所以你的里程会有所不同,这就是你必须测试你的模型的原因。我一直在使用 JMETER 对我们的 Web 应用程序进行负载测试,我刚刚发现了这个 AMQP 插件https://github.com/jlavallee/JMeter-Rabbit-AMQP但还没有用过。无论如何,这种测试可以快速告诉您硬件(或 VM 配置)可以合理处理什么。

您唯一遇到的困难是测试大量消费者对扇出队列的影响。您可能还想使用主题交换进行比较,消费者使用通配符 (*) 绑定键进行订阅,这可以实现相同的最终结果。尝试使用尽可能多的不同机器运行此测试,以确保您不会遇到由单个服务器运行消费者进程导致的瓶颈。PS:Jmeter 插件看起来也可用于模拟消费者。

答案2

这实际上不是一个可以回答的问题 - 有太多因素(“平均”硬件的移动定义、队列中的消息大小、消费者的数量以及他们轮询的频率/他们在消息中完成工作的速度等)。您确实需要对您的环境进行基准测试。

也就是说,请查看一些关于 RabbitMQ 性能的讨论(包括一些关于如何对您的安装进行基准测试以了解您对 Rabbit 的期望的想法):

相关内容