柚子快報激活碼778899分享:Rocketmq系統(tǒng)架構(gòu)
柚子快報激活碼778899分享:Rocketmq系統(tǒng)架構(gòu)
3、系統(tǒng)架構(gòu)
RocketMQ的系統(tǒng)架構(gòu)主要有路由注冊中?(NameServer)、消息存儲服務(wù)器(Broker)、消息客戶端(Client)組成。其中Client由?產(chǎn)者(Producer)和消費者(Consumer)組成。
3.1、路由注冊中?—Nameserver
NameServer是?個簡單的 Topic 路由注冊中?,?持 Topic、Broker 的動態(tài)注冊與發(fā)現(xiàn)。
主要包括兩個功能:
Broker管理:
NameServer 接受 Broker 集群的注冊信息并且保存下來作為路由信息的基本數(shù)據(jù)。然后提供?跳檢測機制,檢查 Broker 是否還存活;
路由信息管理:
每個 NameServer 將保存關(guān)于 Broker 集群的整個路由信息和?于客戶端查詢的隊列信息。Producer 和 Consumer 通過 NameServer 就可以知道整個 Broker 集群的路由信息,從?進?消息的投遞和消費。
NameServer 通常會有多個實例部署,各實例間相互不進?信息通訊。Broker 是向每?臺 NameServer 注冊??的路由信息,所以每?個 NameServer 實例上?都保存?份完整的路由信息。當(dāng)某個 NameServer 因某種原因下線了,客戶端仍然可以向其它 NameServer 獲取路由信息
某些異常場景下,NameServer未及時收到某個Broker的?跳信息,NameServer會將該Broker剔除出可?Broker列表。NameServer服務(wù)器內(nèi)設(shè)由?個定時任務(wù),默認(rèn)每間隔10s掃描?次Broker列表,對?每個Broker當(dāng)前最新的時間戳與當(dāng)前時間是否相差?于120s,若超過則判定該Broker失效。
3.2、消息存儲服務(wù)器—Broker
消息存儲服務(wù)器Broker主要是負(fù)責(zé)客戶端管理(Client Manager)、消息存儲服務(wù)(Store Service)、?可?實現(xiàn)(HA Service)、索引功能(Index Service)等。
Client Manager主要是實現(xiàn)接收和解析Client的請求以及管理Client,例如維護Consumer的訂閱信息等。Store Service?于將消息數(shù)據(jù)持久化到物理磁盤。HA Service主要是實現(xiàn)Master Broker和Slave Broker之間數(shù)據(jù)的同步,保證Master發(fā)?異常時,消息流轉(zhuǎn)功能的?可?性。Index Service是對Broker內(nèi)的消息數(shù)據(jù)實現(xiàn)了索引功能,可以根據(jù)特定的Message Key進?快速定位查詢。
Broker的主動發(fā)送?跳機制:Broker節(jié)點默認(rèn)每間隔30s向NameServer發(fā)送?次?跳數(shù)據(jù),NameServer會更新其Broker列表中對應(yīng)的路由信息以及時間戳。
3.3、消息客戶端—Client
Client也就是消息客戶端,包括Producer(?產(chǎn)者)和Consumer(消費者)。Producer和Consumer在某?時刻下只會連接?個Nameserver節(jié)點(不?定是同?個),只有在連接出現(xiàn)異常時才會向嘗試連接另外?個。
當(dāng)Topic路由信息發(fā)?變化時,NameServer不會主動推送給Client,導(dǎo)致客戶端?法被動感知Topic信息的動態(tài)變化,因此客戶端會每30s去NameServer拉取Topic最新的路由信息。
注意:Nameserver是在內(nèi)存中存儲Topic的路由信息,持久化Topic路由信息是在Broker中完成的。
3.4 、?作流程
1)啟動NameServer集群,啟動后開始監(jiān)聽端?,等待與Broker、Producer、Consumer建??連接;
2)啟動Broker集群,每個Broker主動發(fā)起請求,與NameServer集群內(nèi)所有節(jié)點建??連接,每隔30s發(fā)送?次?跳包數(shù)據(jù);
3)Producer啟動時,先跟NameServer集群中的某?個節(jié)點建??連接,并從中獲取當(dāng)前訂閱Topic的Queue與Broker的地址(IP+Port)之間的映射關(guān)系。若建?連接失敗,則會取輪詢下?個NameServer節(jié)點,直?成功建??連接。然后與對應(yīng)的Broker建??連接,推送消息數(shù)據(jù)。
Producer獲取到相關(guān)的路由信息后,會將其緩存到本地,隨后會每隔30s從NameServer拉取并更新?次。
4)Consumer同樣會跟某?個NameServer節(jié)點建??連接,獲取到當(dāng)前訂閱Topic的Queue與Broker的地址之間的映射關(guān)系。同樣的,若建?失敗,則會輪詢下?個NameServer節(jié)點?成功。隨后從對應(yīng)的Broker中拉取消息進?處理。
Consumer獲取相關(guān)的路由信息后,同樣會緩存到本地,會每隔30s從NameServer更新?次。但不同的是,Consumer會向Broker發(fā)送?跳,確保Broker的存活狀態(tài)。
柚子快報激活碼778899分享:Rocketmq系統(tǒng)架構(gòu)
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。