MQ应用场景
消息隊列中間件是分布式系統中的重要組件,主要解決異步消息,應用解耦,流量削峰等問題,從而實現高性能,高可用,可伸縮和最終一致性的架構。
使用較多的消息隊列有ActiveMQ,RabbitMQ,Kafka,MateMQ等。
一:異步處理
場景說明:用戶注冊之后,需要發送注冊郵件和注冊短信,傳統做法如下:
將注冊信息寫入數據庫成功后,發送注冊郵件,再發送注冊短信,以上三個任務全部完成后,返回給客戶端
引入消息隊列,異步處理,改造后的框架如下:
二 :應用解耦
場景說明:用戶下單之后,訂單系統需要通知庫存系統,傳統做法是,訂單系統調用庫存系統的接口,如下圖所示:
傳統模式的缺點:
- 假如庫存系統無法訪問,則訂單減庫存將失敗,從而導致下單失敗。
- 訂單系統與庫存系統耦合。
引入消息隊列后的方案如下圖:
- 訂單系統:用戶下單后,訂單系統完成持久化處理,將消息寫入消息隊列,返回用戶,下單成功。
- 庫存系統:定于下單的消息,獲取下單信息,庫存系統根據下單信息,進行庫存操作。
- 假如:在下單時庫存系統不能正常使用,也不影響正常下單,因為下單后,訂單系統寫入消息隊列,不再關心其他的后續操作了,實現訂單系統與庫存系統的應用耦合。
三:流量削峰
流量削峰也是消息隊列中的常用場景,一般在秒殺或者團搶活動中廣泛應用,
應用場景:秒殺活動,一般會因為流量過大,導致流量暴增,應用掛掉,為解決這個問題,一般需要在應用前端加入消息隊列。
-
可以控制活動的人數
-
可以緩解短時間內高流量壓垮應用
-
用戶的請求,服務器接收后,首先寫入消息隊列,假如消息隊列長度超過最大數量,則直接拋棄用戶請求或者跳轉到錯誤頁面。
-
秒殺業務根據消息隊列中的請求消息,再做后續處理
總結