本文是从 Message Queue Shootout! 这篇文章翻译而来。

http://www.aqee.net/message-queue-shootout/

我花了一周的时间评估比较了一下各种消息队列产品,非常的有趣。我做这个事的动机是因为一个客户有一个很高性能需求。他们的消息信息突破了1百万个并发。目前他们使用的是SQL server,并不理想,我建议他们使用消息队列服务器。

为了对一些相似的候选产品获得一个全面的但是粗浅的性能上的了解,我们它们放在一起做了个测试。我让每个消息产品各发送和接受1百万千条1K的消息。测试准备的有些仓促,我并没有修改任何的配置,只是快速的看了一下它们的安装文档,安装好每种软件,然后就让它们做这些最简单的收发信息的操作。所以这是一次真正的“开箱即装即用”的性能表现。我完全理解,这对那些初始配置十分保守的消息队列产品将会是个惩罚。

候选产品有:

  • MSMQ.
    这是微软的产品里唯一被认为有价值的东西。对我的客户来说,如果MSMQ能证明可以应对这种任务,他们将选择使用它。关键是这个东西并不复杂,除了接收和发送,没有别的;它有一些硬性限制,比如最大消息体积是4MB。然而,通过和一些像MassTransit 或 NServiceBus这样的软件的连接,它完全可以解决这些问题。
  • ActiveMQ.
    Java世界的中坚力量。它有很长的历史,而且被广泛的使用。它还是跨平台的,给那些非微软平台的产品提供了一个天然的集成接入点。然而,它只有跑过了MSMQ才有可能被考虑。
  • RabbitMQ.
    我听说了很多关于这个用Erlang写成的消息中间件的优秀的特性。它支持开放的高级消息队列协议 (AMQP,Advanced Message Queuing Protocol),从根本上避免了生产厂商的封闭,使用任何语言的各种客户都可以从中受益。这种协议提供了相当复杂的消息传输模式,所以基本上不需要MassTransit 或 NServiceBus 的配合。它还具有“企业级”的适应性和稳定性。这些东西对我的客户来说十分的有吸引力。
  • ZeroMQ.
    我在研究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上。我很感兴趣(但不是非常非常感兴趣)想知道如何优化这些测试,所以,如果你能做到一个更好的测试结果,请告诉我。谢谢。

https://github.com/mikehadlow/Mike.MQShootout

转载于:https://www.cnblogs.com/freebird92/archive/2012/01/19/2326352.html

[转]消息队列软件大比拼相关推荐

  1. 消息队列软件产品大比拼

    导读:本文是从<Message Queue Shootout!>这篇文章翻译而来,译文来自外刊IT评论<消息队列软件产品大比拼>. 内容如下: 我花了一周的时间评估比较了一下各 ...

  2. 消息队列系列二(IOT中消息队列的应用)

    许多消息队列旨在为您的应用程序提供轻量级的发布/订阅消息传输协议.为什么以及何时在您的物联网项目中使用消息队列? 考虑温室中的温度传感器,它测量温度.您的应用程序可以在15分钟的时间间隔内(每天月96 ...

  3. PHP高级编程之消息队列

    1. 什么是消息队列 消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式 2. 为什么使用消息队列 消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻 ...

  4. 【消息队列】五个问题详解消息中间件

    1.消息中间件是什么 消息队列,又叫做消息中间件.是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程 ...

  5. 消息队列之Kafka

    背景:Dubbo远程调用的性能问题 Dubbo调用普遍存在于我们的微服务项目中, 这些Dubbo调用全部是同步的操作, 这里的"同步"指:消费者A调用生产者B之后,A的线程会进入阻 ...

  6. 消息通讯之关于消息队列MQ必须了解的相关概念

    目录 系统通讯方式有哪些? 消息队列的应用场景 消息队列通讯模型 常见的消息协议 AMQP MQTT ATOMP JMS 小结 系统通讯方式有哪些? RPC调用 RPC 全称 Remote Proce ...

  7. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ

    RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ ...

  8. JSD-2204-(业务逻辑开发)-续秒杀业务-消息队列-Day14

    1.续秒杀业务准备 1.1设置定时任务 1.1.1将库存和随机码保存到Redis 利用Quartz将库存和随机码保存到Redis 1.创建Job接口实现类 2.创建配置类,配置JobDetail和Tr ...

  9. linux查看kafka队列消息,Kafka消息队列-从开始到上线

    运行环境 操作系统:Windows 10 : Linux发行版:CentOS Linux release 7.6.1810 (Core) JDK版本:1.8.0_221 说在前面 kafka作为开源的 ...

最新文章

  1. 深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失梯度爆炸)
  2. 手写 Promise.all
  3. 为什么做的报表领导不满意,如何提升报表的价值?
  4. lisp方格网法计算土方量_飞时达土方软件多级边坡土方量计算(选方格点放坡)...
  5. 触发器中的 Inserted表和Deleted表
  6. 使用Rufus制作LINUX启动安装U盘(成功)
  7. k2p 官方固件纯净版
  8. 华为鸿蒙机顶盒,华为暗中放弃电视盒子业务,上百万的老用户该怎么办?
  9. 高等数学张宇18讲 第十八讲 第二型曲线曲面积分
  10. CMC5601-微芯智能科技6轴运动控制器
  11. 谷歌中国正式宣布李开复辞去总裁一职
  12. 个人博客logo如何设计?案例合集参考
  13. c语言 自动生成word文件,C#根据Word模版生成Word文件
  14. 你真的佩戴好劳保防护用品了吗?这才是正确的打开方式
  15. 差异增量备份和累积增量备份区别(有图)
  16. Java/Sacla 获取间隔内的全部日期
  17. Win10 2004版本中关于VT-x技术的大坑
  18. ReLU函数 Vs Sigmoid 函数——XOR问题究竟用那个好
  19. 计算机应用基础说课稿的模板,计算机应用基础说课稿
  20. android 屏幕录制代码,Android 录制屏幕的实现方法

热门文章

  1. 数据分析 超市条码_一样的品牌哪里买?9.9元都不到的品牌牛排、火锅原来在条码商城...
  2. linux启动docker_10分钟快速掌握Docker必备基础知识
  3. 信息系统项目管理师:第1章:信息化与信息系统-重点汇总
  4. oracle取得序列当前值(不改变当前序列值)
  5. 笔记-信息化与系统集成技术-智慧城市建设参考模型
  6. Angular中怎样创建service服务来实现组件之间调用公共方法
  7. Angular中提示:Can't bind to 'ngModel' since it isn't a known property of 'input'
  8. Winform中实现ZedGraph新增自定义Y轴上下限、颜色、标题功能
  9. 从实例入手Shiro并实现HellloWorld
  10. 怎样下载并使用soapUI进行webservice接口测试