5分鐘帶你瞭解RabbitMQ的(普通/映象)叢集

努力的小雨發表於2024-06-14

前言

讓我們深入探討RabbitMQ的叢集配置,瞭解各種叢集模式的利弊。本次討論的重點是幫助您快速理解RabbitMQ叢集的運作方式,以及選擇最適合您需求的模式。好的,話不多說。在RabbitMQ中,即使只有一個節點,該節點的服務也會被作為一個叢集來處理。這意味著單節點系統也遵循叢集架構的規範,確保一致性和可擴充套件性。

而多節點的叢集有兩種方式:普通叢集和映象叢集(也稱主從叢集)。

普通叢集

這種模式充分利用了Erlang語言天生具備的叢集能力。在這個叢集模式中,各個節點共享相同的後設資料,例如佇列結構,但訊息不會冗餘儲存,而是隻存在於某一個節點中。當消費者需要消費訊息時,如果請求的節點並不儲存所需的資料,RabbitMQ會在節點之間臨時傳輸訊息,將資料從儲存節點傳輸到消費節點。

顯然,這種叢集模式存在一定的訊息可靠性問題。當某個節點當機時,該節點上的資料將無法被消費,必須等待節點恢復後才能繼續處理。這可能導致消費者端無法正確應答已經消費的訊息,在服務恢復後可能導致訊息被重複消費。此外,如果訊息未經持久化,重啟後訊息將會丟失。

另外,這種叢集模式不支援高可用性。當某個節點服務故障時,需要手動重啟該服務才能確保該節點上的訊息能夠正常消費。因此,這種模式只適合一些對訊息安全性要求不高的場景。在使用這種模式時,消費者應儘量連線到每一個節點,以減少訊息在叢集中的傳輸。

image

映象叢集

這種模式是RabbitMQ官方HA(高可用)方案,在普通叢集模式的基礎上進行了增強。在搭建普通叢集之後,需要進行額外的配置和部署。其本質區別在於,這種模式會在映象節點之間主動進行訊息同步,而不是在客戶端拉取訊息時臨時同步。

在這種模式下,叢集內部會透過演算法選舉產生主節點(master)和從節點(slave)。一旦主節點失效,叢集將自動選舉出新的主節點,確保整個叢集的高可用性。

image

優缺點

首先看下普通叢集

  • 共享後設資料:各節點間共享佇列結構等後設資料,但缺點也很明顯訊息僅存在於某一個節點
  • 訊息在消費時會在節點間臨時傳輸,增加了傳輸延遲和複雜性
  • 節點當機時,該節點上的訊息無法被消費,且可能導致重複消費,需要手動重啟當機節點以恢復訊息消費

再看下映象模式:

  • 主動訊息同步:在映象節點之間主動進行訊息同步,確保每個節點上都存有完整的訊息資料。訊息的可靠性大大提高,即使單個節點當機,也不會導致訊息丟失。但是叢集內部的網路頻寬會被主動同步大量佔用,可能導致網路擁塞,影響整個叢集的效能。
  • 透過選舉機制,當主節點故障時,自動選出新的主節點,保證服務的連續性和可用性。

因此,並沒有一種萬能解決方案,最終還是要根據各業務需求來確定叢集方案。例如,在金融交易系統或實時資料處理系統中,建議採用高可用的映象模式。但如果頻寬有限制且沒有實時性要求,那麼使用預設的普通叢集可能更合適。

總結

透過本文我們深入瞭解了RabbitMQ的叢集模式及其優缺點。無論是普通叢集還是映象叢集,都有其適用的場景和侷限性。

普通叢集利用Erlang語言的叢集能力,但訊息可靠性和高可用性方面存在一定挑戰;而映象叢集透過主動訊息同步提高了訊息的可靠性和高可用性,但可能會佔用大量網路頻寬。

因此,在選擇叢集方案時,需要綜合考慮業務需求、系統效能和資源限制等因素。唯有根據實際情況來靈活選擇最適合的方案,以確保系統的穩定性和可靠性。

相關文章