開源MQTT中間件 - BifroMQ 技術架構概覽

在當今的物聯網領域,MQTT協議已經成爲不可或缺的關鍵要素,爲高效、實時的數據傳遞提供了核心技術支持。然而,目前市場上提供MQTT能力的項目主要集中在傳統的、現有的"開箱即用"物聯網設備管理平臺上,導致更底層的MQTT協議實現缺乏足夠的關注和探索。然而,我們深信MQTT協議的特性有着更廣泛的應用前景,不僅僅侷限於物聯網領域。正是出於這一信念,經過多年的實踐和技術積累我們推出了開源項目BifroMQ,專注於MQTT協議的高效處理,尤其是在面對大規模負載時的卓越表現。

1 中立性和可擴展性兼具的MQTT協議中間件

相較於傳統的物聯網設備管理平臺,BifroMQ在設計上秉承與衆不同的理念。我們大膽地拋棄了"一攬子解決方案"的傳統範式,將注意力集中在高性能MQTT協議的需求上。我們堅信MQTT的協議特性具有更廣泛的應用範式,因此BifroMQ致力於充分發揮MQT

T協議的潛力,尤其是在處理大規模負載時的卓越性能。

相較於在MQTT實現中內置與下游系統的集成邏輯(如:Kafka),BifroMQ更傾向於通過符合MQTT標準的方式與下游系統"對接"。例如,通過共享訂閱(Shared Subscription)機制,將集成邏輯外置,實現更加解耦的橋接和向異構系統轉發消息的能力,同時保持高消息吞吐率。這種設計理念使得BifroMQ成爲一個高度可定製的中間件,能夠輕鬆適應各類下游系統,滿足不同業務場景的需求。

2 構建大規模多租戶的Serverless雲服務

BifroMQ的使命在於構建適用於大規模多租戶的MQTT消息系統,以支持開展Serverless類型雲服務的業務特性。這一使命是基於對MQTT協議特性的深刻理解和對其更廣泛應用的信心所驅動的。與傳統的企業級架構不同,Serverless雲服務強調資源按需分配、彈性擴展及高度靈活的服務構建。正因如此,BifroMQ通過其多租戶架構和資源共享機制,爲Serverless類型的業務提供了"共享資源、獨享體驗"的特性。

企業級部署:靈活性與穩健性兼備

雖然BifroMQ的目標是構建多租戶的Serverless雲服務,但多租戶+共享資源本質上是單租戶獨享資源的抽象。與我們的理念一致,通過核心組件的自由組合和配置,BifroMQ輕鬆支持常見的"Shared Nothing"企業級集羣部署。實際上,這也是BifroMQ開源版本的默認部署模式。這種靈活性使得BifroMQ能夠適應各種規模

和需求的系統架構。

4 BifroMQ的架構解析

BifroMQ的架構

設計基於"第一性原理",從技術角度分析實現設計目標所需的技術以及如何將這些技術"有機"地組合起來,以

達到整體優化的效果。因此,僅從項目結構和代碼邏輯很難全面地理解其內涵。下面將從三個主要角度對BifroMQ的整體架構進行高層次的描述。

4.1 基於去中心化集羣管理的模塊化架構

首先,拋開MQTT協議本身的實現邏輯,BifroMQ的各個功能服務模塊構建在一套去中心化的底層集羣構建能力(base-cluster)之上,如下圖所示:

BifroMQ 去中心化集羣的模塊化架構

base-cluster構建的集羣邏輯上分爲兩層:Underlay Cluster和Overlay Cluster。Underlay Cluster被稱爲"Host" Cluster,每個Host在BifroMQ中對應着運行在操作系統上的一個服務進程(Process)。Host Cluster採用Gossip類的協議(SWIM Protocol)實現了Host成員服務(Membership),併爲Overlay Cluster提供了Host地址的抽象。Overlay Cluster被稱爲"Agent" Cluster,它在Host地址的基礎上提供了Agent級別的地址抽象(Agent Address)。在BifroMQ中,Agent對應着實現具體功能的邏輯服務(Service)。這些邏輯服務(通過base-rpc框架統一實現)包括了客戶端和服務端兩種角色的模塊,利用Agent Cluster的能力來實現服務的註冊和發現。

