MQ 架構與細節

ice_image發表於2021-03-17

MQ 架構與細節

MQ 是什麼?

MQ:MessageQueue,訊息佇列的簡稱,用於程式間通訊或同一程式的不同執行緒間的通訊方式。

什麼時候該使用MQ?

  1. 資料驅動的任務依賴
  2. 上游不關心執行結果
  3. 上游關心執行結果,但執行時間很長

MQ 是架構中常見的解耦利器:實時關注結果的用 RPC,任務依賴、上游不關心執行結果,非同步執行結果返回時間很長,通常可以使用 MQ

MQ 如何做到,訊息必達?

  1. 訊息落地
  2. 超時,重傳,確認

MQ 核心架構

MQ 訊息可靠投遞

訊息重傳可能導致收到重複的訊息!

必須要保證訊息冪等!

MQ 如何做到,訊息冪等?

什麼是冪等性?

使用同樣的條件,一次請求和重複多次請求對系統資源的影響是一致的。

對技術方案的啟示是: 分散式系統設計中,設計必須考慮,底層重試時(並不一定是應用層發起的,有時候是TCP 層,有時候是連結池層,有時候是框架層,這些重試,並不是應用層能夠控制的),系統不會異常,資料不會不一致。

MQ 訊息可靠投遞,會不會有冪等性問題?

上半場冪等的關鍵:inner-msg-id

核心是訊息去重

下半場冪等的關鍵:unique-biz-id

業務方通過全域性唯一的業務 id 去自行保證

業務冪等性,需要 MQ 和訊息接收方配合完成!

MQ 如何做到,削峰填谷?

緩衝流量:將 MQ-server 給下游推送訊息,升級為由下游主動去拉取 MQ-Server 裡面的訊息

MQ 如何做到,訊息延時?

訊息延時的業務場景

場景:在一段時間之後,完成一個工作任務

核心資料結構:

  1. 環形佇列 queue
  2. 任務集合 Set

相關文章