1.應(yīng)用場(chǎng)景
1.1 異步處理
場(chǎng)景說(shuō)明:用戶(hù)注冊(cè)后芒率,需要發(fā)注冊(cè)郵件和注冊(cè)短信,傳統(tǒng)的做法有兩種1.串行的方式;2.并行的方式
(1)串行方式:將注冊(cè)信息寫(xiě)入數(shù)據(jù)庫(kù)后,發(fā)送注冊(cè)郵件,再發(fā)送注冊(cè)短信,以上三個(gè)任務(wù)全部完成后才返回給客戶(hù)端囤耳。 這有一個(gè)問(wèn)題是,郵件,短信并不是必須的,它只是一個(gè)通知,而這種做法讓客戶(hù)端等待沒(méi)有必要等待的東西.
(2)并行方式:將注冊(cè)信息寫(xiě)入數(shù)據(jù)庫(kù)后,發(fā)送郵件的同時(shí),發(fā)送短信,以上三個(gè)任務(wù)完成后,返回給客戶(hù)端,并行的方式能提高處理的時(shí)間。
假設(shè)三個(gè)業(yè)務(wù)節(jié)點(diǎn)分別使用50ms,串行方式使用時(shí)間150ms,并行使用時(shí)間100ms偶芍。雖然并性已經(jīng)提高的處理時(shí)間,但是,前面說(shuō)過(guò),郵件和短信對(duì)我正常的使用網(wǎng)站沒(méi)有任何影響充择,客戶(hù)端沒(méi)有必要等著其發(fā)送完成才顯示注冊(cè)成功,英愛(ài)是寫(xiě)入數(shù)據(jù)庫(kù)后就返回.
上圖如果采用傳統(tǒng)的同步方式處理,系統(tǒng)性能會(huì)很慢匪蟀。
(3)消息隊(duì)列
引入消息隊(duì)列后椎麦,把發(fā)送郵件,短信不是必須的業(yè)務(wù)邏輯異步處理
由此可以看出,引入消息隊(duì)列后,用戶(hù)的響應(yīng)時(shí)間就等于寫(xiě)入數(shù)據(jù)庫(kù)的時(shí)間+寫(xiě)入消息隊(duì)列的時(shí)間(可以忽略不計(jì)),引入消息隊(duì)列后處理后,響應(yīng)時(shí)間是串行的3倍,是并行的2倍材彪。
1.2 應(yīng)用解耦
場(chǎng)景:雙11是購(gòu)物狂節(jié),用戶(hù)下單后,訂單系統(tǒng)需要通知庫(kù)存系統(tǒng),傳統(tǒng)的做法就是訂單系統(tǒng)調(diào)用庫(kù)存系統(tǒng)的接口.
這種做法有一個(gè)缺點(diǎn):
當(dāng)庫(kù)存系統(tǒng)出現(xiàn)故障時(shí),訂單就會(huì)失敗观挎。(這樣馬云將少賺好多好多錢(qián)^ ^)
訂單系統(tǒng)和庫(kù)存系統(tǒng)高耦合.
引入消息隊(duì)列
訂單系統(tǒng):用戶(hù)下單后,訂單系統(tǒng)完成持久化處理,將消息寫(xiě)入消息隊(duì)列,返回用戶(hù)訂單下單成功。
庫(kù)存系統(tǒng):訂閱下單的消息,獲取下單消息,進(jìn)行庫(kù)操作段化。
就算庫(kù)存系統(tǒng)出現(xiàn)故障,消息隊(duì)列也能保證消息的可靠投遞,不會(huì)導(dǎo)致消息丟失(馬云這下高興了).
1.3 流量削峰
流量削峰一般在秒殺活動(dòng)中應(yīng)用廣泛
場(chǎng)景:秒殺活動(dòng)嘁捷,一般會(huì)因?yàn)榱髁窟^(guò)大,導(dǎo)致應(yīng)用掛掉,為了解決這個(gè)問(wèn)題显熏,一般在應(yīng)用前端加入消息隊(duì)列雄嚣。
作用:
1.可以控制活動(dòng)人數(shù),超過(guò)此一定閥值的訂單直接丟棄(我為什么秒殺一次都沒(méi)有成功過(guò)呢^^)
2.可以緩解短時(shí)間的高流量壓垮應(yīng)用(應(yīng)用程序按自己的最大處理能力獲取訂單)
1.用戶(hù)的請(qǐng)求,服務(wù)器收到之后,首先寫(xiě)入消息隊(duì)列,加入消息隊(duì)列長(zhǎng)度超過(guò)最大值,則直接拋棄用戶(hù)請(qǐng)求或跳轉(zhuǎn)到錯(cuò)誤頁(yè)面.
2.秒殺業(yè)務(wù)根據(jù)消息隊(duì)列中的請(qǐng)求信息喘蟆,再做后續(xù)處理.