小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

面試官對(duì)于消息隊(duì)列的連環(huán)炮

 路人甲Java 2021-07-20

1. 引子

消息隊(duì)列分布式系統(tǒng)中重要的組件,一種存放消息的容器,主要作用有解耦、異步、削鋒,是大型分布式系統(tǒng)不可缺少的中間件。

常見(jiàn)的消息隊(duì)列有 ActiveMQ,RabbitMQ,RocketMQ,Kafka。

簡(jiǎn)歷中涉及到了消息隊(duì)列,面試官先問(wèn)了這樣幾個(gè)問(wèn)題:

  1. 你們系統(tǒng)里為什么要使用消息隊(duì)列?

  2. 既然使用了消息隊(duì)列,說(shuō)說(shuō)他還有什么使用場(chǎng)景?

  3. 消息隊(duì)列的優(yōu)缺點(diǎ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ù)。

  • 無(wú)消息隊(duì)列時(shí)

    • 系統(tǒng) A 為系統(tǒng) B、C、D 等提供各自的接口,導(dǎo)致系統(tǒng) A 與它們緊密耦合

    • 添加系統(tǒng) E 又需要接口,刪除 B 系統(tǒng)原接口又沒(méi)用了

  • 有消息隊(duì)列時(shí)

    • 系統(tǒng) A 作為生產(chǎn)者,將消息發(fā)送到消息隊(duì)列

    • 系統(tǒng) B、C、D 作為消費(fèi)者訂閱消息

    • 新增消費(fèi)者只需訂閱消息,對(duì)原系統(tǒng)和業(yè)務(wù)沒(méi)有影響

異步

異步.png

用戶(hù)請(qǐng)求數(shù)據(jù)時(shí),系統(tǒng)的響應(yīng)時(shí)間是保證用戶(hù)體驗(yàn)很重要的一部分。

  • 無(wú)消息隊(duì)列時(shí)

    • 用戶(hù)請(qǐng)求 A 系統(tǒng),A 系統(tǒng)需要等待 BCD 執(zhí)行完成之后響應(yīng)

    • 用戶(hù)收到響應(yīng)用時(shí)近 1 秒

  • 用消息隊(duì)列時(shí)

    • 用戶(hù)請(qǐng)求 A 系統(tǒng),A 系統(tǒng)將請(qǐng)求推到消息隊(duì)列中,B、C、D 異步執(zhí)行

    • 用戶(hù)收到響應(yīng)用時(shí) 200 毫秒

削峰

削峰.png

秒殺場(chǎng)景下,每秒有 5000 個(gè)請(qǐng)求,Mysql 每秒最大處理 2000 條 sql。

  • 無(wú)消息隊(duì)列時(shí)

    • 用戶(hù)請(qǐng)求數(shù)據(jù)直接寫(xiě)入數(shù)據(jù)庫(kù),高并發(fā)時(shí)數(shù)據(jù)庫(kù)壓力劇增,甚至奔潰

    • Mysql 宕機(jī),整個(gè)系統(tǒng)都不能用了

  • 有消息隊(duì)列時(shí)系統(tǒng) B、C、D

    • 用戶(hù)請(qǐng)求數(shù)據(jù)先存入 MQ 中

    • 系統(tǒng) A 每秒讀取 2000 條數(shù)據(jù)進(jìn)行處理

    • 每秒多出 3000 條未處理數(shù)據(jù)按場(chǎng)景稍后處理

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)引入的外部依賴(lài)越多,宕機(jī)的可能性就越大

  • 系統(tǒng)引入消息隊(duì)列,就要考慮消息隊(duì)列的可靠性

  • 比如原本只需要考慮 A,B,C,D 四個(gè)系統(tǒng)

  • 引入消息隊(duì)列之后就需要考慮 A,B,C,D 四個(gè)系統(tǒng)外加消息隊(duì)列

系統(tǒng)復(fù)雜度提高

  • 消息重復(fù)消費(fèi)問(wèn)題

  • 消息丟失問(wèn)題

  • 消息傳遞順序問(wèn)題

一致性問(wèn)題

  • A 系統(tǒng)處理完返回成功,即認(rèn)為請(qǐng)求成功

  • 但是也存在 BC 系統(tǒng)寫(xiě)入成功,而 D 系統(tǒng)寫(xiě)入失敗的情況

  • 這樣的情況就是數(shù)據(jù)不一致

總結(jié)

面試官問(wèn)到 MQ 的時(shí)候,希望考察我們?cè)谑褂?MQ 的時(shí)候是否有過(guò)自己的思考。沒(méi)有完美的技術(shù),任何技術(shù)都具有兩面性,要考慮它的使用場(chǎng)景,并且對(duì)可能遇到的風(fēng)險(xiǎn)做到心中有數(shù),提前預(yù)防。

消息隊(duì)列思維導(dǎo)圖

思考

引入消息隊(duì)列之后:

  • 如何保證高可用?

  • 如何避免消息的重復(fù)消費(fèi)和消息丟失?

  • 如何保證消息的順序執(zhí)行?

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多