消息中间件Client模块划分
上圖是之間討論確定的系統(tǒng)架構(gòu)(后續(xù)內(nèi)容會(huì)按照這個(gè)架構(gòu)來敘述),其中:
客戶端包含Producer和Consumer兩大塊
客戶端需要和NameServer交互來獲取元數(shù)據(jù)
客戶端需要和Broker交互來讀寫消息
Client模塊劃分
1. 網(wǎng)絡(luò)模塊
第一個(gè)仍然是網(wǎng)絡(luò)模塊。Client需要獲取元數(shù)據(jù),需要讀寫消息,網(wǎng)絡(luò)模塊是必不可少的。 和Broker不同的是,Client的網(wǎng)絡(luò)模塊要簡(jiǎn)單一些。Broker需要向NameServer匯報(bào)數(shù)據(jù),同時(shí)還要處理來自Client的請(qǐng)求,而Client更多的只是發(fā)出請(qǐng)求:
-
向NameServer獲取元數(shù)據(jù)
-
向Broker寫入消息
-
從Broker獲取消息
2. 編解碼模塊
Client需要將消息寫到Broker,同時(shí)也需要從Broker獲取消息,這兩個(gè)過程會(huì)涉及到消息的編解碼。
3. 元數(shù)據(jù)相關(guān)
Client相關(guān)的元數(shù)據(jù)有Topic、消費(fèi)進(jìn)度、Group(之前介紹過的概念,可以看之前的文章),另外還需要感知其他的客戶端的存在(叫Member信息或者Client Instance信息吧),所以需要Member數(shù)據(jù)。那么元數(shù)據(jù)相關(guān)大概是以下組件:
-
TopicManager
-
PositionManager
-
GroupManager
-
MemberManager
4. 發(fā)送相關(guān)
Producer API
對(duì)于Client而言,很重要的一個(gè)模塊就是暴露出去的發(fā)送和消費(fèi)的API,這是使用方唯一能接觸到的地方(寫代碼時(shí),任何暴露出去的API已經(jīng)要謹(jǐn)慎謹(jǐn)慎再謹(jǐn)慎)。
對(duì)于發(fā)送的API,從不同的角度可以分為:
-
從發(fā)送方式上有同步發(fā)送和異步發(fā)送
-
從發(fā)送消息量上有單條發(fā)送和批量發(fā)送
路由模塊
對(duì)于發(fā)送而言,一條消息最終需要落到某一個(gè)確定的分區(qū)上。所以客戶端會(huì)包含一個(gè)路由模塊來根據(jù)消息的屬性和Topic的元信息來選擇分區(qū)。
5. 消費(fèi)相關(guān)
Consumer API
消費(fèi)相關(guān)的API會(huì)比發(fā)送的復(fù)雜一些,因?yàn)橄M(fèi)需要提供更多的模式。另外為了保證順序性、減少消息的重復(fù)等,消費(fèi)還需要引入租約等組件。租約和Consumer的各種模式已經(jīng)是比較細(xì)節(jié)的問題了,在設(shè)計(jì)階段在進(jìn)行介紹。
分區(qū)分配模塊
發(fā)送方需要選擇將消息寫入到哪個(gè)分區(qū),而消費(fèi)方需要決定自己消費(fèi)哪些分區(qū),所以對(duì)應(yīng)于發(fā)送方的路由模塊,消費(fèi)方會(huì)有分區(qū)分配的模塊。
緩存模塊
為了保證性能,Consumer從Broker獲取消息和使用方消費(fèi)消息是異步的,中間需要Buffer來緩存消息,所以Consumer相對(duì)于Producer會(huì)多一個(gè)緩存模塊。
除了以上模塊,還會(huì)有LifeCycle這樣生命周期相關(guān)的基礎(chǔ)模塊,這個(gè)也是上一篇在介紹Broker模塊時(shí)遺漏的。
總結(jié)以上內(nèi)容,Client包含的模塊大概如下:
?
結(jié)語(yǔ)
本篇主要是把Client的幾個(gè)模塊劃分出來,為之后的詳細(xì)設(shè)計(jì)做準(zhǔn)備。 下一篇會(huì)整理一下NameServer的模塊,然后大概會(huì)有一到兩篇的篇幅總結(jié)一些架構(gòu)、流程、數(shù)據(jù)流等。
往期內(nèi)容:
《什么是分布式消息中間件》
《消息中間件的一些概念》
《業(yè)務(wù)方對(duì)消息中間件的需求》
《消息中間件架構(gòu)討論》
《Broker模塊劃分》
歡迎關(guān)注此公眾號(hào),將堅(jiān)持不懈的寫MQ相關(guān)的技術(shù)文章,希望能和更多的朋友交流。
如果本文對(duì)您有幫助,點(diǎn)一下右下角的“推薦”總結(jié)
以上是生活随笔為你收集整理的消息中间件Client模块划分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 弱口令上传shell_emlog后台拿s
- 下一篇: 服务框架及服务治理组件——业界调研