【问题标题】:Is RabbitMQ Clustering including scalability too?RabbitMQ 集群是否也包括可扩展性?
【发布时间】:2016-08-14 11:20:24
【问题描述】:

我想构建一个能够横向扩展以提高性能的 RabbitMQ 系统。

我浏览了 RabbitMQ Clustering 的官方文档。但是,它的集群似乎不支持可扩展性。这是因为只有通过主队列我们才能发布/消费,即使主队列可以从集群的任何节点访问。除了主队列所在的节点之外,我们无法处理任何发布/消费。

那我们为什么要集群呢?

【问题讨论】:

标签: rabbitmq cluster-computing scalability


【解决方案1】:

那我们为什么要集群呢?

  • 确保可用性。
  • 强制执行数据复制。
  • 将负载/数据分散到不同节点上的队列中。主队列可以存储在不同的节点上,并以

除了主队列所在的节点,我们无法处理 任何发布/消费。

客户端可以连接在集群的任何节点上。该节点会将“请求”传输到主队列节点,反之亦然。作为一个缺点,它会产生额外的跳跃。

【讨论】:

  • 为了提高吞吐量,逻辑上应该驻留在单个队列中的数据的原始副本是否可以分布在多个节点上?这就是你说的吗?顺便说一句,感谢您的友好回答。
  • 您可以使用federated queue 实现某种负载平衡。您也可以在客户端实现负载平衡:生产者将消息发布到带有路由密钥后缀的交换,该路由密钥后缀根据负载平衡因子(例如 key.0、key.1、key.0 .... 两个队列)。在服务器端,您使用绑定键key.0key.1 将这两个队列绑定到此交换。这些队列由两个专用节点管理。消费者从这两个队列中消费......
  • 那么,即使处理请求的节点是镜像的并且是从节点,请求也会被定向到主队列,对吧?
  • @NicolasLabrot 分片不是比在集群节点上定义不同的队列更好吗?
【解决方案2】:

回答标题Is RabbitMQ Clustering including scalability too? 中的问题 - 是的,这是通过简单地向集群添加更多节点/从集群中移除一些节点来实现的。当然,您必须考虑 高可用性 - 即队列和交换 镜像 等。
只是为了说明以下几点:

但是,它的集群似乎不支持可扩展性。那是 因为只有通过主队列我们才能发布/消费,即使 可以从集群的任何节点访问主队列。

发布是为了交换,队列与发布无关。发布客户端仅发布到交换和路由密钥。它不需要任何关于队列的知识。

【讨论】:

    猜你喜欢
    • 2018-11-15
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多