Jay*_*min 8 java performance cluster-computing amazon-ec2 rabbitmq
RabbitMQ对EC2的性能期望是什么?希望在这里分享经验.
我想在aws EC2上做一些RabbitMQ的性能测试.我为RabbitMQ,Publisher和消费者/工作者运行了3个单独的EC2实例.
我的方案是Publisher将JSON字符串(大约165-200字节)推送到直接交换类型,持久设置为true,并将持久设置为true的绑定队列(即两者都处于持久模式).消费者/工人正在单独的盒子上运行 - 不断拉动消息.(在工作中向前移动这些消息应该在MongoDB中保留,并且Publisher将使用REST轻松替换为Restful服务)
为了简单起见,我使用多播示例代码模拟了这种情况.我将组播代码拆分为两个单独的java文件,即"Producer"和"Worker",以便在单独的框中运行每个文件.我使用"c1.mediam"EC2和Ubuntu服务器v11.4 32位运行生产者和消费者,使用"m1.large"和Ubuntu服务器v11.4 64位用于RabbitMQ.
我能够实现每秒3-5k消息的吞吐量,即将研究消息推送速率保持在5K.(这与http://www.rabbitmq.com/faq.html#performance-latency一致)
此外,当我将推送速率提高到每秒10-12k个消息时.消费者消费消息的能力下降到每秒1-2k消息,并产生积压(很多时候它也低于每秒800条消息).
在上述情况下,我有以下问题,并希望提高消费者吞吐量的想法/建议.(注意:我的场景中的所有消息都应该是类似的类型,没有机会将它们分组以设置路由,因此可能需要某种负载平衡器方法)
1)使用一个rabbitMQ服务器,一个交换和一个队列观察此性能.是否可以进一步配置,微调以使用持久模式将吞吐量即兴增加到5k以上.
2)我明白,聚类可能是另一种选择.但是,我需要根据传入的负载设置集群,我可能无法获得消息分组/标识来定义路由(因为消息应该只是日志描述).我是否可以为工人/消费者提供集群跟踪负载均衡选项?
3)我预计每秒处理几十万个请求.我希望分享一些经验和方法来实现这一目标.
您的 EC2 实例使用什么类型的存储?EBS 存储更可靠,但有时它的吞吐量非常低(特别是如果它是小型 EBS 卷,即 <100GB)。另一方面,实例存储具有更好的 IO 性能(至少根据我们的经验),但只有在实例运行时才能“生存”。此外,您使用的实例类型也存在很大差异。m1.small 和 c1.medium 均具有中等 IO 性能 (http://aws.amazon.com/ec2/instance-types/)。
我们在 EC2 中运行 RabbitMQ,并持久保存所有消息。我们仅使用 m1.large 实例(64 位,具有高 IO 性能)。我们从 EBS 存储开始,然后切换到实例存储,看看是否有任何改进。而且实例存储实例的 IO 吞吐量更快。但是,缺点是所有持久化消息都会随着实例的终止/失败而丢失(尽管到目前为止我们从未经历过失败)。在我们的场景中,我们不需要这么大的吞吐量,但我们确实非常关心消息是否丢失:-)
总之,您可以尝试切换到实例存储设置,看看它的处理方式是否有任何改进。如果效果更好,那么我认为http://www.rabbitmq.com/pacemaker.html是克服失败的解决方案。至少这是我们正在转向的方向。
干杯