RabbitMQ集群模式之Warren模式與Shovel模式介紹
1. 前言
Hello,大家好。從本小節(jié)開始呢,會(huì)陸續(xù)為各位同學(xué)介紹 RabbitMQ 中所提供的集群模式,以及一些必要的實(shí)操內(nèi)容。這些集群模式并不是第三方所提供的,而是 RabbitMQ 本身自帶的。RabbitMQ 官方充分考慮到了 RabbitMQ 在實(shí)際項(xiàng)目中的應(yīng)用場(chǎng)景,包括基礎(chǔ)場(chǎng)景和集群場(chǎng)景。
本小節(jié)會(huì)介紹 RabbitMQ 中最基礎(chǔ)的兩個(gè)集群模式,分別是 Warren 集群模式和 Shovel 集群模式,本小節(jié)不會(huì)對(duì)這兩種集群模式進(jìn)行代碼實(shí)操,只是基礎(chǔ)概念的介紹和基礎(chǔ)使用流程的介紹。
本節(jié)主要內(nèi)容:
-
Warren 集群模式與 Shovel 集群模式概述
-
Warren 集群模式與 Shovel 集群模式使用流程概述
2. Warren 集群模式與 Shovel 集群模式概述
Warren 集群模式:
Warren 集群模式,其中文含義為主備集群模式。那么什么是主備呢?
我們先來看一下主備的基礎(chǔ)概念,主備這一名詞的誕生并不是在我們所熟知的計(jì)算機(jī)領(lǐng)域,而是首先出現(xiàn)在我們的日常生活中,對(duì)一個(gè)具體問題提供了一個(gè)或多個(gè)解決方案。
對(duì)于要解決的一個(gè)具體問題而言,主備名詞中的主,表示解決這一問題的首選方案,也可以理解為主要方案,即我要解決這個(gè)問題,我應(yīng)該首先就使用這一首選方案;而主備名詞中的備,則表示解決這一問題的備選方案,也可以理解為輔助方案,即當(dāng)這一問題無法使用首選方案來解決時(shí)所采取的一種或多種輔助方案。
隨著我們計(jì)算機(jī)領(lǐng)域不斷地發(fā)展,以及逐漸增長的項(xiàng)目復(fù)雜度,主備這一名詞逐漸滲透到我們的計(jì)算機(jī)領(lǐng)域中。在計(jì)算機(jī)領(lǐng)域中,主備往往表示的僅是集群的一種實(shí)現(xiàn)方式,或者架構(gòu)模式,并不是 RabbitMQ 所特有的專業(yè)名詞, 那么主備模式在 RabbitMQ 中到底是什么含義呢?
主備模式,在 RabbitMQ 中被稱為 Warren 模式,即當(dāng)我們需要部署 RabbitMQ 集群時(shí),我們需要指定一個(gè)主 RabbitMQ Server 節(jié)點(diǎn),然后指定兩個(gè)或兩個(gè)以上的從 RabbitMQ Server 節(jié)點(diǎn),并且在主節(jié)點(diǎn)和從節(jié)點(diǎn)之間,通過一定的技術(shù)手段來實(shí)現(xiàn)主從節(jié)點(diǎn)間的通信,這一過程就是 RabbitMQ 中的 Warren 主備模式,其主備模式架構(gòu)如下圖所示:

從上圖中我們可以看到,當(dāng)消費(fèi)者來消費(fèi) RabbitMQ 中的消息時(shí),由于我們?cè)O(shè)置了主備集群模式,所以消費(fèi)者會(huì)首先從主節(jié)點(diǎn)中獲取消息并消費(fèi),如果主節(jié)點(diǎn)由于其他原因而掛掉了,或者主節(jié)點(diǎn)的服務(wù)器本身宕機(jī)了,那么消費(fèi)者會(huì)繼續(xù)從 RabbitMQ 從節(jié)點(diǎn)-1,RabbitMQ 從節(jié)點(diǎn)-2 去獲取消息并消費(fèi),以此類推。
這就實(shí)現(xiàn)了一種,當(dāng)主節(jié)點(diǎn)由于種種原因不能正常提供服務(wù)時(shí),從節(jié)點(diǎn)還能繼續(xù)提供服務(wù)的場(chǎng)景。
Tips:
1. 主備模式中所有的 RabbitMQ Server 節(jié)點(diǎn)均分布在不同的服務(wù)器上,但是所有節(jié)點(diǎn)間的數(shù)據(jù)存儲(chǔ)卻是共享的,這也就是為什么從節(jié)點(diǎn)還能繼續(xù)提供服務(wù)的原因;
2. 主備模式是 RabbitMQ 官方提供的最基礎(chǔ)的一種集群模式,但是確不是實(shí)際項(xiàng)目中經(jīng)常使用的一種集群模式,同學(xué)們只需要對(duì)主備模式的概念有一個(gè)了解即可。
Shovel 集群模式:
Shovel 模式,其中文含義為遠(yuǎn)程模式,是 RabbitMQ 官方提供的第二種集群實(shí)現(xiàn)模式。
Shovel 遠(yuǎn)程模式的概念類似于上述的 Warren 主備模式,只不過他們的集群策略是不同的。Shovel 遠(yuǎn)程模式的實(shí)現(xiàn),也是需要部署多個(gè) RabbitMQ Server 節(jié)點(diǎn),并且在不同的 RabbitMQ Server 節(jié)點(diǎn)中建立節(jié)點(diǎn)間的通信機(jī)制,以達(dá)到使用多個(gè) RabbitMQ Server 節(jié)點(diǎn)的目的。
而無論是 Shovel 遠(yuǎn)程模式,還是 Warren 主備模式,都需要消費(fèi)者通過遠(yuǎn)程的方式來調(diào)用相應(yīng)的節(jié)點(diǎn),來獲取并消費(fèi)消息,只不過 Shovel 模式在遠(yuǎn)程調(diào)用時(shí)多添加了一種集群策略。
Shovel 遠(yuǎn)程模式節(jié)點(diǎn)的部署不同于 Warren 主備模式,在部署 Shovel 遠(yuǎn)程模式時(shí),通常需要我們根據(jù)地域環(huán)境來抉擇所需要部署的節(jié)點(diǎn)所在位置,并考慮多個(gè)遠(yuǎn)程模式節(jié)點(diǎn)之間的通信成本,成本越小當(dāng)然也就是最好的了,而 Warren 主備模式則不需要考慮地域這一因素,Shovel 遠(yuǎn)程模式的架構(gòu)如下圖所示:

