【问题标题】:How does a queueing service like RabbitMQ operate on a cluster?像 RabbitMQ 这样的队列服务如何在集群上运行?
【发布时间】:2019-01-31 02:13:06
【问题描述】:

我了解队列服务如何独立工作,但我不明白它在集群上如何工作?

如果一个队列出现故障,是否会向每个队列发送相同的消息以减轻损害?还是它们对每个队列进行负载平衡?

此外,如果它们在每个队列上进行负载平衡,是否就不需要像 Celery 这样的服务?

谢谢

【问题讨论】:

    标签: architecture rabbitmq celery message-queue


    【解决方案1】:

    来自 rabbitmq 官方文档:

    1 - 像 RabbitMQ 这样的队列服务如何在集群上运行?

    聚类

    运行 RabbitMQ 代理所需的所有数据/状态是 在所有节点上复制。一个例外是消息队列, 默认情况下驻留在一个节点上,尽管它们是可见的并且 可从所有节点访问。跨节点复制队列 集群,请参阅high availability 上的文档(注意:本指南 是镜像的先决条件)。

    节点是平等的一些分布式系统有领导者和 追随者节点。对于 RabbitMQ,这通常不是真的。中的所有节点 一个 RabbitMQ 集群是平等的对等点:没有特殊的节点 RabbitMQ 核心。队列镜像时这个话题变得更加微妙 和插件被考虑在内,但对于大多数意图和 目的,所有集群节点都应该被认为是平等的

    2 - 如果一个队列出现故障,是否会向每个队列发送相同的消息以减轻损害?

    队列镜像

    默认情况下,RabbitMQ 集群中的队列内容位于 在单个节点(声明队列的节点)上。这是 与总是可以考虑的交换和绑定相反 在所有节点上。队列可以选择镜像 多个节点。

    每个镜像队列由一个主服务器和一个或多个镜像组成。 主节点托管在一个通常称为主节点的节点上。 每个队列都有自己的主节点。给定队列的所有操作 首先应用于队列的主节点,然后传播到 镜子。这包括将发布排入队列、将消息传递到 消费者,跟踪消费者的确认等等。

    队列镜像意味着节点集群。因此不是 建议跨 WAN 使用(当然,客户端仍然可以 连接尽可能近和尽可能远)。

    发布到队列的消息被复制到所有镜像。 消费者连接到主节点,无论他们是哪个节点 连接到,镜像丢弃已确认的消息 在主人。因此,队列镜像增强了可用性,但 不跨节点分配负载(所有参与节点每个都 所有的工作)。

    如果托管 queue master 的节点发生故障,最旧的镜像将是 只要它同步就提升为新主人。不同步 也可以提升镜像,具体取决于队列镜像参数。

    有多个术语通常用于识别主要和 分布式系统中的辅助副本。本指南通常使用 “master”指代队列的主副本,“mirror”指代队列的主副本 次要副本。但是,您会发现这里使用了“奴隶”,并且 那里。这是因为 RabbitMQ CLI 工具在历史上一直使用 术语“奴隶”指代次要。因此这两个术语都是 目前可互换使用,但我们希望最终摆脱 旧术语。

    欲了解更多信息:https://www.rabbitmq.com/clustering.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 2018-08-14
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多