如何使 RabbitMQ 可扩展?

Posted

技术标签:

【中文标题】如何使 RabbitMQ 可扩展?【英文标题】:How to make RabbitMQ scalable? 【发布时间】:2016-08-07 14:21:59 【问题描述】:

我试过测试RabbitMQ,但是发现rabbitmq有一些问题: 如果我创建了一个包含 3 个节点的集群,我无法发布/交付超过 6000/s。 另一方面,如果我使用单个节点,我可以发布/交付直到 25000/s。 这意味着,我添加的节点越多,性能就会越差。

但来自这篇文章:https://blog.pivotal.io/pivotal/products/rabbitmq-hits-one-million-messages-per-second-on-google-compute-engine

他们可以发布超过 100 万篇,那么他们如何做到这一点? 我想让 RabbitMQ 每秒处理超过 100 万条消息

【问题讨论】:

你是在消费这些消息,还是只发布? 我有一个高效的消费者,还有很多生产者,但是生产者每秒可以发送超过 900000 条消息。问题是 Rabbitmq 不能处理超过 22000 消息/秒(在单节点中),但是如果我使用集群(用于容错问题),性能会下降, 【参考方案1】:

我通过添加负载平衡器解决了这个问题。 生产者将数据发送到负载均衡器。另一方面,负载均衡器 id 连接到 rabbitmq 的许多节点,但这些节点之间没有连接(以避免影响性能的同步)。 所以通过这种方式,我可以增加吞吐量(例如:3 个节点 = 3 倍吞吐量)。

【讨论】:

只是出于好奇,在这种情况下您是如何订阅多个节点的?(再次通过负载均衡器或其他策略)【参考方案2】:

这可能取决于其他因素,例如您的网络或硬件性能。

在阅读基准测试时,请始终考虑测试周围的环境

关于如何提高性能,如果这是限制因素,您可以改进您的硬件或网络。

考虑切换到 SSD 或在您的网络上使用链路聚合将是一个好的开始。

【讨论】:

这不是问题。在那次基准测试中,他们使用了一个有 32 台机器的集群,但如果我尝试同样的事情,我什至无法处理超过 10 条消息/秒,因为每增加一个节点,性能就会变得更差

以上是关于如何使 RabbitMQ 可扩展?的主要内容,如果未能解决你的问题,请参考以下文章

组合优于继承 - 如何使组件可扩展?

如何使可扩展列表视图的项目选中/不可选中

如何使扩展非可序列化的java类可序列化

如何通过拖动扩展的窗口框架使 WPF 窗口可移动?

如何使带有房间的 node.js 服务器可扩展

Apache Storm:使不可扩展的资源可扩展