Apache ActiveMQ 与原始套接字的性能开销是多少?

Posted

技术标签:

【中文标题】Apache ActiveMQ 与原始套接字的性能开销是多少?【英文标题】:What is the performance overhead of Apache ActiveMQ vs. raw sockets? 【发布时间】:2012-03-07 13:57:29 【问题描述】:

我们正在寻求实施 ActiveMQ 来处理我们的两台服务器之间的消息传递,在地理多样化的环境中(澳大利亚到英国,然后通过互联网返回)。

我一直在网上寻找一些模糊的性能指标,但到目前为止都没有运气。

我的问题:与基本消息传递的 DIY TCP/SSL 实现相比,ActiveMQ 将如何执行?我们自己的类似系统可以在 100-150 毫秒内通过已建立连接的 SSL 层在澳大利亚各地发送和接收消息。

此外,ActiveMQ 是否保留其 TLS/SSL 连接,从而节省大量已用于创建/拆除连接的时间?

我希望它至少在每个请求级别上比 HTTPS 执行得更好。

我知道性能可能会因硬件、网络、代码等因素而有显着差异。我只是想开始做一些事情。

我知道以上内容有点模糊 - 如果您需要任何澄清,请告诉我,我很乐意为您效劳。

谢谢。

【问题讨论】:

这种比较太板了,完全没用。每个都是自己的域。 @TimBish 如果您愿意解释为什么这个问题没用?我看到你在 MQ 上工作,所以我想你会有一些想法。了解 MQ 是否保持其 SSL 连接将有助于了解它是否是解决我们问题的正确技术选择。有什么办法可以澄清我的答案吗?也许通过指定消息内容大小(几 K)和它必须在(1000 毫秒)以下执行的速度? 【参考方案1】:

蒂姆的意思是,这不是苹果对苹果的比较。如果您只关心传输数据的单点对点连接的性能,那么直接链接会给您带来很好的结果(尽管 DIY 仍然是一个值得怀疑的设计决策)。如果您正在构建一个需要传输数据的系统并且您有更复杂的功能需求,那么像 ActiveMQ 这样的基于代理的消息传递平台就会发挥作用。

如果需要,您应该考虑基于代理的消息传递:

一种邮局风格的系统,其中生产者发送一条消息,并且知道它会在某个时间点被消费,即使当时那里没有消费者 不关心消息的使用者在哪里,或者有多少人 保证消息将被消费,即使第一个处理消息的消费者在流程(事务、重新传递)中途死亡 许多消费者,保证一条消息只会被消费一次 - 队列 许多消费者都会对一条消息做出反应 - 主题

这些模式非常标准,适用于所有现成的消息传递产品。作为一般规则,在这个领域DIY是个坏主意,因为消息传递很复杂(请参阅http://www.ohloh.net/p/activemq/estimated_cost,了解您这样做需要多长时间);并且有许多不同风格的现有实现(有些没有代理),它们都被很好地使用、商业支持并且不需要您维护它们。在进入 TCP 级别进行任何类型的数据传输之前,我会非常努力地考虑,因为现有技术太多了。

【讨论】:

以上是关于Apache ActiveMQ 与原始套接字的性能开销是多少?的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 网络套接字与 ActiveMQ 网络套接字

Apache-activeMQ入门教程

监控 ActiveMQ 性能的工具

Web Socket 与 JMS 或 Activemq [关闭]

Apache ActiveMQ Artemis简介

Apache ActiveMQ Artemis简介