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

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

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

綜上,各種對(duì)比之后,有如下建議:
中小型公司,技術(shù)實(shí)力較為一般,技術(shù)挑戰(zhàn)不是特別高,用 RabbitMQ 是不錯(cuò)的選擇;
大型公司,基礎(chǔ)架構(gòu)研發(fā)實(shí)力較強(qiáng),用 RocketMQ 是很好的選擇;
