一、ActiveMQ簡(jiǎn)介
?文章來源:http://www.zghlxwxcb.cn/news/detail-558305.html
ActiveMQ是Apache出品,最流行的,能力強(qiáng)勁的開源消息總線。ActiveMQ是一個(gè)完全支持JMS1.1和J2EE1.4規(guī)范的JMS Provide實(shí)現(xiàn)。盡管JMS規(guī)范出臺(tái)已經(jīng)是很久的事情了,但是JMS在當(dāng)今的J2EE應(yīng)用中仍然扮演這特殊的地位。
?
二、ActiveMQ應(yīng)用場(chǎng)景
消息隊(duì)列在大型電子商務(wù)類網(wǎng)站,如京東、淘寶、去哪兒等網(wǎng)站有這深入的應(yīng)用。
?
隊(duì)列的主要作用:消除高并發(fā)訪問高峰,加快網(wǎng)站的響應(yīng)速度。
?
在不使用消息隊(duì)列的情況下,用戶的請(qǐng)求數(shù)據(jù)直接寫入數(shù)據(jù)庫,在高并發(fā)的情況下,對(duì)數(shù)據(jù)庫造成巨大的壓力,同時(shí)也使系統(tǒng)響應(yīng)延遲加??;
?
早使用隊(duì)列后,用戶的請(qǐng)求發(fā)給隊(duì)列后立即返回;
?
例如:當(dāng)然不能直接給客戶提示訂單提交成功,在淘寶上提示:"您提交了訂單,請(qǐng)等等系統(tǒng)確認(rèn)"
?
再由消息隊(duì)列的消費(fèi)者進(jìn)程從消息隊(duì)列中獲取數(shù)據(jù)庫,異步寫入數(shù)據(jù)庫。
?
由于消息隊(duì)列的服務(wù)處理速度遠(yuǎn)快于數(shù)據(jù)庫,因此用戶的響應(yīng)延遲可能得到有效改善。
?
流程圖解,如下圖:
?
?
?
三、消息隊(duì)列說明
消息隊(duì)列中間是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合、異步消息、流量消峰等問題;
?
實(shí)現(xiàn)高性能,高可用,可伸縮和最終一致性架構(gòu);是大型分布式系統(tǒng)不可缺少的中間件。
?
目前在生產(chǎn)環(huán)境使用較多的消息隊(duì)列:ActiveMQ、RabbitMQ、Kafka、ZeroMQ、MetaMQ、RocketMQ等。
?
四、消息隊(duì)列應(yīng)用場(chǎng)景
1,異步處理
場(chǎng)景說明:用戶注冊(cè)后,需要發(fā)注冊(cè)郵件和注冊(cè)短信。傳統(tǒng)的做法有兩種方式:串行方式、并行方式;
?
(1)串行方式:將注冊(cè)信息寫入數(shù)據(jù)庫成功后,發(fā)生注冊(cè)郵件,再發(fā)生注冊(cè)短信。以上三個(gè)任務(wù)完成后,返回給客戶端。
?
?
?
(2)并行方式:將注冊(cè)信息寫入數(shù)據(jù)庫成功后,發(fā)生注冊(cè)郵件的同時(shí),發(fā)生注冊(cè)短信,以上三個(gè)任務(wù)完成后,返回給客戶端,與串行的差別是,并行的方式可以提高處理時(shí)間;
?
?
?
假設(shè)三個(gè)業(yè)務(wù)節(jié)點(diǎn)每個(gè)使用50ms,不考慮網(wǎng)絡(luò)等其他開銷,則串行方式的耗時(shí)是150ms;并行的耗時(shí)是100ms;
?
因?yàn)镃PU在單位時(shí)間內(nèi)處理的請(qǐng)求數(shù)是一定的,假設(shè)CPU 1秒內(nèi)吞吐量是100次;則串行方式1秒內(nèi)CPU可以處理的請(qǐng)求量是7次(1000/150);并行方式可處理請(qǐng)求量是10次(1000/100);
?
綜上所述,傳統(tǒng)的方式系統(tǒng)的性能(并發(fā)量、吞吐量、響應(yīng)時(shí)間)會(huì)有瓶頸。如何解決這個(gè)問題?
?
引入消息隊(duì)列,將不是必須的業(yè)務(wù)邏輯,異步處理,改造后的架構(gòu)如下圖:
?
?
?
安裝上述約定,用戶的響應(yīng)時(shí)間相當(dāng)于是注冊(cè)信息寫入數(shù)據(jù)庫的時(shí)間,也是就是50ms.
?
注冊(cè)郵件,發(fā)短信寫入消息隊(duì)列后,直接放回,因此寫入消息隊(duì)列的速度很快,基本可以忽略。
?
采用消息隊(duì)列后用戶的響應(yīng)數(shù)據(jù)可能就是50ms。所以基于此架構(gòu),系統(tǒng)的吞吐量提高到每秒20QPS;比串行提高了3倍,比并行提高了2倍。
?
2,應(yīng)用解耦
場(chǎng)景說明:用戶下單后,訂單系統(tǒng)需要通知庫存系統(tǒng)。傳統(tǒng)的做法:訂單系統(tǒng)調(diào)用庫存系統(tǒng)接口。如下圖:
?
?
?
傳統(tǒng)模式的缺點(diǎn):
?
1>.假如庫存系統(tǒng)無法訪問,則訂單減庫存將失敗,從而導(dǎo)致訂單失??;
?
2>.訂單系統(tǒng)與庫存系統(tǒng)耦合;
?
如何解決以上問題?引入應(yīng)用消息隊(duì)列后的方案,如下圖:
?
?
1>.訂單系統(tǒng):用戶下單后,訂單系統(tǒng)完成持久化處理,將消息寫入消息隊(duì)列,返回用戶訂單下單成功,請(qǐng)等等物流配送。
?
2>.庫存系統(tǒng):訂閱下單的消息,采用拉/推的方式,獲取下單信息,庫存系統(tǒng)根據(jù)下單信息,進(jìn)行庫存操作。
?
3>.假如在下單時(shí)庫存系統(tǒng)不能正常使用,也不影響正常下單。因?yàn)橄聠魏?,訂單系統(tǒng)寫入消息隊(duì)列就不再關(guān)系其他的后續(xù)操作了,實(shí)現(xiàn)訂單系統(tǒng)與庫存系統(tǒng)的應(yīng)用解耦。
?
3,流量消峰
流量消峰也是消息隊(duì)列中的常用場(chǎng)景,一般在秒數(shù)或者團(tuán)搶活動(dòng)中使用廣泛。
?
應(yīng)用場(chǎng)景:秒數(shù)活動(dòng),一般因?yàn)榱髁窟^大,導(dǎo)致流量暴增,應(yīng)用容易掛掉。為解決這個(gè)問題,一般需要在應(yīng)用前端假如消息隊(duì)列。
?
(1)可以控制活動(dòng)人數(shù)。
?
(2)可以緩解短時(shí)間內(nèi)高流量壓垮應(yīng)用;
?
?
?
引入消息隊(duì)列:
?
1>.用戶的請(qǐng)求,服務(wù)器接收后,首先寫入消息隊(duì)列。假如消息隊(duì)列長(zhǎng)度超過最大數(shù)量,則直接拋棄用戶請(qǐng)求或者跳轉(zhuǎn)到錯(cuò)誤頁面;
?
2>.秒殺業(yè)務(wù)根據(jù)消息隊(duì)列的請(qǐng)求信息,再做后續(xù)處理;
?
4,消息通訊
?消息通訊是指:消息隊(duì)列一般都內(nèi)置了高效的通訊機(jī)制,因此也可以用在純的消息通訊。比如實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的消息隊(duì)列或者聊天室等。
?
(1)點(diǎn)對(duì)點(diǎn)通訊
?
?
?
客戶端A和客戶端B使用同一隊(duì)列,進(jìn)行消息通訊。
?
(2)聊天室通訊(發(fā)布訂閱)
?
?
?
客戶端A、客戶端B、客戶端N訂閱同一主題,進(jìn)行消息發(fā)布和接收,實(shí)現(xiàn)類是聊天室效果。文章來源地址http://www.zghlxwxcb.cn/news/detail-558305.html
到了這里,關(guān)于ActiveMQ消息中間件應(yīng)用場(chǎng)景的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!