如果有人能告诉我 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 的期望的想法):
- http://hiramchirino.com/blog/2011/12/stomp-messaging-benchmarks-activemq-vs-apollo-vs-hornetq-vs-rabbitmq/
- http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2011-April/012508.html
- http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-October/005177.html
- http://www.rabbitmq.com/blog/2011/10/27/performance-of-queues-when-less-is-more/(更多有关调优的信息)