Message Queue

訊息的溝通 - Message Queue

賴羿閎 Ian Lai 2021/11/17 16:33:32
61

大型網頁應用程式系統中,一般不會單獨一隻程式存在,而是會有多隻程式同時負責各種不同的任務,以及雲端服務盛行的微服務架構下,難免會有服務間互相傳遞資料進行溝通,而這類的需求,都統稱為 Applcation 的整合。

 

什麼是 Message Queue

本章要介紹的訊息佇列(Message Queue 簡稱:MQ)是一種非同步服務對服務通訊形式,本質是一個佇列,FIFO先入先出,只不過存放的內容是message。不同系統傳遞訊息時,兩個系統會因為耦合程度過高,改動一個系統,引發必須修改另一個系統,為了隔離這兩個系統,在兩個系統間抽離出一層(一個模組),所有兩系統之間的溝通,都必須通過 Message Queue 來傳遞。

 

基本上 Message Queue 的架構由 Producers, Queue, Consumers 所組成。

Message Queue Example

Producers (訊息提供者):

負責建立訊息並傳遞至Message Queue。

Queue (佇列):

接收傳遞訊息的任務並依序排好,之後依照任務順序取出並處理。

Message (傳遞內容):

Message 其實就是系統之間傳遞的資料,例如通知一個服務執行某項任務的訊息,像是訊息中心系統,傳遞要通知的訊息及相關人員到服務中,告知服務執行Email等相關通知功能。

Consumers (訊息接收者)

負責從queue中取出訊息並執行對應的服務內容。存放在queue中的message會在被接收後移除。

 

Message Queue 優勢

1. 更好的效能

非同步的優勢下,提供更好的效能,Consumers 有空才會處理 message,比起持續的 polling 的方式相對有效率。

2. 程式解偶

訊息的發送方和接受方都不需要知道彼此,在交互的過程中,插入了一個隱含的,並基於數據的接口層,兩邊的處理過程只需要實現這一接口,Producers 和 Consumers 可隨意使用不同語言開發,且獨立的擴展及自由的處理過程,只需要遵守相同的接口約束。

3. 可靠性

Consumer 暫時無法提供服務時,Message queue 可以暫存資料,等待 Consumers 重新上線後再接收訊息。

4. 訊息快取

訊息的快取機制,在某些情況下,處理數據可能會發生錯誤造成失敗等,除非數據已被持久化,否則可能會造成數據的遺失。Message Queue 把數據持久化直到他們被完全處理,以規避數據丟失的風險。

5. 擴展的靈活性

當處理的訊息太多,生產的速度快於消耗的速度,此時 Producers , Queue, Consumers 可以依照需求擴張或縮減。

 

Message Streaming 與 Web APIs 選擇

基於 REST 的 Web API

基於 REST 的 Web API 在用戶端(Frontend)和 API 服務(Backend)之間的溝通,我們使用 HTTP 作為我們的協議。 我們的設計很大的程度上依賴於 HTTP,從方法(例如 GET、POST、PUT、PATCH、DELETE)到幫助我們在客戶端和服務器之間進行通信的標頭(例如授權、接受、內容類型)。

 

特徵:

● Request / Response 對應 - Consumers 向 API 服務端發起請求,服務端返回響應結果。

● 基於 Pull-based - Consumers 需要資料或功能時,需主動向 API 服務端發起請求。

● 同步 - Consumers 在發送請求後接收響應。

 

訊息流 (Message Streaming)

與 REST API 不同的是,訊息流更擅長在新訊息到達時提供通知。客戶端訂閱後,會在有新訊息時,收到通知。

 

特徵:

● Publish / Subscribe 對應 - Producers 發送訊息,可能有0個或多個訂閱者可接收訊息,而不是 Request/Response 單一對應模式。

● Subscriber 通知 - Consumers 如有訂閱,將會在有新訊息時,接收到通知。

● 異步 - 與 REST API 不同的是,傳遞訊息後,無法立即得到回應

 

同樣都是透過 network,processes之間的通訊,他們之間最大的不同就是一個是 asynchronous message passing,而 HTTP request是synchronous(同步)的,也就是client發出了request,會等待在那邊,期待著response回來。

 

參考來源:

https://medium.com/starbugs/%E8%AE%93%E4%BB%BB%E5%8B%99%E6%8E%92%E9%9A%8A%E5%90%A7-message-queue-1-de949e274c43

https://medium.com/capital-one-tech/choosing-between-rest-web-apis-and-message-streaming-8e2f4813a058

賴羿閎 Ian Lai