分布式集群关于性能的问题

时间:2013-03-15 09:31:47

标签: rabbitmq

我正在使用6台服务器来建立集群,它们都是磁盘节点。我使用rabbitmq收集我们网站的日志文件。现在在高峰时段,发布率约为每秒30k消息。有2个主要消费者(hdfs和elasticsearch),每个消费者需要处理所有消息,因此交付率达到每秒约6万。

在我的方案中,单个服务器可以保持10k的传输速率,我使用6个节点来平衡压力。我的解决方案是我在每个节点上创建了2个队列。每条消息都带有一个随机的路由密钥(类似于message.0,message.1等),以便将压力分配给每个节点。

令我困惑的是:

所有消息都发送到一个节点。我应该使用HA代理来平衡此发布压力吗?

  1. Durable Queues和Transient Queues之间是否存在任何性能差异?
  2. 内存节点和磁盘节点之间是否存在任何性能差异?我所知道的是内存节点和磁盘节点之间的区别只是关于队列配置等元数据。
  3. 如何改善发布和交付代码的性能?我研究过,我知道几种方法:
    • 禁用确认机制(在发布代码中?)
    • 启用HiPE(我已经完成了这项工作并且帮助很多)
  4. 例如,输入为1w mps(每秒消息),有两个消费者使用所有消息。然后输出为2w mps。如果我的服务器可以处理1w mps,我需要两个服务器来处理2w-mps压力。现在,新的消费者也需要消费所有消息。结果,输出达到3w mps,所以我还需要另外一台服务器。得出结论,还有一个消费者为所有消息,还有一个服务器?

1 个答案:

答案 0 :(得分:0)

  

“所有消息都发送到一个节点。我应该使用HA代理来平衡此发布压力吗?”

This文章概述了一些旨在在RabbitMQ中分配负载的设计。

  

“Durable Queues和Transient Queues之间是否存在任何性能差异?”

是的,Durable Queues备份到磁盘,以便在服务器重启时恢复它们。这增加了标称开销,但实际过程是异步发生的。

  

“内存节点和磁盘节点之间是否存在任何性能差异?”

不是我知道的,但这取决于机器本身。

  

“我如何改善发布和交付代码的性能?”

尝试this