RabbitMQ分布式部署方案简介

当单台RabbitMQ的性能不能满足我们的要求时,我们需要对其进行分布式部署,官方提供了三种方式来实现RabbitMQ的分布式部署,他们之间可以多种组合共同部署,我们分别介绍下

Clustering

这种方式属于原生的“集群”,该种方式在逻辑上将多台机器联合到一起,对外只相当于一个broker,集群中的所有机器必须运行RabbitMQ和Erlang的相同版本。除了queue以外所有的数据将在集群中复制,queue默认只驻留在一个节点上,但是连接到集群中任何节点的client都可以看到集群中的所有队列,即使它们不在该节点上。要使队列实现高可用,可以使用镜像队列。使用镜像集群的缺点就是节点之间要传输大量的数据。

不像其他软件的集群方案,RabbitMQ集群中节点之间没有主从节点之分。

Federation

这种方式利用插件的机制实现集群,它的目标是不通过集群在broker之间传递消息,俩个broker可以有不同的 virtual hosts和用户,也可以运行在不同版本的RabbitMQ和Erlang上,broker之间通过AMQP协议进行通讯。Federation使exchange和queue联合起来,Federation exchange和 Federation queue可以从其他broker上的exchanges和queues接收消息。Federation exchange可以将消息路由到本地的queue,Federation queue允许本地消费者从其他broker获取消息。

Shovel

它也是利用插件的机制实现集群,它将消息可靠的从broker中的queue移动到broker中的exchange,源和目的的broker可以相同或者不同,与Federation类似,使用WAN连接,broker可以运行在不同的Erlang与RabbitMQ版本上,连功能都大致相同,只不过Shovel相比于Federation粒度更细。

三者对比

由于Federation和Shovel类似,这里把他俩归为一类。

Federation/Shovel:每个broker在逻辑上是独立的;每个节点可以运行在不同的Erlang和RabbitMQ版本;broker之间通过广域网进行连接,消息传递使用AMQP协议;broker之间可以以各种拓扑形式连接,连接可以是双向或者单向;在CAP理论中更侧重于A(可用性)P(分区容错性);连接到集群中的一个节点只能看见该节点上的queue。

Clustering:逻辑上是相当于一个broker;每个节点Erlang和RabbitMQ版本必须相同;broker之间通过LAN连接,broker之间的消息传递使用Erlang;在CAP理论中侧重于C(一致性)P(分区容错性);连接到其中一个节点即可看到所有节点上的queue。

最后

最后关于在选择Federation和Shovel之间做出选择,推荐大家看一下stackoverflow上的这篇回答。https://stackoverflow.com/questions/19357272/when-to-use-rabbitmq-shovels-and-when-federation-plugin

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • RabbitMQ 简介 MQ 消息队列,上承生产者,下接消费者。从生产者侧获取消息,然后将消息转发给消费者。由此可...
    2205阅读 3,543评论 1 11
  • 应用场景 异步处理 场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种: 1.串行的方式 2.并行的...
    lijun_m阅读 1,851评论 0 3
  • 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时...
    预流阅读 585,412评论 51 786
  • 1.什么是消息队列 消息队列允许应用间通过消息的发送与接收的方式进行通信,当消息接收方服务忙或不可用时,其提供了一...
    zhuke阅读 4,501评论 0 12
  • 今天看微博,被一条热搜迷住了眼,它问:如果你的男友工资很低,你愿意跟他结婚吗? 百分之60的人选了不会,表示没有钱...
    南小晴的米线阅读 4,192评论 0 0