你懂RocketMQ 的架構原理嗎?

王子發表於2020-09-02

 

前言

前面我們跟大家聊了聊什麼是訊息中介軟體,以及哪些場景使用哪些訊息中介軟體更加合適。

我們瞭解到RocketMQ是java語言開發的,我們能更深入的閱讀原始碼瞭解它的底層原理,而且它具有優秀的訊息中介軟體高階功能。再換個角度想,對於面試MQ來說,其實我們需要深入的瞭解一箇中介軟體來與面試官聊,其他的中介軟體瞭解基本原理就可以了(後文會講解)。

所以接下來我們就以RocketMQ為敲門磚,一點一點了解MQ的奧祕。

 

今天我們來聊一聊RocketMQ 的架構原理

 

RocketMQ是如何承受高併發的呢?

先聊一聊RocketMQ是怎麼實現高併發的呢,我們先從它的單機模式說起。

之前我們說過,單機的RocketMQ可以承受十萬多的併發,那麼這個時候如果業務上突然出現了幾十萬的併發量,這時候如何處理呢。

沒關係,RocketMQ是支援叢集化部署的,部署多臺機器,每臺機器承受十萬的併發不就可以了嗎。

 

其實這就是RocketMQ承受高併發的原理,當然,關於它是如何將流量分配到叢集的每臺機器上,這個問題以後會單獨講解,今天主要聊一聊總體的架構原理。

 

RocketMQ是如何儲存大量訊息資料的呢?

現在我們來看看,RocketMQ是如何持久化資料的。MQ收到大量訊息後,這些訊息是不能實時消費掉的,所以就會存在訊息的積壓,同時為了保證訊息不丟失,所以持久化是很必要的。

而對於海量的訊息,單獨一臺機器是儲存不下的。退一步來講,就算能夠儲存的下,一旦這臺機器壞掉,資料就丟失了,無法保證訊息的可靠性。

其實對於訊息資料的持久化,和高併發的解決方案是類似的,看下圖:

 

 

假設一共有一萬條訊息要傳送給MQ,分散到10臺機器,可能每臺機器就會收到1000條左右的訊息,這時候MQ會把傳送到自己機器的訊息儲存到自己的磁碟裡,其實就是資料的分散式儲存。

所謂分散式儲存就是把資料分散到多臺機器儲存,可以通過擴充套件機器儲存海量資料。

 

如果RocketMQ掛掉了怎麼辦?

在討論這個問題之前,我們先引入一個新的概念,Broker。

Broker是RocketMQ的核心模組,負責接收並儲存訊息,同時提供Push/Pull介面來將訊息傳送給consumer。Consumer可選擇從Master或者Slave讀取資料。多個主/從組成Broker叢集,叢集內的Master節點之間不做資料互動。Broker同時提供訊息查詢的功能,可以通過MessageID和messageKey來查詢訊息。Borker會將自己的topic配置資訊實時同步到NameServer。
 
一定有小夥伴會問,上邊又出現了一個新名詞NameServer,那什麼是NameServer呢?不要急,下一章節會有介紹。
 
至於Producer(生產者)、Consumer(消費者),相信小夥伴們已經瞭解了,就是訊息的生產服務和消費服務,不多做介紹。
 
瞭解了這些概念後我們再重新討論我們的主題,RocketMQ掛掉了怎麼辦
 
Rocket對此的解決方案是Broker主從架構以及多副本策略,上邊介紹Broker的時候我們也說了,它是有主從的,我們看下圖:
 

 

 Master Broker收到訊息後會同步給Slave Broker,這樣Slave Broker就有了一份副本資料,

這樣,當RocketMQ掛掉了一個Broker,還有一份副本Broker可以繼續提供服務,這就保證了系統的高可用性。

 

如何知道我該訪問哪個Broker?
 
上邊我們發現,Broker可以部署一個龐大的叢集,還可以部署多個Slave做副本實現高可用,那麼對於要呼叫MQ服務的系統來講,是如何知道它應該訪問那個Broker的呢?
 
這時候就要談談NameServer了。
 
NameServer可以看作是RocketMQ的註冊中心,它也是可以獨立部署叢集的,它管理兩部分資料:叢集的Topic-Queue的路由配置;Broker的實時配置資訊。其它模組通過NameServer提供的介面獲取最新的topic配置和路由資訊。
 
玩過Spring Cloud分散式系統的小夥伴們是不是覺得它很熟悉,沒錯它就是註冊中心,功能類似於Euraka,每個Broker都會向它註冊自己的資訊,我們看下圖:

 

 對於系統而言(無論是生產者還是消費者),要呼叫MQ服務,首先會去NameServer中獲取路由資訊,也會知道系統中有哪些Broker正在提供服務,從而確定自己應該訪問哪臺機器上的Broker。

RoketMQ的基本架構原理就是這樣了,當然這只是個總體的架構,很多細節的東西都可以去深入探索,歡迎小夥伴們關注後續的文章,和HUC王子一起細嚼慢嚥,探索訊息中介軟體的樂趣吧。

 

往期文章推薦:

什麼是訊息中介軟體?主要作用是什麼?

常見的訊息中介軟體有哪些?你們是怎麼進行技術選型的?

我的部落格即將同步至騰訊雲+社群,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=2dl7u9oadykgw

 

相關文章