訊息佇列設計

2022-05-20 15:27:23 字數 669 閱讀 8169

@吹風叔叔

我們之所以要設計乙個訊息佇列,並且配備broker,無外乎要做兩件事情:

訊息的轉儲,在更合適的時間點投遞,或者通過一系列手段輔助訊息最終能送達消費機。

規範一種正規化和通用的模式,以滿足解耦、最終一致性、錯峰等需求。

掰開了揉碎了看,最簡單的訊息佇列可以做成乙個訊息**器,把一次rpc做成兩次rpc。傳送者把訊息投遞到服務端(以下簡稱broker),服務端再將訊息**一手到接收端,就是這麼簡單。

一般來講,設計訊息佇列的整體思路是先build乙個整體的資料流,例如producer傳送給broker,broker傳送給consumer,consumer回覆消費確認,broker刪除/備份訊息等。

利用rpc將資料流串起來。然後考慮rpc的高可用性,盡量做到無狀態,方便水平擴充套件。

之後考慮如何承載訊息堆積,然後在合適的時機投遞訊息,而處理堆積的最佳方式,就是儲存,儲存的選型需要綜合考慮效能/可靠性和開發維護成本等諸多因素。

為了實現廣播功能,我們必須要維護消費關係,可以利用zk/config server等儲存消費關係。

在完成了上述幾個功能後,訊息佇列基本就實現了。然後我們可以考慮一些高階特性,如可靠投遞,事務特性,效能優化等。

下面我們會以設計訊息佇列時重點考慮的模組為主線,穿插灌輸一些訊息佇列的特性實現方法,來具體分析設計實現乙個訊息佇列時的方方面面。

訊息佇列 訊息佇列

輪詢排程 一次性分發所有訊息,保證訊息平均分配,不管消費者是否能正常消費 訊息應答 保證消費端能確實消費,不丟失 公平 乙個乙個分發所有訊息,在保證分發到的執行緒確認回覆後,才分發下個訊息給下個空閒的消費者,訊息持久化 保證佇列中的訊息不丟失,包括3要素 交換器 訊息佇列 訊息都必須宣告持久化 發布...

訊息佇列 訊息佇列 kafka

kafka是乙個分布式的基於發布 訂閱模式的訊息佇列,主要用於大資料實時處理領域。要理解kafka首先要有分布式的概念,要有訊息佇列的概念。分布式系統最大的優勢就是解耦和削峰,這種情況下,a系統生成了乙個訊息,b系統非同步獲取,那麼就需要乙個存放訊息的訊息佇列 mq 相比較傳統的訊息佇列,訊息被消費...

雙快取訊息佇列設計綜述

僅從雙快取訊息佇列的技術角度去分析。使用雙快取方法去實現非同步日誌是否是比較有效方式,待討論。雙緩衝訊息佇列 減少鎖競爭 在網路應用伺服器端,為了效能和防止阻塞,經常會把邏輯處理和i o處理分離 i o網路執行緒處理i o事件 資料報的接收和傳送,連線的建立和維護等.邏輯執行緒要對收到的資料報進行邏...