MQ(1) 訊息佇列概念和使用場景

2021-08-20 22:29:46 字數 3666 閱讀 1611

宣告:本文**:mq入門總結(一)訊息佇列概念和使用場景

寫的很好,都不用自己在整理了,非常感謝該作者的用心。

訊息即是資訊的載體。為了讓訊息傳送者和訊息接收者都能夠明白訊息所承載的資訊(訊息傳送者需要知道如何構造訊息;訊息接收者需要知道如何解析訊息),它們就需要按照一種統一的格式描述訊息,這種統一的格式稱之為訊息協議(jms)。所以,有效的訊息一定具有某一種格式;而沒有格式的訊息是沒有意義的。

而訊息從傳送者到接收者的方式也有兩種。一種我們可以稱為即時訊息通訊,也就是說訊息從一端發出後(訊息傳送者)立即就可以達到另一端(訊息接收者),這種方式的具體實現就是rpc(當然單純的http通訊也滿足這個定義);另一種方式稱為延遲訊息通訊,即訊息從某一端發出後,首先進入乙個容器進行臨時儲存,當達到某種條件後,再由這個容器傳送給另一端。 這個容器的一種具體實現就是訊息佇列

以下介紹訊息佇列在實際應用中常用的使用場景。非同步處理應用解耦流量削鋒訊息通訊四個場景。

2.1、非同步處理

場景說明:使用者註冊後,需要發註冊郵件和註冊簡訊。傳統的做法有兩種1.序列的方式;2.並行方式

(1)序列方式:將註冊資訊寫入資料庫成功後,傳送註冊郵件,再傳送註冊簡訊。以上三個任務全部完成後,返回給客戶端。

(2)並行方式:將註冊資訊寫入資料庫成功後,傳送註冊郵件的同時,傳送註冊簡訊。以上三個任務完成後,返回給客戶端。與序列的差別是,並行的方式可以提高處理的時間。

假設三個業務節點每個使用50毫秒鐘,不考慮網路等其他開銷,則序列方式的時間是150毫秒,並行的時間可能是100毫秒。

因為cpu在單位時間內處理的請求數是一定的,假設cpu1秒內吞吐量是100次。則序列方式1秒內cpu可處理的請求量是7次(1000/150)。並行方式處理的請求量是10次(1000/100)。

小結:如以上案例描述,傳統的方式系統的效能(併發量,吞吐量,響應時間)會有瓶頸。如何解決這個問題呢?

引入訊息佇列,將不是必須的業務邏輯,非同步處理。改造後的架構如下:

按照以上約定,使用者的響應時間相當於是註冊資訊寫入資料庫的時間,也就是50毫秒。註冊郵件,傳送簡訊寫入訊息佇列後,直接返回,因此寫入訊息佇列的速度很快,基本可以忽略,因此使用者的響應時間可能是50毫秒。因此架構改變後,系統的吞吐量提高到每秒20 qps。比序列提高了3倍,比並行提高了兩倍。

2.2、應用解耦

場景說明:使用者下單後,訂單系統需要通知庫存系統。傳統的做法是,訂單系統呼叫庫存系統的介面。如下圖:

傳統模式的缺點:

1)  假如庫存系統無法訪問,則訂單減庫存將失敗,從而導致訂單失敗;

2)  訂單系統與庫存系統耦合;

如何解決以上問題呢?引入應用訊息佇列後的方案,如下圖:

2.3、流量削鋒

流量削鋒也是訊息佇列中的常用場景,一般在秒殺或團搶活動中使用廣泛。

應用場景:秒殺活動,一般會因為流量過大,導致流量暴增,應用掛掉。為解決這個問題,一般需要在應用前端加入訊息佇列。

可以控制活動的人數;

可以緩解短時間內高流量壓垮應用;

使用者的請求,伺服器接收後,首先寫入訊息佇列。假如訊息佇列長度超過最大數量,則直接拋棄使用者請求或跳轉到錯誤頁面;

