如果有人能指出我对Rabbitmq的合理比例数字/限制(关于“平均”硬件,fwiw)或发表其性能的经验,我将不胜感激。我正在尝试了解队列数量,队列上的订户数量,扇出队列上有成百上千个侦听器的性能影响,任何硬数字在任何人都可能在大容量环境中运行Rabbit的能力。
如果有人能指出我对Rabbitmq的合理比例数字/限制(关于“平均”硬件,fwiw)或发表其性能的经验,我将不胜感激。我正在尝试了解队列数量,队列上的订户数量,扇出队列上有成百上千个侦听器的性能影响,任何硬数字在任何人都可能在大容量环境中运行Rabbit的能力。
Answers:
首先,您需要了解列表中的哪些项目具有可能达到的缩放限制,而哪些没有。其中一些是依赖于实现的,因此有助于阅读内部内容,例如《 RabbitMQ in Action》一书。
队列数受您的RAM限制。另一方面,正在播放的消息数不受RAM的限制,因为RabbitMQ自动将它们分页到磁盘。当我不注意的时候,在开发服务器上意外播放了将近800万条消息。
消息的大小也没有限制,但是如果单个消息的大小超过512K,则您确实应该三思。我最终使用内存缓存在应用程序之间传递大型对象,只发送了包含memcache键的较小控制消息。但是,如果您确实愿意,则可以将巨大的JPEG和二进制对象(例如JAR文件)作为消息发送。
订阅者数量是OS限制,因为订阅者需要至少打开一个TCP套接字。当然,这在大多数操作系统中都是可调的,因此您的工作量会有所不同,这就是为什么必须测试模型的原因。我一直在使用JMETER对我们的Web应用程序进行负载测试,而我刚刚发现了这个AMQP插件https://github.com/jlavallee/JMeter-Rabbit-AMQP,但尚未使用它。无论如何,这是一种可以快速告诉您硬件(或VM配置)将进行合理处理的测试。
您唯一困难的事情是测试扇出队列中的大量使用者。您可能还想与使用主题交换的用户进行比较,而消费者使用通配符(*)的绑定密钥进行预订,从而获得相同的最终结果。尝试在尽可能多的不同机器上运行此测试,以确保不会因单一服务器运行使用者进程而造成瓶颈。PS Jmeter插件看起来对模拟消费者也可能有用。
这不是一个真正可以回答的问题-有太多因素(“平均”硬件的移动定义,队列中消息的大小,使用者的数量以及它们轮询的频率/完成消息的速度等) )。您确实需要对环境进行基准测试。
也就是说,请查看以下有关RabbitMQ性能的讨论(包括一些有关如何对安装进行基准测试以了解对Rabbit的期望的想法):