訊息佇列及釋出/訂閱模式
阿新 • • 發佈:2019-02-05
摘自:《大型網站技術架構》 李智慧
1 訊息驅動架構 訊息驅動架構(Event Driven Architecture) :通過在底耦合的模組之間傳輸事件訊息,以保持模組的鬆散耦合,並藉助事件訊息的通訊完成模組間合作,典型的EDA架構就是作業系統中常見的生產者消費者模式。 在大型網站中最常用的是分散式訊息佇列: 訊息佇列利用”釋出—訂閱者模式“工作,訊息傳送者釋出訊息,一個或者多個訊息接受者訂閱訊息。訊息傳送者是訊息源,在對訊息進行處理後將訊息傳送至分散式訊息佇列,訊息訊息接受者從分散式訊息佇列獲取該訊息後繼續進行處理。 鬆耦合:可以看到,訊息傳送者和訊息接收
如上圖所示,我們可以明確三個步湊:
①訊息生產者應用程式通過遠端訪問介面將訊息推送給訊息佇列伺服器,訊息佇列伺服器將訊息寫入本地記憶體佇列後馬上返回成功響應給訊息生產者。
②訊息佇列伺服器根據訊息訂閱列表查詢訂閱該訊息的消費者應用程式,將訊息佇列中的訊息按照先進先出的原則將訊息通過遠端通訊介面傳送給消費者應用程式;
③消費者應用程式接收到推送過來的訊息之後進行相關的一系列處理,過程終止;
伸縮性:將新伺服器加入到分散式訊息佇列叢集中,通知生產者伺服器更改訊息佇列服務列表即可。 可用性:為了避免消費者程序處理緩慢,分散式訊息伺服器記憶體空間不足的問題,如果記憶體佇列已滿,會將訊息寫入磁碟,訊息推送模組在將記憶體佇列中的訊息處理完後,將磁碟內容載入到記憶體佇列繼續處理。 為了避免訊息佇列伺服器宕機造成訊息丟失,可以將訊息成功傳送到訊息佇列的訊息儲存在訊息生產者伺服器,等訊息真正被訊息消費者伺服器處理後才刪除訊息。 訊息佇列伺服器宕機,生產者選擇分散式訊息佇列伺服器中的其他機器。 3 ”釋出/訂閱“模式 “釋出/訂閱”模式包含兩種角色,分別是釋出者和訂閱者。訂閱者可以訂閱一個或若干個頻道(channel),而釋出者可以向指定的頻道傳送訊息,所有訂閱此頻道的訂閱者都會收到此訊息。 對任務 ”釋出/訂閱“模式很容易想到可以