消息隊列-如何設計一個消息中間件架構?

面試連環炮

面試題

如何設計一個消息中間件架構?

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

這種問題,說白了,起碼不求你看過那些技術的源碼,但是你應該大概知道那些技術的基本原理,核心組成部分,基本架構個構成,然後參照一些開源技術把一個系統設計出來的思路說一下就好了。

思路

  • 首先MQ得支持可伸縮性,那就需要快速擴容,就可以增加吞吐量和容量,可以設計一個分佈式的系統,參考kafka的設計理念,broker - > topic -> partition,每個partition放一臺機器,那就存一部分數據,如果現在資源不夠了,可以給topic增加partition,然後做數據遷移,增加機器,不就可以存放更多的數據,提高更高的吞吐量。
  • 其次得考慮一下這個MQ的數據要不要落地磁盤?也就是需不需要保證消息持久化,因爲這樣可以保證數據的不丟失,那落地盤的時候怎麼落?順序寫,這樣沒有磁盤隨機讀寫的尋址開銷,磁盤順序讀的性能是很高的,這就是kafka的思路。
  • 其次需要考慮MQ的可用性?這個可以具體到我們上面提到的消息隊列保證高可用,提出了多副本 ,leader 和follower模式,當一個leader宕機的時候,馬上選取一個follower作爲新的leader對外提供服務。
  • 需不需要支持數據0丟失?可以參考kafka零丟失方案

其實一個MQ肯定是很複雜的,問這個問題其實是一個開放性問題,主要是想看看有沒有從架構的角度整體構思和設計的思維以及能力

消息隊列相關問題總結

一般而言,如果一個面試官水平還不錯,會沿着從淺入深挖一個點,然後按着這個思路一直問下去,除了這裏的七大問題之後,甚至還能挑着你熟悉的一個MQ一直問到源碼級別,還可能結合項目來仔細問,先講講具體的業務細節,然後將業務跟這些MQ的問題場景結合起來,看看你的每個細節是如何處理和實現的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章