這種架構帶來的好處包括:

  • 邏輯服務與服務所在進程解耦,使得根據部署場景可以更加靈活地封裝和組合。

  • 邏輯服務的"服務發現"不依賴傳統意義上的註冊中心或名字服務,從而消除了單點故障的運維風險,使得集羣規模能夠自由伸縮。

4.2 模塊化的負載隔離與協作

接下來,我們從協議實現的角度描述BifroMQ的結構。在從構建Serverless雲服務的角度出發進行架構設計時,需要從負載隔離和管理的角度考慮功能實現的合理性,也就是負載的多租戶化。我們將MQTT協議的工作負載進行了拆分,使得每種負載都能以獨立子集羣的形式存在,而這些子集羣通過協作構建了完整的MQTT能力。下面是BifroMQ中MQTT負載相關的模塊:


  • bifromq-mqtt:負責處理MQTT協議的長連接負載

  • bifromq-dist:負責維護MQTT訂閱狀態的高可靠存取和大規模消息路由

  • bifromq-inbox:負責CleanSession=false模式下訂閱方會話消息的高可靠存取

  • bifromq-retain:負責Retain消息的高可靠存取

這些模塊之間的協作關係如下圖所示:

BifroMQ 各模塊協作關係1

BifroMQ 各模塊協作關係2

值得一提的是,bifromq-dist、bifromq-inbox和bifromq-retain模塊都充分利用了base-kv的能力,實現了對關鍵負載的分佈式強一致性持久化。在Serverless雲服務的運維場景中,這點對保證SLA尤爲重要。

4.3 中立性:面向標準與可擴展的集成

前文提到,BifroMQ的定位是實現MQTT標準的中間件,更加強調中立性和被集成性。與其他包含MQTT能力的"一攬子物聯網平臺"項目並不處於同一層上。因此,判斷"BifroMQ是否具備某種功能或未來是否會支持某種功能?"的標準非常簡單:凡是MQTT協議定義的能力都屬於bifromq項目需要支持的範疇,而一切超出MQTT協議定義的功能,我們更傾向於以獨立組件或服務的方式存在,並通過符合MQTT標準的方式與BifroMQ集成。這種方法有助於構建更大規模的雲服務並促進相關技術的成熟。當然,BifroMQ的被集成性還體現在作爲中間件本身與各種業務系統的集成上,主要包括三種機制:Plugin、API和Metrics:

典型場景集成架構

  • Plugin機制是實現業務邏輯集成的主要方式。bifromq目前定義了以下plugin接口模塊:

    bifromq-plugin-auth-provider:實現客戶端認證和基於消息主題的Pub/Sub鑑權邏輯

        bifromq-plugin-event-collector:實現由各類MQTT相關事件觸發的業務邏輯

         bifromq-plugin-setting-provider:實現租戶級運行時設置變更管理邏輯

  • 這些接口的參考實現可以在BifroMQ-Inside項目中找到。

  • API機制(即將推出)提供了BifroMQ的運行時HTTP管理接口,實現服務端訂閱管理和斷開連接等基本管理操作。

  • Metrics機制通過使用micrometer庫實現了指標的定義和採樣,但沒有限定收集端的類型,從而使業務集成方能夠自定義(可以參考項目中的build-plugin-demo模塊)。

5 總結

綜上是對BifroMQ技術架構的整體介紹。請期待我們將在接下來發布的一系列專題文章中,深入探討BifroMQ的各個組件和設計原則。同時,歡迎您掃碼加入BifroMQ開發者交流羣,向我們反饋關於文章內容的意見和建議。如有BifroMQ合作需求,請掃下方二維碼填寫需求問卷,我們會盡快與您聯繫。

最後,爲了幫助大家更好地瞭解BifroMQ的技術架構,我們將於9月21日舉辦一場BifroMQ線上直播公開課,歡迎各位關注上述BifroMQ開發者交流羣內信息,提前鎖定直播地址,與廣大同行交流學習!

本文分享自微信公衆號 - 百度開發者中心(baidudev)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章