簡介
消息隊列 MQ 既可爲分佈式應用系統提供異步解耦和削峯填谷的能力,同時也具有互聯網應用所需的海量消息堆積、高吞吐、可靠重試等特性。數據庫
應用場景
- 削峯填谷:諸如秒殺、搶紅包、企業開門紅等大型活動時皆會帶來較高的流量脈衝,或因沒作相應的保護而致使系統超負荷甚至崩潰,或因限制太過致使請求大量失敗而影響用戶體驗,消息隊列 MQ 可提供削峯填谷的服務來解決該問題。
- 異步解耦:交易系統做爲淘寶/天貓主站最核心的系統,每筆交易訂單數據的產生會引發幾百個下游業務系統的關注,包括物流、購物車、積分、流計算分析等等,總體業務系統龐大並且複雜,消息隊列 MQ 可實現異步通訊和應用解耦,確保主站業務的連續性。
- 順序收發:細很多天常中須要保證順序的應用場景很是多,好比證券交易過程時間優先原則,交易系統中的訂單建立、支付、退款等流程,航班中的旅客登機消息處理等等。與先進先出(First In First Out,縮寫 FIFO)原理相似,消息隊列 MQ 提供的順序消息即保證消息 FIFO。
- 分佈式事務一致性:交易系統、支付紅包等場景須要確保數據的最終一致性,大量引入消息隊列 MQ 的分佈式事務,既能夠實現系統之間的解耦,又能夠保證最終的數據一致性。
- 大數據分析:數據在「流動」中產生價值,傳統數據分析大可能是基於批量計算模型,而沒法作到實時的數據分析,利用阿里雲消息隊列 MQ 與流式計算引擎相結合,能夠很方便的實現將業務數據進行實時分析。
分佈式緩存同步:天貓雙 11 大促,各個分會場琳琅滿目的商品須要實時感知價格變化,大量併發訪問數據庫致使會場頁面響應時間長,集中式緩存由於帶寬瓶頸限制商品變動的訪問流量,經過消息隊列 MQ 構建分佈式緩存,實時通知商品數據的變化。
解耦
MQ未參與系統,系統耦合
緩存
MQ參與系統解耦
微信
異步
- MQ未參與系統,各系統之間同步調用
![](http://static.javashuo.com/static/loading.gif)
- MQ參與系統,各系統之間異步調用
![](http://static.javashuo.com/static/loading.gif)
消峯
- MQ未參與系統,用戶高併發請求時
![](http://static.javashuo.com/static/loading.gif)
- MQ未參與系統,用戶高併發請求時,消峯處理
![](http://static.javashuo.com/static/loading.gif)
系統引入MQ帶來的缺點
使用第二張圖說明併發
- 系統可用性下降,若是系統A給MQ發送消息時MQ故障,沒法接受到消息,則系統BCD沒法處理請求
- 系統複雜度提升,原本只須要維護系統ABCD便可,如今還須要維護MQ,且增長學習成本
- 系統一致性問題複雜,系統A發送3條消息給MQ,可是其中MQ故障丟了1條消息,則系統BCD的數據會跟系統A對應不上
Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什麼優缺點?
![](http://static.javashuo.com/static/loading.gif)
**如感受文章對你有所幫助,能夠關注微信公衆號【五彩的顏色】鼓勵一下**
![](https://img2018.cnblogs.com/blog/1821244/201911/1821244-20191118155027987-1832486978.jpg)