其實(shí)回答這類問(wèn)題圾另,說(shuō)白了,不求你看過(guò)那技術(shù)的源碼雕沉,起碼你要大概知道那個(gè)技術(shù)的基本原理集乔、核心組成部分、基本架構(gòu)構(gòu)成蘑秽,然后參照一些開(kāi)源的技術(shù)把一個(gè)系統(tǒng)設(shè)計(jì)出來(lái)的思路說(shuō)一下就好饺著。
比如說(shuō)這個(gè)消息隊(duì)列系統(tǒng),我們從以下幾個(gè)角度來(lái)考慮一下:
1.首先這個(gè) mq 得支持可伸縮性吧肠牲,就是需要的時(shí)候快速擴(kuò)容,就可以增加吞吐量和容量靴跛,那怎么搞缀雳?設(shè)計(jì)個(gè)分布式的系統(tǒng)唄,參照一下 kafka 的設(shè)計(jì)理念梢睛,broker -> topic -> partition肥印,每個(gè) partition放一個(gè)機(jī)器,就存一部分?jǐn)?shù)據(jù)绝葡。如果現(xiàn)在資源不夠了深碱,簡(jiǎn)單啊,給 topic 增加 partition藏畅,然后做數(shù)據(jù)遷移敷硅,增加機(jī)器,不就可以存放更多數(shù)據(jù),提供更高的吞吐量了绞蹦?
2.其次你得考慮一下這個(gè) mq 的數(shù)據(jù)要不要落地磁盤吧力奋?那肯定要了,落磁盤才能保證別進(jìn)程掛了數(shù)據(jù)就丟了幽七。那落磁盤的時(shí)候怎么落熬耙蟆?順序?qū)懺杪牛@樣就沒(méi)有磁盤隨機(jī)讀寫的尋址開(kāi)銷猿挚,磁盤順序讀寫的性能是很高的,這就是 kafka 的思路驶鹉。
3.其次你考慮一下你的 mq 的可用性巴ざ?這個(gè)事兒梁厉,具體參考之前可用性那個(gè)環(huán)節(jié)講解的 kafka 的高可用保障機(jī)制辜羊。多副本 -> leader & follower -> broker 掛了重新選舉 leader 即可對(duì)外服務(wù)。
4.能不能支持?jǐn)?shù)據(jù) 0 丟失按使恕八秃?可以的,參考我們之前說(shuō)的那個(gè) kafka 數(shù)據(jù)零丟失方案肉盹。
mq 肯定是很復(fù)雜的昔驱,面試官問(wèn)你這個(gè)問(wèn)題,其實(shí)是個(gè)開(kāi)放題上忍,他就是看看你有沒(méi)有從架構(gòu)角度整體構(gòu)思和設(shè)計(jì)的思維以及能力骤肛。確實(shí)這個(gè)問(wèn)題可以刷掉一大批人,因?yàn)榇蟛糠秩似綍r(shí)不思考這些東西窍蓝。