【建議收藏】消息隊列常見的使用場景
看這么個場景。A 系統(tǒng)發(fā)送數(shù)據(jù)到 BCD 三個系統(tǒng),通過接口調(diào)用發(fā)送。如果 E 系統(tǒng)也要這個數(shù)據(jù)呢?那如果 C 系統(tǒng)現(xiàn)在不需要了呢?A 系統(tǒng)負(fù)責(zé)人幾乎崩潰......

2. 異步處理
一般互聯(lián)網(wǎng)類的企業(yè),對于用戶直接的操作,一般要求是每個請求都必須在 200 ms 以內(nèi)完成,對用戶幾乎是無感知的。
如果使用 MQ,那么 A 系統(tǒng)連續(xù)發(fā)送 3 條消息到 MQ 隊列中,假如耗時 5ms,A 系統(tǒng)從接受一個請求到返回響應(yīng)給用戶,總時長是 3 + 5 = 8ms,對于用戶而言,其實感覺上就是點個按鈕,8ms 以后就直接返回了,爽!網(wǎng)站做得真好,真快!
3. 流量削峰
每天 0:00 到 12:00,A 系統(tǒng)風(fēng)平浪靜,每秒并發(fā)請求數(shù)量就 50 個。結(jié)果每次一到 12:00 ~ 13:00 ,每秒并發(fā)請求數(shù)量突然會暴增到 5k+ 條。但是系統(tǒng)是直接基于 MySQL 的,大量的請求涌入 MySQL,每秒鐘對 MySQL 執(zhí)行約 5k 條 SQL。
一般的 MySQL,扛到每秒 2k 個請求就差不多了,如果每秒請求到 5k 的話,可能就直接把 MySQL 給打死了,導(dǎo)致系統(tǒng)崩潰,用戶也就沒法再使用系統(tǒng)了。
但是高峰期一過,到了下午的時候,就成了低峰期,可能也就 1w 的用戶同時在網(wǎng)站上操作,每秒中的請求數(shù)量可能也就 50 個請求,對整個系統(tǒng)幾乎沒有任何的壓力。

如果使用 MQ,每秒 5k 個請求寫入 MQ,A 系統(tǒng)每秒鐘最多處理 2k 個請求,因為 MySQL 每秒鐘最多處理 2k 個。A 系統(tǒng)從 MQ 中慢慢拉取請求,每秒鐘就拉取 2k 個請求,不要超過自己每秒能處理的最大請求數(shù)量就 ok,這樣下來,哪怕是高峰期的時候,A 系統(tǒng)也絕對不會掛掉。而 MQ 每秒鐘 5k 個請求進(jìn)來,就 2k 個請求出去,結(jié)果就導(dǎo)致在中午高峰期(1 個小時),可能有幾十萬甚至幾百萬的請求積壓在 MQ 中。
這個短暫的高峰期積壓是 ok 的,因為高峰期過了之后,每秒鐘就 50 個請求進(jìn) MQ,但是 A 系統(tǒng)依然會按照每秒 2k 個請求的速度在處理。所以說,只要高峰期一過,A 系統(tǒng)就會快速將積壓的消息給解決掉。
4. 日志處理
大型電商網(wǎng)站(淘寶、京東、國美、蘇寧...)、App(抖音、美團(tuán)、滴滴等)等需要分析用戶行為,要根據(jù)用戶的訪問行為來發(fā)現(xiàn)用戶的喜好以及活躍情況,需要在頁面上收集大量的用戶訪問信息。
消息隊列的優(yōu)缺點
優(yōu)點上面已經(jīng)說了,就是在特殊場景下有其對應(yīng)的好處。
缺點有以下幾個:
系統(tǒng)可用性降低
系統(tǒng)復(fù)雜度提高
一致性問題
Kafka、ActiveMQ、RabbitMQ、RocketMQ 的優(yōu)缺點
消息隊列 ActiveMQ 、RocketMQ 、RabbitMQ 和 Kafka 如何選擇?

綜上,各種對比之后,有如下建議:
中小型公司,技術(shù)實力較為一般,技術(shù)挑戰(zhàn)不是特別高,用 RabbitMQ 是不錯的選擇;
