为什么要运行消息队列(例如RabbitMQ)集群?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么要运行消息队列(例如RabbitMQ)集群?相关的知识,希望对你有一定的参考价值。
概观
RabbitMQ代理是一个或多个Erlang节点的逻辑分组,每个节点运行RabbitMQ应用程序并共享用户,虚拟主机,队列,交换,绑定和运行时参数。有时我们将节点集合称为集群。
你为什么要这样做?我理解增加消息的持久性(如果节点发生故障,其他队列仍然会收到消息)。但性能呢?集群如何提高性能。不是所有的消费者/生产者都会连接到主节点的队列吗?如果是这样,我们不是仍然在单个节点上获得流量吗?我们是否设置了负载均衡器,以便每次都将流量引导到不同的节点?
RabbitMQ集群如何提高性能?
那么,在该段之后,文档说明如下:
什么是复制?
RabbitMQ代理操作所需的所有数据/状态都将在所有节点之间复制。一个例外是消息队列,它们默认驻留在一个节点上,尽管它们是可见的并且可以从所有节点到达。要跨群集中的节点复制队列,请参阅有关高可用性的文档(请注意,您需要首先使用工作群集)。
因此,您可以集群在RabbitMQ代理中提供比单个节点单独提供的更高容量。请注意clustering by itself is not a high-availability strategy。
消息持久性增加的断言是错误的,因为消息队列继续驻留在一个代理上(除非使用镜像)。
默认情况下,RabbitMQ集群中队列的内容位于单个节点(声明队列的节点)上[1]
如果没有镜像,当该节点发生故障时,其上的消息将丢失。群集将队列放在不同的节点上。 RabbitMQ does not handle network partitions well,所以这可能有点问题。
“不管我们是不是仍然在一个节点上获得流量?” - 如果你只有一个队列,那么是的。但是,更大的问题是“为什么要运行只有一个队列的消息代理?”同样,如果只在一个节点上创建队列,那么系统中仍然会有一个故障点。
以上是关于为什么要运行消息队列(例如RabbitMQ)集群?的主要内容,如果未能解决你的问题,请参考以下文章