为什么要运行消息队列(例如RabbitMQ)集群?

问题描述 投票:-1回答:1

概观

RabbitMQ代理是一个或多个Erlang节点的逻辑分组,每个节点运行RabbitMQ应用程序并共享用户,虚拟主机,队列,交换,绑定和运行时参数。有时我们将节点集合称为集群。

你为什么要这样做?我理解增加消息的持久性(如果节点发生故障,其他队列仍然会收到消息)。但性能呢?集群如何提高性能。不是所有的消费者/生产者都会连接到主节点的队列吗?如果是这样,我们不是仍然在单个节点上获得流量吗?我们是否设置了负载均衡器,以便每次都将流量引导到不同的节点?

RabbitMQ集群如何提高性能?

rabbitmq queue distributed-system
1个回答
0
投票

那么,在该段之后,文档说明如下:

什么是复制?

RabbitMQ代理操作所需的所有数据/状态都将在所有节点之间复制。一个例外是消息队列,它们默认驻留在一个节点上,尽管它们是可见的并且可以从所有节点到达。要跨群集中的节点复制队列,请参阅有关高可用性的文档(请注意,您需要首先使用工作群集)。

因此,您可以集群在RabbitMQ代理中提供比单个节点单独提供的更高容量。请注意clustering by itself is not a high-availability strategy

消息持久性增加的断言是错误的,因为消息队列继续驻留在一个代理上(除非使用镜像)。

默认情况下,RabbitMQ集群中队列的内容位于单个节点(声明队列的节点)上[1]

如果没有镜像,当该节点发生故障时,其上的消息将丢失。群集将队列放在不同的节点上。 RabbitMQ does not handle network partitions well,所以这可能有点问题。

“不管我们是不是仍然在一个节点上获得流量?” - 如果你只有一个队列,那么是的。但是,更大的问题是“为什么要运行只有一个队列的消息代理?”同样,如果只在一个节点上创建队列,那么系统中仍然会有一个故障点。

© www.soinside.com 2019 - 2024. All rights reserved.