当前位置: 首页 > 知识库问答 >
问题:

与“经典”相比,ActiveMQ Artemis性能下降

司寇研
2023-03-14

我正在进行从ActiveMQ“Classic”5.15.4到ActiveMQ Artemis 2.17.0的迁移,发现性能下降。我和一个制作人就一个主题进行了测试,并有不同数量的消费者使用该主题。我在测量信息创建和消费者接收之间的时间。

测试在一个由3个节点组成的集群上进行,所有节点都相互连接。每个代理都嵌入到一个JBoss中。我使用了一个由3个节点组成的集群,因为这是我们当前的生产设置。我挑战这个设置,因为我们的消费者和生产者很少(每次不到50个),我们正在使用消息分组,但我需要在只有2个节点处于活动/备用模式的设置上进行POC。

生产者总是针对同一个节点,消费者随机连接到其他2个节点。

我们可以看到,在所有情况下,Artemis都比ActiveMQ Classic稍慢。我想知道这是否是意料之中的事。

共有2个答案

柳俊逸
2023-03-14

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

此外,与@Justin Bertram的评论相呼应的是,配置两个具有相似消息流特征的产品需要在这两个产品、消息流模式和客户端应用程序编码方面的专业知识。

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

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

韶宏邈
2023-03-14

一般来说,由于ActiveMQ Artemis和ActiveMQ“Classic”之间存在显著的架构差异,因此它们的速度明显快于ActiveMQ。简而言之,ActiveMQ Artemis被设计成完全无阻塞的,与ActiveMQ“经典”相比,它在规模上表现得非常好。

然而,在这种情况下,你不是在大规模测试经纪人。你正在测试一个生产者和“不同数量”的消费者。这当然不是那种需要3个代理集群的生产用例。一个拥有普通甚至最小硬件的经纪人几乎肯定就足够了。

即使你把客户端数量推到50个左右,我仍然认为一个活动节点就足够了。如果使用消息分组,您肯定只想使用一个活动节点。有关集群消息分组的重要详细信息,请参阅文档。

同样重要的是要记住,你必须根据每个经纪人的配置进行“苹果对苹果”的比较。这不一定是微不足道的,尤其是在处理集群时。你没有分享你的代理配置,所以我不能评论它们在功能上是否等效,或者至少在功能上尽可能接近等效。在某些用例中,一个代理可能会比另一个更好,这有许多不同的特定于配置的原因。

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

 类似资料:
  • 问题内容: 我试图找出如果将主键更改为BIGINT(20)时表的性能是否会下降。目前,我正在使用INT(7),并且已经有大约 300.000个条目具有大ID(7或8位数字) 。我已经搜索了很多东西,但只发现它使用了更多的磁盘空间(这很明显)。 我所有的ID现在都有7位数字,但是我的客户希望更改为8位数字。将来我将无法轻松更改软件,因此我考虑现在使用BIGINT(20)以防万一。即使我不需要使用BI

  • 更新:为了更明显地说明我正在努力做的事情:我将拥有5000万以上的设备流媒体音频。流平均为100KB,峰值流量时为200K流/分钟。我正在寻找一种存储解决方案来满足这种需求。我一直在研究Bookkeeper、Kafka、Ignite、Cassandra和Redis。到目前为止,我只对redis和ignite进行了基准测试,但我很惊讶ignite这么慢。

  • 我正在运行一个查询,使用聚合打印大约300个结果。 在Robo3t/Mongo shell中执行查询非常快,但在NodeJS中使用mongoose执行查询时非常慢。 尝试寻找答案,登陆到这个链接,尝试设置,但是两个查询的差异仍然是7-8秒

  • 在Joshua Bloch的有效JAVA中,当我阅读静态工厂方法时,有一个声明如下 静态工厂方法从重复调用中返回相同对象的能力允许类在任何时候对存在的实例保持严格控制。这样做的类称为实例控制类。编写实例控制类有几个原因。实例控件允许类保证它是单实例(第3项)或不可实例化(第4项)。此外,它允许一个不可变类(项目15)保证不存在两个相等的实例:a.equals(b)当且仅当a==b。如果一个类做出此

  • 本文向大家介绍JavaScript 异步功能与承诺相比,包括了JavaScript 异步功能与承诺相比的使用技巧和注意事项,需要的朋友参考一下 示例 async功能不能代替Promise类型;他们添加了使承诺更容易调用的语言关键字。它们是可互换的: 使用承诺链的任何函数都可以使用重写await: 可以使用async/重写该函数await,如下所示: 的这种async变体newUnicorn()似乎