activemq都一般應用于什么場景中呢?小伙伴們知道嗎?本篇文章就帶你了解下它的常見應用場景。
一、應用解耦
場景舉例:用戶下單后,訂單系統(tǒng)需要通知庫存系統(tǒng)。傳統(tǒng)做法是,訂單系統(tǒng)調用庫存系統(tǒng)的接口,它的缺點:如若庫存系統(tǒng)無法訪問,則訂單減庫存將失敗,導致訂單失敗,訂單系統(tǒng)與庫存系統(tǒng)存在耦合。
消息隊列引入應用后方案,如圖:
訂單系統(tǒng):用戶下單后,訂單系統(tǒng)完成持久化處理,將消息寫入消息隊列,返回用戶訂單下單成功
庫存系統(tǒng):訂閱下單的消息,采用拉/推的方式,獲取下單信息,庫存系統(tǒng)根據(jù)下單信息,進行庫存操作
如若:下單時庫存系統(tǒng)不能正常使用。也不影響正常下單,因為下單后,訂單系統(tǒng)寫入消息隊列就不再關心其他的后續(xù)操作了。實現(xiàn)訂了單系統(tǒng)與庫存系統(tǒng)的應用解耦。
二、流量削鋒
流量削鋒是消息隊列的常客,一般在秒殺或團搶活動中使用廣泛。
應用舉例:一般因為流量過大,導致流量暴增的秒殺活動。一般需要在應用前端加入消息隊列。
特點
a、控制活動人數(shù)
b、能夠緩解短時間內高流量壓垮應用
流程
用戶請求被服務器接收后,首先寫入消息隊列,如若消息隊列長度超過最大數(shù)量,則直接拋棄用戶請求或跳轉到錯誤頁面。
最后秒殺業(yè)務根據(jù)消息隊列中的請求信息,再做后續(xù)處理
三、異步處理
場景舉例:用戶注冊后,需要發(fā)送注冊郵件和注冊短信。傳統(tǒng)方式有串行和并行兩種:
串行:將注冊信息寫入數(shù)據(jù)庫成功后,發(fā)送注冊郵件,再發(fā)送注冊短信。以上三個任務全部完成后,返回給客戶端。
并行:將注冊信息寫入數(shù)據(jù)庫成功后,發(fā)送注冊郵件的同時,發(fā)送注冊短信。以上三個任務完成后,返回給客戶端。與串行的差別是,并行的方式可以提高處理的時間
我們假設三個業(yè)務節(jié)點每個使用時間為50毫秒鐘,不考慮網(wǎng)絡等其他開銷,則串行方式的時間是150毫秒,并行的時間可能是100毫秒。
因為CPU在單位時間內處理的請求數(shù)是一定的,假設CPU1秒內吞吐量是100次。則串行方式1秒內CPU可處理的請求量是7次(1000/150)。并行方式處理的請求量是10次(1000/100)
如以上描述,傳統(tǒng)方式系統(tǒng)的性能及響應時間必定會有瓶頸。
引入消息隊列,將不是必須的業(yè)務邏輯,異步處理。改造后架構如下:
按照以上說法,用戶響應時間相當于是注冊信息寫入數(shù)據(jù)庫的時間,也就是50毫秒。注冊郵件,發(fā)送短信寫入消息隊列后,直接返回,所以寫入消息隊列的速度很快,基本能夠忽略,因此用戶的響應時間可能是50毫秒。因此架構改變后,系統(tǒng)的吞吐量提高到每秒20 QPS。比串行提高了3倍,比并行提高了兩倍。