全部开发者教程

RabbitMQ 入门教程

RabbitMQ 简介
RabbitMQ 简介
首页 慕课教程 RabbitMQ 入门教程 RabbitMQ 入门教程 Mirror模式与Federation模式介绍

RabbitMQ集群模式之Mirror模式与Federation模式介绍

1. 前言

Hello,大家好。本小节会为大家介绍 RabbitMQ 中的最后两种集群模式,分别是 Mirror 模式和 Federation 模式。

本小节会对 RabbitMQ 中的 Mirror 集群模式和 Federation 集群模式的基础概念做详细的介绍,并且会对这两种模式的基本使用流程做一个简要的概述,本小节不会对这两种集群模式进行代码层面的实操讲解,同学们注意。

本节主要内容:

  • Mirror 集群模式与 Federation 集群模式概述

  • Mirror 集群模式与 Federation 集群模式使用流程概述

2. Mirror 集群模式与 Federation 集群模式概述

Mirror 集群模式:

Mirror 集群模式,其中文含义为镜像集群模式。主要就是通过镜像的概念来实现集群的搭建。

镜像这一概念,相信大家都不陌生,所以在本节中不做介绍,我们直接来看什么是 RabbitMQ 的镜像集群模式。

镜像集群模式的核心就是其中的 Mirror 镜像队列, Mirror 镜像队列和其他普通的消息队列一样,只不过在不同的场景中所叫的名称不同罢了。每一个镜像队列中存储消息的方式也和普通队列相同,都需要生产者将消息推送到队列中,从而供消费者获取并消费消息。

正式由于 Mirror 镜像队列的存在,才使得在 RabbitMQ 集群环境下,数据可以达到 100% 的投递可靠性,因此,Mirror 镜像集群模式也成为了 RabbitMQ 众多集群模式中的经典集群模式,在互联网大厂,以及其他一线互联网公司中,Mirror 镜像集群模式一直都被推崇,成为了搭建 RabbitMQ 集群的首选方案。 Mirror 镜像集群模式的架构如下图所示:

从上图中我们可以看到,我们的应用程序或者是消息的生产者,需要请求我们的 RabbitMQ Server 时,请求首先会被发送到一个虚拟主机上,这个虚拟主机是实现 Mirror 镜像集群模式所必须的组件或者说是工具,该虚拟主机可以通过当下主流的 KeepAlived ,以及 HaProxy 组件来实现。

在通过 KeepAlived 和 HaProxy 组件配置好我们所需的虚拟主机,即 Virtual Host 之后,虚拟主机会根据我们的请求所在的 ip 地址,来将请求分发到不同的 RabbitMQ Server 中,接着,RabbitMQ Server 就会根据我们请求的具体内容,来使用其中相应的镜像队列,最后,消费者再从这些镜像队列中获取并消费消息。

Tips:
1. 可以看到,在上述的架构图中,我们的 RabbitMQ Server 有 3 个节点,这个节点的数量不是随便凭空指定的,如果我们想确保消息在镜像模式的集群中需要做到 100% 投递,那么我们镜像模式中的 RabbitMQ Server 节点的数量最少应该部署 3 个;
2. KeepAlived 和 HaProxy 组件我们会在后续的小节中进行详细的介绍,本小节同学们只需要知道我们会用到这些工具组件即可。

Federation 集群模式:

Federation 模式,在 RabbitMQ 中,被称为多活的集群模式。Federation 这一单词本身的意思是表示一种联盟、结盟的含义,本义其实并没有多活的意思,多活则是根据这一集群模式的特点转义而来的。

为什么称 Federation 模式为多活的集群模式呢?其实,我们可以将 Federation 模式理解为是上一小节中 Shovel 远程模式的进化版本。

通过学习上一小节内容,我们可以知道,Shovel 远程模式其实就是将 RabbitMQ Server 根据不同的地域,部署到了不同的地域位置,从而实现对 RabbitMQ Server 的远程调用,但是,这种远程调用方式配置起来过于繁琐,会花费很长的时间,这有点得不偿失。

所以,RabbitMQ 官方考虑到了这一弊端,才会有今天的 Federation 多活集群模式,我们先来看一下这个 Federation 多活集群模式的架构图:

从上图中我们可以看到,我们根据不同的地里位置,分别声明了三个节点区域,并且在不同的区域节点中,我们分别部署了两台 RabbitMQ Server 节点,在不同的地域节点之间,我们通过 Federation 插件进行连接,实现不同地域节点间的通信。

当我们的应用程序,或者生产者需要使用我们的 RabbitMQ Server 时,就会向我们的 RabbitMQ Server 发送请求,由图可知,该请求会被我们所配置的负载均衡策略所截获,同时,负载均衡策略会根据请求的内容,来将请求分发到相应的地域节点中的 RabbitMQ Server 中。

Federation 多活集群模式与 Shovel 远程调用集群模式最大的不同之处在于,Shovel 远程调用集群模式需要指定主区域,即可以理解为主节点,但是 Federation 多活集群模式不需要指定,它的每一个节点都相当于是主节点,每一个节点都是活跃的, 请求只会根据不同的负载均衡策略来分发到不同的地域节点上而已。

正式由于 Federation 多活集群模式的这一特点,才广泛被人们称之为是多活的集群模式。

Tips:
1. Federation 多活集群模式需要我们首先对 Federation 插件有所了解,因为在不同的地域节点之间,我们需要使用 Federation 插件进行连接和通信,这个插件我们会在后续的实操小节进行介绍;
2. Federation 多活集群模式支持我们配置较远距离的 RabbitMQ Server 节点,这对我们的业务拓展来说提供了一定的便利性,如果我们的业务是在较远的异地,则可以考虑使用该集群模式来搭建我们的 RabbitMQ Server 集群。

3. Mirror 集群模式与 Federation 集群模式使用流程概述

Mirror 集群模式使用流程概述

要想搭建 Mirror 集群模式,需要我们首先了解两个工具组件,他们分别是 KeepAlived 和 HaProxy 组件,这两个组件分别发挥着不同的作用,在搭建 Mirror 集群模式时,我们首先要将 KeepAlived 和 HaProxy 组件搭建好,形成一组虚拟的网络,之后才可以将我们的 RabbitMQ Server 节点与之相连接,才可完成 Mirror 集群的搭建。

Federation 集群模式使用流程概述

由于 Federation 集群模式是一种多活的集群模式,所以我们也需要用到我们的 KeepAlived 和 HaProxy 组件,只不过这次所使用的组件搭建方式,与 Mirror 镜像模式的搭建有所不同,所发挥的作用也不相同,但是都需要先将这两个组件搭建好后,方可接入我们的 RabbitMQ Server 节点。

Tips: 本小节只是对 RabbitMQ 中的 Mirror 集群模式和 Federation 集群模式的使用流程或搭建方式做一个简单的介绍,并不会详细介绍集群模式搭建的流程和步骤,我们会在后续小节中专门介绍不同集群模式的详细搭建流程和步骤,以及 KeepAlived 和 HaProxy 组件的使用方法,让我们一起期待吧。

4. 小结

本小节介绍了 RabbitMQ 中最后两种集群模式,即 Mirror 镜像集群模式,以及 Federation 多活集群模式,对于这两种集群模式的概念和地位,我们通过集群架构图的方式进行了详细介绍,并简要介绍了这两种集群模式的使用流程。