5分鐘帶你瞭解RabbitMQ的(普通/鏡像)集群

来源:https://www.cnblogs.com/guoxiaoyu/p/18240661
-Advertisement-
Play Games

通過本文我們深入瞭解了RabbitMQ的集群模式及其優缺點。無論是普通集群還是鏡像集群,都有其適用的場景和局限性。普通集群利用Erlang語言的集群能力,但消息可靠性和高可用性方面存在一定挑戰;而鏡像集群通過主動消息同步提高了消息的可靠性和高可用性,但可能會占用大量網路帶寬。因此,在選擇集群方案時,... ...


前言

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

而多節點的集群有兩種方式:普通集群和鏡像集群(也稱主從集群)。

普通集群

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

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

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

image

鏡像集群

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

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

image

優缺點

首先看下普通集群

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

再看下鏡像模式:

  • 主動消息同步:在鏡像節點之間主動進行消息同步,確保每個節點上都存有完整的消息數據。消息的可靠性大大提高,即使單個節點宕機,也不會導致消息丟失。但是集群內部的網路帶寬會被主動同步大量占用,可能導致網路擁塞,影響整個集群的性能。
  • 通過選舉機制,當主節點故障時,自動選出新的主節點,保證服務的連續性和可用性。

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

總結

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

普通集群利用Erlang語言的集群能力,但消息可靠性和高可用性方面存在一定挑戰;而鏡像集群通過主動消息同步提高了消息的可靠性和高可用性,但可能會占用大量網路帶寬。

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ‍ 寫在開頭 點贊 + 收藏 學會 在後臺系統中有一種常見的功能,點擊按鈕將整個網頁全屏,再點擊退出全屏。 瀏覽器提供了2種全屏方式,一種通過API在js中實現,另一種是按F11鍵進入全屏模式。 但F11進入的全屏模式優先順序更高,無法通過API退出。 基本知識 元素全屏 檢查可用 ...
  • 這篇文章介紹瞭如何運用Tailwind CSS框架創建響應式網頁設計,涵蓋博客、電商網站及企業官網的佈局實例,包括頭部導航、內容區域、側邊欄、頁腳及輪播圖等組件的響應式實現。同時,探討了與JavaScript框架集成、CSS預處理器配合、設計工具應用以及伺服器端渲染的策略,並提供了性能優化、代碼組織... ...
  • 我們是袋鼠雲數棧 UED 團隊,致力於打造優秀的一站式數據中台產品。我們始終保持工匠精神,探索前端道路,為社區積累並傳播經驗價值。 本文作者:修能 這是一段平平無奇的 SQL 語法 SELECT id, sum(name) FROM student GROUP BY id ORDER BY id; ...
  • ‍ 寫在開頭 點贊 + 收藏 學會 前言 在這之前公司項目的文檔預覽的方式都是通過微軟線上預覽服務,但是微軟的線上服務有文件大小限制,想完整使用得花錢,一些圖片文件就通過組件庫antd實現,因為我們項目存在多種類型的文件,所以為了改善用戶的體驗,決定把文件預覽單獨弄一個拆出一個項 ...
  • 這篇文章介紹了Tailwind CSS框架的特點與優勢,包括其作為實用性的CSS框架如何通過預設的樣式類實現快速佈局和設計,以及如何在不犧牲響應式和自適應性的同時減少開發時間。此外,還提及了框架的可定製性,允許開發者輕鬆創建符合項目需求的樣式規則,從而提高前端開發效率。 ...
  • Chrome 在 121 版本開始,原生支持了兩個滾動條樣式相關的樣式 scrollbar-color 和 scrollbar-width。 要知道,在此前,雖然有 ::-webkit-scrollbar 規範可以控制滾動條,可是,::-webkit-scrollbar 是非標準特性,在 MDN 文 ...
  • Spring Cloud是一個相對比較成熟的微服務框架。雖然,Spring Cloud於2016年才推出1.0的release版本, 時間最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分散式系統解決方案。 Spring Cloud是一系列框架的有序集合。它利用Spri ...
  • Windows應用軟體開發,會有很多常用的模塊,比如資料庫、配置文件、日誌、後臺通信、進程通信、埋點、瀏覽器等等。下麵是目前我們公司windows梳理的部分組件,梳理出來方便大家瞭解組件概念以及依賴關係: 每個應用里,現在或者以後都可能會存在這些模塊。以我團隊開發的全家桶為例,十多個應用對後臺訪問, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...