秒殺業務根據訊息佇列中的請求資訊,再做後續處理。

2.4、日誌處理

日誌處理是指將訊息佇列用在日誌處理中,比如kafka的應用,解決大量日誌傳輸的問題。架構簡化如下:

(1)kafka:接收使用者日誌的訊息佇列。

(2)logstash:做日誌解析,統一成json輸出給elasticsearch。

(3)elasticsearch:實時日誌分析服務的核心技術,乙個schemaless,實時的資料儲存服務,通過index組織資料,兼具強大的搜尋和統計功能。

(4)kibana:基於elasticsearch的資料視覺化元件,超強的資料視覺化能力是眾多公司選擇elk stack的重要原因。

它有兩種訊息模式:點對點模式發布訂閱模式

3.1、點對點模式

點對點模式包含三個角色:訊息佇列(queue)傳送者(sender)接收者(receiver)。每個訊息都被傳送到乙個特定的佇列,接收者從佇列中獲取訊息。佇列保留著訊息,直到他們被消費或超時。

點對點的特點

每個訊息只有乙個消費者(consumer)(即一旦被消費,訊息就不再在訊息佇列中)

傳送者和接收者之間在時間上沒有依賴性,也就是說當傳送者傳送了訊息之後,不管接收者有沒有正在執行,它不會影響到訊息被傳送到佇列

接收者在成功接收訊息之後需向佇列應答成功

如果希望傳送的每個訊息都會被成功處理的話,那麼需要p2p模式。

3.2、發布訂閱模式

包含三個角色:主題(topic)發布者(publisher)訂閱者(subscriber)。多個發布者將訊息傳送到topic,系統將這些訊息傳遞給多個訂閱者。

pub/sub的特點

每個訊息可以有多個消費者

發布者和訂閱者之間有時間上的依賴性。針對某個主題(topic)的訂閱者,它必須建立乙個訂閱者之後,才能消費發布者的訊息。

為了消費訊息,訂閱者必須保持執行的狀態。

為了緩和這樣嚴格的時間相關性,jms允許訂閱者建立乙個可持久化的訂閱。這樣,即使訂閱者沒有被啟用(執行),它也能接收到發布者的訊息。

如果希望傳送的訊息可以不被做任何處理、或者只被乙個訊息者處理、或者可以被多個消費者處理的話,那麼可以採用pub/sub模型。

想太多,做太少,中間的落差就是煩惱。想沒有煩惱,要麼別想,要麼多做。上尉

訊息佇列(MQ)簡介與應用場景

一 官方描述 mq全稱為message queue,訊息佇列 mq 是一種應用程式對應用程式的通訊方法。應用程式通過讀寫出入佇列的訊息 針對應用程式的資料 來通訊,而無需專用連線來鏈結它們。訊息傳遞指的是程式之間通過在訊息中傳送資料進行通訊,而不是通過直接呼叫彼此來通訊,直接呼叫通常是用於諸如遠端過...

訊息佇列使用場景

1 非同步處理 減少等待時間,更快的返回處理結果,提高系統效能以及更好的使用者體驗。fe 在乙個秒殺系統中,可能需要如下幾步 風險控制,鎖定庫存,生成訂單,訊息通知以及統計資料,在未優化的情況下,使用者請求到達閘道器後進入服務端要至少 經歷這五個步驟,但是對於秒殺系統而言關鍵的步驟在於風險控制和鎖定...

訊息佇列的使用場景

知乎 假設使用者在你的軟體中註冊,服務端收到使用者的註冊請求後,它會做這些操作 校驗使用者名稱等資訊,如果沒問題會在資料庫中新增乙個使用者記錄 如果是用郵箱註冊會給你傳送一封註冊成功的郵件,手機註冊則會傳送一條簡訊 分析使用者的個人資訊,以便將來向他推薦一些志同道合的人,或向那些人推薦他 傳送給使用...