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

消息隊列

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

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

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

應用解耦

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

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

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

引入消息隊列後


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


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

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

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

異步處理

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

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

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

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

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

流量削峰

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

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

在前端加上消息隊列

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

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


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

  • ActiveMQ
  • RabbitMQ
  • RocketMQ
  • ZeroMQ
  • Kafka


分享到:


相關文章: