運維架構中消息隊列的作用

消息隊列

消息隊列(Message Queue)簡寫爲MQ,可以簡單將其理解成: 把要傳輸的數據放在隊列中。

消息隊列中間件是分佈式系統中重要的組件。主要解決應用解耦,異步消息,流量削鋒, 消息通迅等問題, 從而實現高性能,高可用,可伸縮和最終一致性的架構。

生活中的場景: 快遞員送快遞到客戶家,客戶不在家或客戶有事需要快遞員等待,這樣就降低了快遞員工作的效率。所以現在小區或寫字樓的樓下都建立了菜鳥驛站或蜂巢櫃等,它們就相當於是消息隊列。

應用解耦

IT應用場景: 用戶下單後,訂單系統需要調用庫存系統的接口。

 


上面場景的缺點: 當庫存系統出了問題無法訪問時, 訂單也會失敗。訂單系統與庫存系統耦合。

 

引入消息隊列後

 

 

訂單系統:用戶下單後,訂單系統完成持久化處理,將消息寫入消息隊列,返回用戶訂單下單成功。

庫存系統:訂閱下單的消息,採用pull或push的方式,獲取下單信息,庫存系統根 據下單信息,進行庫存操作.

如果庫存系統出問題,不會再影響到訂單系統。庫存系統正常後再向消息隊列訂閱消息即可。這就是將原來耦合的兩個系統實現了應用解耦。

異步處理

IT應用場景: 網站用戶註冊, 將註冊信息寫入數據庫成功後, 發送註冊郵件和註冊短信.

上圖中, 假設註冊信息寫入數據庫需要50ms,不考慮其它開銷,發送註冊郵件與註冊短信是並行的,也需要50ms。那麼對於用戶來說,響應時間就是共100ms.

引入消息隊列後, 用戶註冊信息寫入數據庫和消息隊列後直接返回給用戶。由於定入消息隊列速度很快,假設爲5ms,則響應時間就是共55ms。發送註冊郵件和短信則爲異步處理。

流量削峯

IT應用場景: 電商秒殺型業務中, 在短時間內流量爆增,會導致應用負載過高而掛掉。

 

在前端加上消息隊列

引入消息隊列後,可以緩解流量並控制客戶端連接人數。假如消息隊列長度超過最大數量,則直接拋棄用戶請求或跳轉到錯誤頁面。

常見的消息隊列開源軟件有:

ActiveMQ

abbitMQ

RocketMQ

ZeroMQ

Kafka

發佈了643 篇原創文章 · 獲贊 1315 · 訪問量 163萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章