Broker模組劃分
上圖是之前討論確定的系統架構(後續內容會按照這個架構來敘述),幾點基礎:
-
Broker採用主從結構
-
Broker負責持久化後設資料並彙報到NameServer
-
Client從NameServer獲取後設資料,然後從Broker讀取訊息
Broker的模組劃分
1 網路模組
Broker需要和NameServer及Client通訊,包括Broker之間也需要通訊(主從結構),所以Broker會有一個模組(Net&PacketHandler)用於所有網路包的處理。
2 後設資料相關
我們會將NameServer儘量做的簡單,所以NameServer不會持久化任何資料。最終NameServer是無狀態的,所有資料來源於Broker上報,所以後設資料會持久化在Broker上。除了持久化Topic、Group這樣的後設資料,Broker還需要儲存消費進度。
另外,為了保證分割槽內資料的順序性,需要確保一個分割槽在一個時刻只會有一個執行緒來消費,所以Broker端需要提供介面對分割槽執行加鎖操作。我們採用租約的方式來實現:Client需要對獲取到分割槽的租約才能對分割槽進行消費。所以Broker會包含一個租約模組(Leaser)。
所以Broker後設資料模組會包含以下幾塊:
-
TopicManager
-
GroupManager
-
CursorManager
-
Leaser
4 訊息寫入模組
訊息從Client傳送到Broker,Broker接收到訊息後會增強訊息屬性,比如給訊息新增索引位置、儲存位置、儲存時間等屬性,然後進行持久化。所以Broker端會有一個模組處理寫入請求(Writer)。
5 訊息讀取模組
Broker需要將持久化的訊息讀取出來返回給客戶端,且持久化WAL是多個Topic共享的,所以需要一個獨立的讀取模組(Reader)的從WAL的不同位置讀取資料拼裝成最終的結果返回給客戶端。
6 儲存模組
最終所有訊息是要落盤的,所以Broker肯定包含了一個儲存模組。儲存模組使用WAL的方式實現,分為兩塊:儲存佇列和索引佇列,訊息會被寫入到儲存佇列,然後構建索引,這塊內容會在之後的Broker實現部分詳細介紹。
(儲存模組應該是整個訊息中介軟體中最複雜的模組,本篇沒有展現介紹,會在介紹系統具體實現時詳細的描述整個儲存層的實現)
除了以上這些模組外,Broker採用主從架構,必然會有負責主從複製的模組,還包括後設資料的備份策略(後設資料也是需要有多個備份的)。除此之外可能還有監控統計模組,用於監測系統狀態,但這不在我們討論的範圍。
總結以上內容,Broker的模組大致如下:
相關文章
- 使用 Router 思想劃分模組
- maven最佳實踐:劃分模組Maven
- 開發ejb如何劃分模組,使模組粒度合理
- R/3 基本模組的劃分: (轉)
- 系統模組劃分設計的思考
- 將maven專案劃分為多個模組Maven
- 多後端系統的模組劃分方案後端
- 軟體根據什麼原則、原理劃分模組
- iOS應用模組化的思考及落地方案(一)模組的劃分及模組化工作流程iOS
- React乾貨:SPA單頁如何規劃路由、設計Store、劃分模組、按需載入React路由
- DataGuard broker之一:DataGuard broker簡介
- WAF的幾種劃分方法和劃分型別型別
- 06 ## 模組分類
- 資料劃分
- 元件的劃分元件
- 行業劃分行業
- zone的劃分
- 子網劃分
- RocketMQ——Broker篇MQ
- 是按技術職責還是按領域職責劃分模組包? - Reddit
- 動態規劃之數的劃分動態規劃
- 如何劃分微服務微服務
- 陣列元素劃分陣列
- JVM區域劃分JVM
- 集合劃分 題解
- 01 分數規劃
- 01分數規劃
- Data Guard Broker系列之二:Data Guard Broker配置實戰
- 等長子網劃分、變長子網劃分(網路整理)
- oracle dataguard broker 配置Oracle
- 【分模組練習】二分查詢
- IP地址分類與子網劃分
- 整數劃分問題(動態規劃)動態規劃
- 【Python】jieba分詞模組PythonJieba分詞
- Hyperion模組分類說明
- JSF 中如何分模組??JS
- 微服務劃分原則微服務
- html,css,javascript角色劃分HTMLCSSJavaScript