1. 引子消息隊(duì)列分布式系統(tǒng)中重要的組件,一種存放消息的容器,主要作用有解耦、異步、削鋒,是大型分布式系統(tǒng)不可缺少的中間件。 常見(jiàn)的消息隊(duì)列有 ActiveMQ,RabbitMQ,RocketMQ,Kafka。 簡(jiǎn)歷中涉及到了消息隊(duì)列,面試官先問(wèn)了這樣幾個(gè)問(wèn)題:
2. 為什么使用消息隊(duì)列?我的回答:甲方提供 EOS 充值服務(wù),我方進(jìn)行調(diào)用。出于解耦的目的,引入了消息隊(duì)列。 一個(gè)類(lèi)似應(yīng)試的回答方法,就是思考面試官問(wèn)這個(gè)問(wèn)題是出于什么目的,想獲得的是什么樣的答案? 當(dāng)問(wèn)到為什么使用消息隊(duì)列時(shí),面試官期望的回答是公司的 xxx 業(yè)務(wù)遇到了挑戰(zhàn),不用 MQ 會(huì)有麻煩,使用 MQ 之后帶來(lái)了好處。 通過(guò)一個(gè)問(wèn)題就能看出是為了用而用,還是經(jīng)過(guò)思考之后使用。 3. 消息隊(duì)列的使用場(chǎng)景?問(wèn)消息隊(duì)列的使用場(chǎng)景,和問(wèn)消息隊(duì)列有什么優(yōu)點(diǎn),消息隊(duì)列有什么作用是等價(jià)的。 消息隊(duì)列的作用主要有三個(gè)解耦、異步、削峰。 解耦B,C,D 系統(tǒng)需要使用 A 系統(tǒng)產(chǎn)生的關(guān)鍵數(shù)據(jù)。
異步用戶(hù)請(qǐng)求數(shù)據(jù)時(shí),系統(tǒng)的響應(yīng)時(shí)間是保證用戶(hù)體驗(yàn)很重要的一部分。
削峰秒殺場(chǎng)景下,每秒有 5000 個(gè)請(qǐng)求,Mysql 每秒最大處理 2000 條 sql。
4. 消息隊(duì)列有什么缺點(diǎn)?優(yōu)點(diǎn)前面已經(jīng)說(shuō)過(guò)了,還需要討論一下缺點(diǎn)。 為什么要問(wèn)缺點(diǎn)是什么?凡事都有兩面性,如果只是考慮到消息隊(duì)列的優(yōu)點(diǎn),而沒(méi)有考慮缺點(diǎn),這就是一個(gè)潘多拉的魔盒。打開(kāi)魔盒,接踵而來(lái)的會(huì)是一系列的意外。 推廣到引入其他技術(shù)亦然,只有考慮到缺點(diǎn)之后才可以采取額外的技術(shù)方案或者架構(gòu)來(lái)規(guī)避這些缺點(diǎn)。 系統(tǒng)可用性降低
系統(tǒng)復(fù)雜度提高
一致性問(wèn)題
總結(jié)面試官問(wèn)到 MQ 的時(shí)候,希望考察我們?cè)谑褂?MQ 的時(shí)候是否有過(guò)自己的思考。沒(méi)有完美的技術(shù),任何技術(shù)都具有兩面性,要考慮它的使用場(chǎng)景,并且對(duì)可能遇到的風(fēng)險(xiǎn)做到心中有數(shù),提前預(yù)防。 思考引入消息隊(duì)列之后:
|
|
|
來(lái)自: 路人甲Java > 《待分類(lèi)》