Broker模組劃分

weixin_34117211發表於2017-11-27

上圖是之前討論確定的系統架構(後續內容會按照這個架構來敘述),幾點基礎:

  1. Broker採用主從結構

  2. Broker負責持久化後設資料並彙報到NameServer

  3. 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的模組大致如下:



本文轉自 sshpp 51CTO部落格,原文連結:http://blog.51cto.com/12902932/1949350,如需轉載請自行聯絡原作者

相關文章