RabbitMQ
或者 Qpid
来提高其性能?注意:
测试是在一个虚拟机上进行的,配备了两个处理器。结果可能因不同硬件而异,然而我主要关心 MQ 产品的相对性能。
RabbitMQ
或者 Qpid
来提高其性能?注意:
测试是在一个虚拟机上进行的,配备了两个处理器。结果可能因不同硬件而异,然而我主要关心 MQ 产品的相对性能。
RabbitMQ可能对这些消息进行了持久化。我认为您需要设置消息优先级或另一个选项来不进行持久化。然后性能将提高10倍。您应该至少期望通过AMQP代理每秒传递100K条消息。在OpenAMQ中,我们的性能达到了300K条消息/秒。
AMQP旨在实现速度(例如,它不按顺序解包消息以进行路由),但是ZeroMQ在关键方面的设计更好。例如,通过连接节点而不使用代理程序来删除跳跃; 它比任何AMQP客户端堆栈都做得更好的异步I/O; 它执行更积极的消息批处理。也许60%的时间花在了ZeroMQ的性能调整上。那是非常辛苦的工作。 它不是偶然变得更快。
我想做一件事,但是太忙了,就是在ZeroMQ之上重新创建类似于AMQP的代理程序。 这里有一个第一层: http://rfc.zeromq.org/spec:15。 整个堆栈的工作方式有点像RestMS,将传输和语义分离为两个层次。 它将提供与AMQP/0.9.1相同的功能(并且在语义上是互操作的),但速度显著更快。
当然,ZeroMQ会更快,因为它是为此目的而设计的,并且没有其他两种提供的基于代理的功能。 ZeroMQ网站 进行了代理与无代理消息传递的精彩比较,并且列出了二者的缺点和优势。
RabbitMQ和0MQ专注于消息传递的不同方面。 0MQ更加关注消息如何通过网络传输。另一方面,RabbitMQ则着眼于消息的存储、过滤和监控。
(我也喜欢上述RabbitMQ帖子,因为它还讨论了如何使用ZeroMQ与RabbitMQ)
所以,我的意思是你应该根据自己的需求选择最合适的技术。 如果唯一的需求是速度,则选择ZeroMQ。但是,如果您需要消息持久性、过滤、监控、故障转移等其他方面,那么就需要考虑RabbitMQ和Qpid。
我测试过c++/qpid。
我在两台不同的机器之间长时间发送了50000条消息,没有任何排队。
我没有使用fanout,只是一个简单的交换(非持久化消息)。
你是否使用持久化消息?
你是否解析这些消息?
我想应该不会,因为0MQ没有消息结构。
如果代理主要处于空闲状态,则可能尚未在发送器和接收器上配置预取。这对于发送许多消息非常重要。
"你好世界" --
入队:每秒28000条消息;
出队:每秒1900条消息。1024字节的文本 --
入队:每秒8000条消息;
出队:每秒1000条消息。10 * 1024字节的文本 --
入队:每秒800条消息;
出队:每秒700条消息。
我们开发了一个基于ZeroMQ的开源消息总线 - 最初是为了替换Qpid。它是无代理的,所以这不是完全公平的比较,但它提供了与代理解决方案相同的功能。
我们的主要性能指标是两台机器之间每秒处理140K条消息,但您可以在此处查看更多详细信息:https://github.com/Abc-Arbitrage/Zebus/wiki/Performance