每日一題:如果讓你寫一個消息隊列,該如何進行架構設計?

點擊上方 Java后端 ,選擇“ 設為星標

優質文章,及時送達

原文來自 GitHub 開源社區 Doocs,歡迎 Star 此項目,如果你有獨到的見解,同樣可以參與貢獻此項目。

面試題

如果讓你寫一個消息隊列,該如何進行架構設計?說一下你的思路?

面試官心理分析

其實聊到這個問題,一般面試官要考察兩塊:

1. 你有沒有對某一個消息隊列做過較為深入的原理的了解,或者從整體了解把握住一個消息隊列的架構原理。

2. 看看你的設計能力,給你一個常見的系統,就是消息隊列系統,看看你能不能從全局把握一下整體架構設計,給出一些關鍵點出來。

說實話,問類似問題的時候,大部分人基本都會蒙,因為平時從來沒有思考過類似的問題,大多數人就是平時埋頭用,從來不去思考背后的一些東西。類似的問題,比如,如果讓你來設計一個 Spring 框架你會怎么做?如果讓你來設計一個 Dubbo 框架你會怎么做?如果讓你來設計一個 MyBatis 框架你會怎么做?

面試題剖析

其實回答這類問題,說白了,不求你看過那技術的源碼,起碼你要大概知道那個技術的基本原理、核心組成部分、基本架構構成,然后參照一些開源的技術把一個系統設計出來的思路說一下就好。

比如說這個消息隊列系統,我們從以下幾個角度來考慮一下:

  • 首先這個 mq 得支持可伸縮性吧,就是需要的時候快速擴容,就可以增加吞吐量和容量,那怎么搞?設計個分布式的系統唄,參照一下 kafka 的設計理念,broker -> topic -> partition,每個 partition 放一個機器,就存一部分數據。如果現在資源不夠了,簡單啊,給 topic 增加 partition,然后做數據遷移,增加機器,不就可以存放更多數據,提供更高的吞吐量了?

  • 其次你得考慮一下這個 mq 的數據要不要落地磁盤吧?那肯定要了,落磁盤才能保證別進程掛了數據就丟了。那落磁盤的時候怎么落啊?順序寫,這樣就沒有磁盤隨機讀寫的尋址開銷,磁盤順序讀寫的性能是很高的,這就是 kafka 的思路。

  • 其次你考慮一下你的 mq 的可用性啊?這個事兒,具體參考之前可用性那個環節講解的 kafka 的高可用保障機制。多副本 -> leader & follower -> broker 掛了重新選舉 leader 即可對外服務。

  • 能不能支持數據 0 丟失啊?可以的,參考我們之前說的那個 kafka 數據零丟失方案。

mq 肯定是很復雜的,面試官問你這個問題,其實是個開放題,他就是看看你有沒有從架構角度整體構思和設計的思維以及能力。確實這個問題可以刷掉一大批人,因為大部分人平時不思考這些東西。

-END-

如果看到這里,說明你喜歡這篇文章,幫忙 轉發 一下吧,感謝。 微信搜索「web_resource」,關注后即可獲取每日一題的推送。

1. 每日一題:消息隊列面試常問題目

2.  每日一題:如何保證消息隊列的高可用?

3.   每日一題:如何設計一個高并發系統?

4.    每日一題:為什么要進行系統拆分?

5. 每日一題:你有沒有做過 MySQL 讀寫分離?

6.  每日一題:如何保證消息不被重復消費?

7. 面試官:集群部署時,分布式 session 如何實現?

8. 面試題:InnoDB 中一棵 B+ 樹能存多少行數據?

9. 面試官:Redis 內存滿了怎么辦?

每日一題:如果讓你寫一個消息隊列,該如何進行架構設計?

在看   每日一題:如果讓你寫一個消息隊列,該如何進行架構設計?

原文 

http://mp.weixin.qq.com/s?__biz=Mzg2MjEwMjI1Mg==&mid=2247489593&idx=3&sn=2b93042848355f0a382774fc1326ad4b

本站部分文章源于互聯網,本著傳播知識、有益學習和研究的目的進行的轉載,為網友免費提供。如有著作權人或出版方提出異議,本站將立即刪除。如果您對文章轉載有任何疑問請告之我們,以便我們及時糾正。

PS:推薦一個微信公眾號: askHarries 或者qq群:474807195,里面會分享一些資深架構師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

轉載請注明原文出處:Harries Blog? » 每日一題:如果讓你寫一個消息隊列,該如何進行架構設計?

贊 (0)
分享到:更多 ()

評論 0

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
手机彩票计划软件超稳