MQ簡介
什麼是MQ 跨進程的消息隊列,主要角色包括生產者與消費者。 生產者只負責生產信息,無法感知消費者是誰,消息怎麼處理,處理結果是什麼。 消費者負責接收及處理消息,無法感知生產者是誰,怎麼產生的。
作用及意義
1.消息異步:
上游直接調用下游
缺點:
- 上游關注執行結果,但執行時間很長
- 上游需要同步等待下游執行結果
- 下游系統故障導致上游系統無法使用
- 下游增加需修改上游代碼
使用MQ調用(異步)
使用MQ的優點:
- 上游無需等待下游執行完畢,加快上游響應速度
- 下游系統故障不會影響上游系統的運行
- 增加下游只需訂閱 MQ
2.解耦
服務解耦:系統解耦,用戶系統或者其他系統需要發送短信可以通過 MQ 執行;很好的將 用戶系統 和 短信系統進行解耦;
採用MQ的優點是:
- 不需要預留 buffer,上游任務執行完,下游任務總會在第一時間被執行
- 依賴多個任務,被多個任務依賴都很好處理,只需要訂閱相關消息即可
- 有任務執行時間變化,下游任務都不需要調整執行時間
3.削峯
請求高峯期
舉個例子:系統A一天中大部分時間每秒請求併發數量就 100 多個,但是中午12點-1點每秒請求併發量就飆升到 10000 多個,但是系統每秒最大能處理的請求量只有 1000 多。
-
不使用MQ
這個時候如果讓系統硬抗會導致系統掛掉
- 使用MQ
通過使用 MQ 達到限流的效果,系統無法處理的請求會堆積在 MQ 中,高峯期過後系統可以繼續消費 MQ 中的請求。
使用MQ的優點:
系統不會因爲高峯期的請求量掛掉
引入MQ帶來的問題:
-
可用性降低
系統引入的外部依賴越多,越容易掛掉,MQ 掛掉之後會導致整個系統不可用。
-
複雜度提高
重複消費、消息丟失、消息的順序性等這些都是引入 MQ 之後需要考慮的事情。
-
一致性問題
A 系統處理完了直接返回成功了,人都以爲你這個請求就成功了;但是問題是,要是 BCD 三個系統那裏,BD 兩個系統寫庫成功了,結果 C 系統寫庫失敗了,就會導致數據不一致。