從上圖中我們可以看到,我們根據(jù)不同的地里位置,分別聲明了三個(gè)節(jié)點(diǎn),分別是北京節(jié)點(diǎn)、唐山節(jié)點(diǎn),以及保定節(jié)點(diǎn),這三個(gè)區(qū)域的地里位置挨得很近,很適合部署 Shovel 遠(yuǎn)程集群模式。
在我們的生產(chǎn)者將消息推送到 RabbitMQ Server 節(jié)點(diǎn),也就是上圖中的北京節(jié)點(diǎn)時(shí),如果位于北京節(jié)點(diǎn)的 RabbitMQ Server 服務(wù)器的壓力正常,則消息會(huì)被推送到 RabbitMQ 北京節(jié)點(diǎn);如果 RabbitMQ 北京節(jié)點(diǎn)的服務(wù)器壓力過大,或該節(jié)點(diǎn)中的 RabbitMQ 消息隊(duì)列已滿,則消息會(huì)被推送到與之相連的唐山節(jié)點(diǎn),以此類推,直到保定節(jié)點(diǎn)。
在 RabbitMQ 中,上圖中的 RabbitMQ 北京節(jié)點(diǎn)被稱為遠(yuǎn)程主節(jié)點(diǎn),而 RabbitMQ 唐山節(jié)點(diǎn)和 RabbitMQ 保定節(jié)點(diǎn)則被稱為遠(yuǎn)程備用節(jié)點(diǎn),這一點(diǎn)和主備模式的概念相似。
Tips:
1. 遠(yuǎn)程模式雖然提供了對(duì)不同節(jié)點(diǎn)的 RabbitMQ Server 壓力檢測(cè)的功能,但是其配置起來過于繁瑣,所以在實(shí)際工作中使用的也不是很多;
2. 配置 Shovel 模式一定要考慮節(jié)點(diǎn)間不同的位置,如果節(jié)點(diǎn)之間的距離太遠(yuǎn),則會(huì)造成節(jié)點(diǎn)間通信的延遲,這點(diǎn)同學(xué)們注意。
3. Warren 集群模式與 Shovel 集群模式使用流程概述
Warren 集群模式使用流程概述
要想搭建 Warren 集群模式,需要我們首先了解一些 Warren 集群模式的配置文件,并且通過使用一個(gè)組件 HaProxy 來完成 Warren 集群模式的搭建(HaProxy 組件會(huì)在后面進(jìn)行介紹)。
Shovel 集群模式使用流程概述
RabbitMQ 官方針對(duì) Shovel 集群模式,為我們提供了豐富的集群配置屬性和集群配置文件,我們需要自定義我們自己的 Shovel 集群配置文件,并且將這一文件部署到 RabbitMQ 節(jié)點(diǎn)上,這樣才能使用 Shovel 集群模式。
Tips: 本小節(jié)只是對(duì) RabbitMQ 中的 Warren 集群模式和 Shovel 集群模式的使用流程或搭建方式做一個(gè)簡單的介紹,并不會(huì)詳細(xì)介紹集群模式搭建的流程和步驟,我們會(huì)在后續(xù)小節(jié)中專門介紹不同集群模式的詳細(xì)搭建流程和步驟,讓我們一起期待吧。
4. 小結(jié)

本小節(jié)作為介紹 RabbitMQ 集群模式的開篇,首先介紹了 RabbitMQ 中最簡單的兩種集群模式,分別是 Warren 主備模式和 Shovel 遠(yuǎn)程模式,對(duì)于這兩種集群模式的概念,我們通過集群架構(gòu)圖的方式進(jìn)行了詳細(xì)介紹,并簡要介紹了這兩種集群模式的使用流程。