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