RabbitMQ 四種叢集架構
主從模式
又叫主備模式、Warren(兔子窩)模式
主節點提供讀寫,備用節點不提供讀寫。
如果主節點掛了,就切換到備用節點,原來的備用節點升級為主節點提供讀寫服務。
當原來的主節點恢復執行後,原來的主節點就變成備用節點
RabbitMQ也可以一主多備
一般用在在併發和資料量不高的情況下
遠端模式
遠端模式簡稱 shovel 模式,所謂的 shovel 就是把訊息進行不同資料中心的複製工作,可以跨地域的讓兩個 MQ 叢集互聯,遠距離通訊和複製。
如圖,有兩個異地的 MQ 叢集,當使用者在地區 1 這裡下單,系統發訊息到 1 區的 MQ 伺服器,發現 MQ 服務已超過設定的閾值,負載過高,這條訊息就會被轉到 地區 2 的 MQ 伺服器上,由 2 區的去執行後面的業務邏輯,相當於分攤我們的服務壓力
在使用了 shovel 外掛後,模型變成了近端同步確認,遠端非同步確認的方式,大大提高了訂單確認速度,並且還能保證可靠性。
如上圖所示,當我們的訊息到達 exchange,它會判斷當前的負載情況以及設定的閾值,如果負載不高就把訊息放到我們正常的 warehouse_goleta 佇列中,如果負載過高了,就會放到 backup_orders 佇列中。backup_orders 佇列通過 shovel 外掛與另外的 MQ 叢集進行同步資料,把訊息發到第二個 MQ 叢集上。
這是 rabbitMQ 比較早期的架構模型了,現在很少使用了。
雙活模式
也是實現異地資料複製的主流模式,因為 shovel 模式配置比較複雜,所以一般來說,實現異地叢集的都是採用這種雙活 或者 多活模型來實現的。這種模式需要依賴 rabbitMQ 的 federation 外掛,可以實現持續的,可靠的 AMQP 資料通訊,多活模式在實際配置與應用非常的簡單。 rabbitMQ 部署架構採用雙中心模式(多中心),那麼在兩套(或多套)資料中心各部署一套 rabbitMQ 叢集,各中心的rabbitMQ 服務除了需要為業務提供正常的訊息服務外,中心之間還需要實現部分佇列訊息共享。多活叢集架構如下:
federation 外掛是一個不需要構建 cluster ,而在 brokers 之間傳輸訊息的高效能外掛,federation 外掛可以在 brokers 或者 cluster 之間傳輸訊息,連線的雙方可以使用不同的 users 和 virtual hosts,雙方也可以使用不同版本的 rabbitMQ 和 erlang。federation 外掛使用 AMQP 協議通訊,可以接受不連續的傳輸。federation 不是建立在叢集上的,而是建立在單個節點上的,如圖上黃色的 rabbit node 3 可以與綠色的 node1、node2、node3 中的任意一個利用 federation 外掛進行資料同步。
映象
非常經典的 mirror 映象模式,保證 100% 資料不丟失。在實際工作中也是用得最多的,並且實現非常的簡單,一般網際網路大廠都會構建這種映象叢集模式。 mirror 映象佇列,目的是為了保證 rabbitMQ 資料的高可靠性解決方案,主要就是實現資料的同步,一般來講是 2 - 3 個節點實現資料同步。對於 100% 資料可靠性解決方案,一般是採用 3 個節點。 叢集架構如下