【问题标题】:Will it make a difference in performance to have multiple ques across different nodes?跨不同节点有多个查询是否会对性能产生影响?
【发布时间】:2013-09-13 15:24:34
【问题描述】:

现在我正在研究如何提高 Rabbit 的效率。


例如:

组件:

  • TCP 负载均衡器
  • 制片人
  • RabbitMQ 集群
  • 消费者

生产者:

2-5 个 EC2 服务器。每台服务器都安装并配置了logstash 以向 Rabbit 发送消息。这没什么特别的。只有一个要求,消息需要持久化。 (以防 I/O 不是问题)

RabbitMQ 集群:

2 个 EC2 服务器。大量的内存,cpu,良好的磁盘,良好的带宽。

消费者:

2 到 15 个消费者的数量可能非常不同。消费者连接到负载均衡器 (ELB)。其中一些使用basic.get,其中一些使用basic.consume。要求:no_ack = False,表示所有消息都需要确认。


现在我们有一个队列可以容纳 95% 的流量。我的问题是:

  • 如果我在兔子集群中的每个节点上创建相同数量的队列。(现在我正在讨论如何分配这个高流量队列的负载。)每个生产者都会向自己发布消息队列。另一端的消费者将订阅所有队列并从每个队列中获取消息。它会提高性能吗?
  • 交换和队列之间的一对一关系也会对性能产生影响吗?
  • 最后,在这种情况下您会推荐什么? (消费者不能动态配置)

【问题讨论】:

    标签: java python amazon-ec2 queue rabbitmq


    【解决方案1】:

    首先,如果您要镜像队列并使用持久消息,则会损害性能。有关详细信息,请参阅我在performance of RabbitMQ HA 上的文章。

    尽管考虑更多队列以提高吞吐量是对的 - 每个 RabbitMQ 都是一个 Erlang 进程,因此只会使用一个内核。当然还有其他 Erlang 进程会有所帮助,但你确实受到了单个队列的限制。答案是consistent hash exchange type,它将消息均匀地分配到与其连接的每个队列。 YMMV,但我想您希望每台服务器的每个核心都有一个队列。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多