转自:外刊IT评论git
我花了一周的时间评估比较了一下各类消息队列产品,很是的有趣。我作这个事的动机是由于一个客户有一个很高性能需求。他们的消息信息突破了1百万个并发。目前他们使用的是SQL server,并不理想,我建议他们使用消息队列服务器。github
为了对一些类似的候选产品得到一个全面的可是粗浅的性能上的了解,咱们它们放在一块儿作了个测试。我让每一个消息产品各发送和接受1百万千条1K的消息。测试准备的有些仓促,我并无修改任何的配置,只是快速的看了一下它们的安装文档,安装好每种软件,而后就让它们作这些最简单的收发信息的操做。因此这是一次真正的“开箱即装即用”的性能表现。我彻底理解,这对那些初始配置十分保守的消息队列产品将会是个惩罚。apache
候选产品有:服务器
把这四个MQ产品装上、跑起来是一个颇有趣的工做。当你须要安装一个非Windows平台的产品时,下必定的功夫那是必须的。ActiveMQ须要在目标机器上安装Java,RabbitMQ须要Erlang环境。安装这两个产品都没有遇到麻烦,但我想这是否给系统的维护增长了一层任务。若是这个中的一个被选中,我须要让系统维护的人去理解和维护他们之前不熟悉的运行库。ActiveMQ,
RabbitMQ 和 MSMQ 都须要启动服务进程,这些均可以监控和配置,另一个就有问题了。架构
ZeroMQ,它没有中间件架构,不须要任何服务进程和运行时。事实上,你的应用程序端点扮演了这个服务角色。这让部署起来很是简单,但担忧的是,你没有地方能够观察它是否有问题出现。就目前我知道的,ZeroMQ仅提供非持久性的队列。你能够在须要的地方实现本身的审计和数据恢复功能。老实说,我甚至不确信是否该把它列在这次测试中,它的运行原理和其它几种差异太大了。并发
我就不瞎扯了,下面是测试结果。显示的是发送和接受的每秒钟的消息数。整个过程共产生1百万条1K的消息。测试的执行是在一个Windows Vista上进行的。wordpress
就像你看到的,ZeroMQ和其它的不是一个级别。它的性能惊人的高。公平的说,ZeroMQ跟其它几个比起来像头巨兽,尽管这样,结论很清楚:若是你但愿一个应用程序发送消息越快越好,你选择ZeroMQ。当你不太在乎偶然会丢失某些消息的状况下更有价值。性能
老实讲,我更但愿使用Rabbit。但这种事情是应该作更多的测试,你最终会有一个最爱,我所听到的、读到的各类关于Rabbit的事情让我以为它应该是最佳选择。但使用这个测试结果,我很难说服他们不去使用MSMQ。测试
若是你想本身跑一下这些测试,个人测试代码都放在了GitHub上。我很感兴趣(但不是很是很是感兴趣)想知道如何优化这些测试,因此,若是你能作到一个更好的测试结果,请告诉我。谢谢。优化