与 "Classic" 相比,ActiveMQ Artemis 性能下降

ActiveMQ Artemis performance degradation compared to "Classic"

我正在从 ActiveMQ“Classic”5.15.4 迁移到 ActiveMQ Artemis 2.17.0,我观察到性能下降。我测试了 1 个生产者的主题和不同数量的消费该主题的消费者。我正在测量从创建消息到消费者接收消息之间的时间。

测试是在一个由 3 个节点组成的集群上完成的,这些节点都相互连接。每个经纪人都嵌入在 JBoss 中。我使用了 3 个节点的集群,因为这是我们当前的生产设置。我正在挑战此设置,因为我们的消费者和生产者很少(每次少于 50 个)并且我们正在使用消息分组,但我需要在 active/standby 模式下只有 2 个节点的设置上进行 POC。

生产者始终以同一个节点为目标,消费者随机连接到其他 2 个节点。

我们可以看到,在所有情况下,Artemis 都比 ActiveMQ Classic 稍慢。我想知道这是否符合预期。

一般来说,ActiveMQ Artemis 明显比 ActiveMQ“Classic”快,因为它们之间存在显着的架构差异。简而言之,ActiveMQ Artemis 被设计成完全非阻塞的,并且与 ActiveMQ“Classic”相比,在规模上表现得非常好。

但是,在这种情况下,您不是大规模测试代理。您正在测试 一个 个生产者和“不同数量”的消费者。这当然不是那种需要 3 个代理集群的生产用例。在适度甚至最小硬件上的单个代理几乎肯定就足够了。

即使您将客户端数量增加到 50 左右,我仍然认为一个活动节点就足够了。如果您使用消息分组,您肯定希望只使用一个活动节点。有关集群邮件分组的重要详细信息,请参阅 the documentation

同样重要的是要记住,您必须就每个经纪人的配置进行“同类比较”。这不一定是微不足道的,尤其是在处理集群时。您没有分享您的经纪人配置,因此我无法评论它们在功能上是否相同或至少在功能上是否尽可能接近。有许多不同的特定于配置的原因导致一个代理在某些用例中可能比另一个执行得更好。

在过去的几年里,SoftwareMill 已经针对持久的复制队列用例发布了流行消息代理的基准测试。上一次同时测试 ActiveMQ“Classic”和 Artemis 是在 2017 年。这里是 the results。从那时起,SoftwareMill 不再测试 ActiveMQ“Classic”。

性能测试非常复杂,如果您不控制环境的所有方面(网络数据包调整、OS 调整等),则很难确定一种消息传递产品的性能是否优于另一种。

另外,回应@Justin Bertram 的评论,即为相似的消息流特征配置两种产品需要两种产品、消息流模式和客户端应用程序编码方面的专业知识。

最后,当谈到分布式系统和产品时——通常您会在产品限制之前达到环境限制——比如磁盘性能、网络性能或应用程序延迟通常会限制性能结果。 Esp 用于 80% 的企业工作负载,这些工作负载不是大规模的。

最佳建议 -- 了解您预期的消息流模式和消息大小。对该场景进行性能测试,直到您知道何时需要扩展。