导读:本文是从《Message Queue Shootout!》这篇文章翻译而来,译文来自外刊IT评论《消息队列软件产品大比拼》。
内容如下:
我花了一周的时间评估比较了一下各种消息队列产品,非常的有趣。我做这个事的动机是因为一个客户有一个很高性能需求。他们的消息信息突破了1百万个并发。目前他们使用的是SQL server,并不理想,我建议他们使用消息队列服务器。
为了对一些相似的候选产品获得一个全面的但是粗浅的性能上的了解,我们它们放在一起做了个测试。我让每个消息产品各发送和接受1百万千条1K的消 息。测试准备的有些仓促,我并没有修改任何的配置,只是快速的看了一下它们的安装文档,安装好每种软件,然后就让它们做这些最简单的收发信息的操作。所以 这是一次真正的“开箱即装即用”的性能表现。我完全理解,这对那些初始配置十分保守的消息队列产品将会是个惩罚。
候选产品有:
MSMQ.
这是微软的产品里唯一被认为有价值的东西。对我的客户来说,如果MSMQ能证明可以应对这种任务,他们将选择使用它。关键是这个东西并不复杂,除了 接收和发送,没有别的;它有一些硬性限制,比如最大消息体积是4MB。然而,通过和一些像MassTransit或NServiceBus这样的软件的连 接,它完全可以解决这些问题。
Java世界的中坚力量。它有很长的历史,而且被广泛的使用。它还是跨平台的,给那些非微软平台的产品提供了一个天然的集成接入点。然而,它只有跑过了MSMQ才有可能被考虑。
我听说了很多关于这个用Erlang写成的消息中间件的优秀的特性。它支持开放的高级消息队列协议(AMQP,Advanced Message Queuing Protocol),从根本上避免了生产厂商的封闭,使用任何语言的各种客户都可以从中受益。这种协议提供了相当复杂的消息传输模式,所以基本上不需要 MassTransit或NServiceBus的配合。它还具有“企业级”的适应性和稳定性。这些东西对我的客户来说十分的有吸引力。
我在研究AMQP时从发现了这个产品。开发这个产品的公司是AMQP集团的一部分,并且还有一个叫做OpenAMQ的产品。然而,他们却戏剧性的从AMQP分离的出去,并抱怨说这这个产品迷失了方向、变的越来越复杂。你可以到这里阅 读Dear John的关于此事的文章。ZeroMQ具有一个独特的非中间件的模式,也就是说,跟其它几个接受测试的产品不同,你不需要安装和运行一个消息服务器,或 中间件。你只需要简单的引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之间发送消息了。非常有趣的是,他们也同样使用这 方式在任何利用ZeroMQ进行强大的进程内通信的语言里创建Erlang风格的这种执行角色。
把这四个MQ产品装上、跑起来是一个很有趣的工作。当你需要安装一个非Windows平台的产品时,下一定的功夫那是必须的。ActiveMQ需要 在目标机器上安装Java,RabbitMQ需要Erlang环境。安装这两个产品都没有遇到麻烦,但我想这是否给系统的维护增加了一层任务。如果这个中 的一个被选中,我需要让系统维护的人去理解和维护他们以前不熟悉的运行库。ActiveMQ,
RabbitMQ和MSMQ都需要启动服务进程,这些都可以监控和配置,另外一个就有问题了。
ZeroMQ,它没有中间件架构,不需要任何服务进程和运行时。事实上,你的应用程序端点扮演了这个服务角色。这让部署起来非常简单,但担心的是, 你没有地方可以观察它是否有问题出现。就目前我知道的,ZeroMQ仅提供非持久性的队列。你可以在需要的地方实现自己的审计和数据恢复功能。老实说,我 甚至不确信是否该把它列在此次测试中,它的运行原理和其它几种差别太大了。
我就不瞎扯了,下面是测试结果。显示的是发送和接受的每秒钟的消息数。整个过程共产生1百万条1K的消息。测试的执行是在一个Windows Vista上进行的。
就像你看到的,ZeroMQ和其它的不是一个级别。它的性能惊人的高。公平的说,ZeroMQ跟其它几个比起来像头巨兽,尽管这样,结论很清楚:如果你希望一个应用程序发送消息越快越好,你选择ZeroMQ。当你不太在意偶然会丢失某些消息的情况下更有价值。
老实讲,我更希望使用Rabbit。但这种事情是应该做更多的测试,你最终会有一个最爱,我所听到的、读到的各种关于Rabbit的事情让我觉得它应该是最佳选择。但使用这个测试结果,我很难说服他们不去使用MSMQ。
如果你想自己跑一下这些测试,我的测试代码都放在了GitHub上。我很感兴趣(但不是非常非常感兴趣)想知道如何优化这些测试,所以,如果你能做到一个更好的测试结果,请告诉我。谢谢。
原文地址:http://www.cnblogs.com/amityat/archive/2011/08/31/2160293.html
相关推荐
消息队列是一种应用系统之间进行异步通信的中间件,它的核心功能是实现不同应用之间的信息传递,它在软件工程中常用于解耦服务、提高系统伸缩性以及保证消息传递的可靠性和顺序性。在当今分布式系统架构中,消息队列...
#### 六、不同消息队列产品的对比 针对不同的消息队列产品,可以从以下几方面进行对比: | 特性 | ActiveMQ | RabbitMQ | RocketMQ | Kafka | | --- | --- | --- | --- | --- | | 单机吞吐量 | 万级 | 同ActiveMQ |...
本文详细介绍了RabbitMQ消息队列的基本概念及其优缺点,并对比分析了几种常用的消息队列产品。此外,还深入探讨了RabbitMQ内部的工作机制,包括各个组件的功能和交互方式。对于想要深入了解RabbitMQ或准备相关面试的...
阿里云消息队列(MQ)购买指南主要涵盖了MQ服务的价格说明、计费规则、欠费处理、免费项目以及服务等级协议(SLA)。以下是详细说明: 1. **价格说明**: 阿里云MQ的价格信息可以在MQ产品的价格页面查看。计费周期...
消息队列(Message Queue,简称 MQ)是一种软件和软件之间进行通信的中间件产品。它允许不同的系统之间通过消息进行通信,而不需要关心其他系统的处理。 消息队列的优点 1. 异步处理:提高了系统吞吐量,相比于...
消息中间件是软件架构中的重要组成部分,主要用于在分布式系统中传递数据和协调不同组件之间的通信。它作为一个独立的服务,能够解耦发送者和接收者,提高系统的灵活性、可扩展性和可靠性。下面将深入探讨消息中间件...
此外,还与市场上其他成熟的产品进行了对比分析,证明了该系统的竞争力。 #### 五、结论与展望 本文详细介绍了基于JMS规范的消息中间件系统的设计与实现过程,不仅解决了分布式系统中消息传递的问题,还在安全性...
在当今的企业计算环境中,消息队列中间件(MQ)发挥着核心...整体而言,本报告是关于两种主流消息队列产品的全面性能分析,为消息队列中间件的选型提供了实用的参考框架,是企业构建稳定可靠消息队列服务的重要参考资料。
例如,讨论消息中间件的常见使用场景、对比不同消息队列产品的差异以及一些高级特性的细节。面试者需要展示自己对于ActiveMQ的设计原理、架构、性能优化等方面的理解。掌握以上知识点,面试者可以更好地应对与...
消息中间件(Message-oriented Middleware, MOM)是一种基础软件设施,专注于在分布式系统之间发送和接收消息。它通过提供高效可靠的消息传递机制来促进不同平台间的无缝数据交换,并基于数据通信来实现分布式系统的...
【中间件】是一种软件,它在不同的应用程序之间起到中介作用,负责处理消息的传输和管理,使得应用程序可以相互通信并实现异步处理。本文将对比三种经典的消息中间件:MQ(IBM出品)、JMS(Java消息服务)和TIBCO ...
Smart3D Capture 软件介绍与产品技术对比 Smart3D Capture 软件是一款集合了全球最先进数字影像处理、计算机虚拟现实以及计算机几何图形算法的全自动高清三维建模软件解决方案。该软件解决方案具有易用性、数据兼容...
在MQ(Message Queue,消息队列)领域,不同的消息中间件有着各自的特点与优势。基于提供的文件信息,本文将着重对比RabbitMQ、Kafka以及RocketMQ这三种MQ产品。 1. **RabbitMQ**:RabbitMQ 是一个开源的消息代理...
消息中间件是软件系统之间通信的一种方式,它允许应用通过异步传递消息进行解耦。这有助于提高系统的可扩展性和可靠性,因为消息生产者和消费者之间无需同时在线。常见的消息中间件有JMS、AMQP、ActiveMQ、RabbitMQ...
3. **消息队列**:利用消息队列进行异步通信。 4. **面向服务的架构(SOA)**:基于服务的通信模式,支持跨系统的互操作性。 **系统集成工具:** - **企业服务总线(ESB)**:用于实现系统间的数据传输和协议转换。 - ...
本文档基于一份关于消息队列(MQ)中间件的调研报告,对比分析了市场上流行的MQ产品。这些产品包括:ActiveMQ、RabbitMQ、RocketMQ、Joram、HornetQ、OpenMQ、MuleMQ、SonicMQ以及ZeroMQ。我们将从多个维度对这些产品...
2. 被弃软件(Abandonware):被弃软件指的是那些已不再销售或者不再获得开发商支持的软件产品。一般而言,这类软件的销售和传播被认为是不合法的,除非其版权持有者决定重新发布它为免费软件。被弃软件这一概念在...
2. **进程及进程间通信**:详细阐述进程的概念,包括进程的创建、状态转换以及Linux环境下的几种IPC机制,如信号量、共享内存、消息队列等,特别关注命名管道的工作原理和优势。 3. **OpenWrt系统架构分析**:分析...