更新時(shí)間:2022-08-05 來源:黑馬程序員 瀏覽量:
使用MQ的好處:解耦,異步,削峰平谷;
解耦:當(dāng)A系統(tǒng)生產(chǎn)關(guān)鍵數(shù)據(jù),而且B,C,D系統(tǒng)需要A系統(tǒng)給它們發(fā)送數(shù)據(jù),來進(jìn)行下一步操作,此時(shí)A系統(tǒng)和BCD系統(tǒng)產(chǎn)生了嚴(yán)重的耦合,所有的操作和維護(hù)都要在A系統(tǒng)中進(jìn)行,如果將A系統(tǒng)產(chǎn)生的數(shù)據(jù)放到MQ當(dāng)中,讓BCD系統(tǒng)需要的時(shí)候去消費(fèi),此時(shí)就解放了A系統(tǒng),不用考慮調(diào)用成功,失敗超時(shí)等情況,同時(shí)ABCD系統(tǒng)獨(dú)立運(yùn)行,后續(xù)新添加系統(tǒng)需要A系統(tǒng)的數(shù)據(jù),也不需要去修改A系統(tǒng)的代碼,達(dá)到了解耦的效果。
異步:一般互聯(lián)網(wǎng)類企業(yè),對(duì)用戶的直接操作,一般要求每個(gè)請(qǐng)求在200ms以內(nèi)完成。對(duì)于一個(gè)系統(tǒng)調(diào)用多個(gè)系統(tǒng),在不適用mq的情況下,它執(zhí)行完返回的耗時(shí),是執(zhí)行完所有系統(tǒng)所需時(shí)間的總和;使用mq進(jìn)行優(yōu)化后,執(zhí)行的耗時(shí),則是執(zhí)行主系統(tǒng)的耗時(shí),以及加上主系統(tǒng)發(fā)送數(shù)據(jù)到消息隊(duì)列的耗時(shí),大幅度提升高延時(shí)接口的性能,提升了用戶體驗(yàn)。
削峰平谷:一般MySQL的每秒請(qǐng)求最高在2000左右,用戶訪問量高峰期的時(shí)候涌入的大量請(qǐng)求,很可能將MySQL給打死,然后系統(tǒng)就掛掉,但是高峰期過了,請(qǐng)求量可能遠(yuǎn)遠(yuǎn)低于2000,所以這種情況去增加服務(wù)器就不值得,如果使用mq的情況,將用戶的請(qǐng)求全部放到mq中,然后讓系統(tǒng)去消費(fèi)用戶的請(qǐng)求,不要超過系統(tǒng)所能承受的最大請(qǐng)求數(shù)量,保證系統(tǒng)不會(huì)再高峰期掛掉,但此時(shí)可能有幾十萬或幾百萬請(qǐng)求積壓在mq中,但是高峰期一過,系統(tǒng)還是按照最大請(qǐng)求數(shù)量進(jìn)行處理請(qǐng)求,很快就能將積壓請(qǐng)求處理完。
使用MQ的缺陷:
系統(tǒng)可用性降低:以前只要擔(dān)心系統(tǒng)的問題,現(xiàn)在還要考慮mq如果掛掉的問題,因?yàn)閙q一旦掛掉,所關(guān)聯(lián)的系統(tǒng),就會(huì)統(tǒng)統(tǒng)掛掉。
系統(tǒng)復(fù)雜性變高:考慮的問題變多,要考慮消息丟失,消息重復(fù)消費(fèi)的情況。
一致性問題:比如A系統(tǒng)調(diào)用BCD系統(tǒng),BCD同時(shí)成功才能執(zhí)行成功,返回?cái)?shù)據(jù),現(xiàn)在BC執(zhí)行成功,D發(fā)生異常的情況,并沒有執(zhí)行成功,但是A給用戶返回的是成功。