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