中間件專題——分布式消息中間件的設(shè)計(jì)

本文章是在網(wǎng)易云課堂的課程學(xué)習(xí)中編寫(xiě),部分圖片從網(wǎng)易云課堂ppt引用

導(dǎo)語(yǔ):學(xué)習(xí)中間件,需要知道中間件的應(yīng)用場(chǎng)景,中間件的本質(zhì),可以用來(lái)做什么,為什么用,核心點(diǎn)是什么,架構(gòu)中的注意事項(xiàng)有哪些。

重點(diǎn)
分布式消息中間件:kafka、RabbitMQ
負(fù)載均衡中間件:Nginx
緩存中間件:redis
數(shù)據(jù)庫(kù)中間件:mycat

難點(diǎn):中間件在架構(gòu)的作用、底層的實(shí)現(xiàn)原理(用JAVA的技術(shù)去理解它)
另外,要考慮中間件可能出現(xiàn)的各種異常,中間件是如何解決高性能、高可用、高可靠問(wèn)題的。

一、各種架構(gòu)介紹

單體架構(gòu):升級(jí)一部分功能會(huì)影響整個(gè)系統(tǒng),耦合度太高,且維護(hù)成本高

image.png

分布式架構(gòu):

  1. 按照功能或技術(shù)劃分成多個(gè)子系統(tǒng),相互獨(dú)立,獨(dú)立部署
  2. 多系統(tǒng)協(xié)同處理一個(gè)請(qǐng)求
  3. 系統(tǒng)之間也可能存在相互調(diào)用,使用RPC(遠(yuǎn)程過(guò)程調(diào)用)
image.png

基于消息中間件的分布式系統(tǒng)架構(gòu):系統(tǒng)間RPC調(diào)用耦合度較強(qiáng),于是引入消息中間件,解決系統(tǒng)間的耦合。消息中間件用于系統(tǒng)之間的數(shù)據(jù)交換,臨時(shí)存儲(chǔ)一些消息、數(shù)據(jù),進(jìn)行異步處理,系統(tǒng)間沒(méi)有直接的關(guān)聯(lián),不需要接口調(diào)用

image.png

二、消息中間件的概念

什么是消息中間件
1、利用高效可靠的消息傳遞機(jī)制進(jìn)行平臺(tái)無(wú)關(guān)的數(shù)據(jù)交流;
2、并基于數(shù)據(jù)通信來(lái)進(jìn)行分布式系統(tǒng)的集成
3、通過(guò)提供消息傳遞和消息排隊(duì)模型,它可以在分布式環(huán)境下擴(kuò)展進(jìn)程間的通信
消息中間件的應(yīng)用場(chǎng)景:跨系統(tǒng)數(shù)據(jù)傳遞、高并發(fā)流量削峰、數(shù)據(jù)異步處理等
常用的消息中間件:ActiviMQ、RabbitMQ、Kafka、RocketMQ

三、消息中間件的核心設(shè)計(jì)

本質(zhì):一種具備接收請(qǐng)求、保存數(shù)據(jù)、發(fā)送數(shù)據(jù)等功能的網(wǎng)絡(luò)應(yīng)用
5大核心組成:協(xié)議、持久化機(jī)制、消息分發(fā)機(jī)制、高可用設(shè)計(jì)、高可靠設(shè)計(jì)

1、協(xié)議:

協(xié)議是計(jì)算機(jī)之間通信時(shí)共同遵從的一組約定,都遵守相同的約定,計(jì)算機(jī)之間才能相互交流。是對(duì)數(shù)據(jù)格式和計(jì)算機(jī)之間交換數(shù)據(jù)時(shí)必須遵守的規(guī)則的正式描述。

協(xié)議三要素

  1. 語(yǔ)法:即數(shù)據(jù)與控制信息的結(jié)構(gòu)或格式;
  2. 語(yǔ)義:即需要發(fā)出何種控制信息,完成何種動(dòng)作以及做出何種響應(yīng);
  3. 時(shí)序(同步):即事件實(shí)現(xiàn)順序的詳細(xì)說(shuō)明

Http協(xié)議三要素舉例:

  1. 語(yǔ)法:http規(guī)定了請(qǐng)求報(bào)文和響應(yīng)報(bào)文的具體格式。
  2. 語(yǔ)義:客戶端主動(dòng)發(fā)起的操作稱為請(qǐng)求;
  3. 時(shí)序:一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)響應(yīng)

消息中間件常用的協(xié)議:OpenWire、AMQP、MQTT、Kafka、OpenMessage
為什么消息中間件不直接使用http協(xié)議?
1、http請(qǐng)求格式較為復(fù)雜,請(qǐng)求時(shí)要傳輸很多數(shù)據(jù),請(qǐng)求頭、請(qǐng)求體、狀態(tài)碼等,不適合消息中間件,消息中間件要求高性能,盡量減少數(shù)據(jù)傳輸?shù)拇笮?br> 2、http大部分是短連接,不利于消息中間件的使用

--AMQP協(xié)議

AMQP (Advanced Message Queuing Protocol)是高級(jí)消息隊(duì)列協(xié)議04年JPMorgan Chase(摩根大通集團(tuán))聯(lián)合其他公司共同設(shè)計(jì)。
特性:事務(wù)支持、持久化支持,出生金融行業(yè),在可靠性消息處理上具備天然的優(yōu)勢(shì)。
使用:RabbitMQ、ActiveMQ

--MQTT協(xié)議

MQTT (Message Queuing Telemetry Transport)消息隊(duì)列遙測(cè)傳輸是IBM開(kāi)發(fā)的一個(gè)即時(shí)通訊協(xié)議,物聯(lián)網(wǎng)系統(tǒng)架構(gòu)中的重要組成部分。
特性:輕量、結(jié)構(gòu)簡(jiǎn)單、傳輸快、沒(méi)有事務(wù)支持、沒(méi)有持久化相關(guān)設(shè)計(jì)
應(yīng)用場(chǎng)景:適用于計(jì)算能力有限、低帶寬、網(wǎng)絡(luò)不穩(wěn)定的場(chǎng)景。
使用:RabbitMQ、ActiveMQ

--Open Message協(xié)議

OpenMessaging是近一兩年由阿里發(fā)起,與雅虎、滴滴出行、Streamlio等公司共同參與創(chuàng)立的分布式消息中間件、流處理領(lǐng)域的應(yīng)用開(kāi)發(fā)標(biāo)準(zhǔn)。是國(guó)內(nèi)首個(gè)在全球范圍內(nèi)發(fā)起的分布式消息領(lǐng)域國(guó)際標(biāo)準(zhǔn)
特性:結(jié)構(gòu)簡(jiǎn)單、解析快、有事務(wù)設(shè)計(jì)、有持久化設(shè)計(jì)
使用:Apache AocketMQ

--Kafka協(xié)議

Kafka協(xié)議是基于TCP的二進(jìn)制協(xié)議。消息內(nèi)部是通過(guò)長(zhǎng)度來(lái)分隔,由一些基本數(shù)據(jù)類型組成。最初是用于日志處理,沒(méi)有事務(wù)支持。
特性:結(jié)構(gòu)簡(jiǎn)單、解析快、無(wú)事務(wù)設(shè)計(jì)、有持久化設(shè)計(jì)
使用:kafka

2、持久化:

簡(jiǎn)單來(lái)說(shuō)就是將數(shù)據(jù)存入磁盤,而不是存在內(nèi)存中隨服務(wù)重啟而消失,使數(shù)據(jù)能夠永久保存叫做持久化。

image.png

常用持久化方式
image.png

3、消息分發(fā)

消費(fèi)者獲取消息有兩種模式:推送模式、消息分發(fā)
應(yīng)用消息分發(fā)策略的場(chǎng)景
要正確轉(zhuǎn)發(fā)到不同的系統(tǒng)

image.png

支付失敗,要有重發(fā)的機(jī)制
image.png

常用的消息中間件分發(fā)策略

image.png

4、高可用

高可用性是服務(wù)可用性,指產(chǎn)品在規(guī)定的條件和規(guī)定的時(shí)刻或時(shí)間區(qū)間內(nèi)處于可執(zhí)行規(guī)定功能狀態(tài)的能力。
當(dāng)業(yè)務(wù)量大時(shí),一臺(tái)消息中間件服務(wù)器可能無(wú)法滿足需求,所以需要消息中間件能夠集群部署,來(lái)達(dá)到高可用的目的。

Master-Slave主從共享數(shù)據(jù)的部署方式:主從讀取的是同一個(gè)數(shù)據(jù)源

image.png

Master-Slave主從同步部署方式:數(shù)據(jù)放在三臺(tái)服務(wù)器,解決負(fù)載均衡,三臺(tái)服務(wù)器可同時(shí)對(duì)外服務(wù)。但是插入或修改數(shù)據(jù)只在master服務(wù)進(jìn)行,再同步到其他兩臺(tái)服務(wù)器,會(huì)占用較大的帶寬

image.png

Broker-Cluster多主集群同步部署方式:三個(gè)服務(wù)都作為master服務(wù),數(shù)據(jù)放在三臺(tái)服務(wù)器,數(shù)據(jù)是一樣的。插入或修改數(shù)據(jù)在集群中的三個(gè)服務(wù)均可進(jìn)行,三個(gè)服務(wù)相互同步

image.png

Broker-Cluster多主集群轉(zhuǎn)發(fā)部署方式:數(shù)據(jù)存放在broker-1,broker-2只同步元數(shù)據(jù)(數(shù)據(jù)的描述,比如數(shù)據(jù)在哪里存放的、數(shù)據(jù)隊(duì)列是哪個(gè)),通過(guò)請(qǐng)求轉(zhuǎn)發(fā)或數(shù)據(jù)代理可訪問(wèn)到數(shù)據(jù),同步共享元數(shù)據(jù),開(kāi)銷較小。缺點(diǎn)是,broker-1掛了的話,數(shù)據(jù)就沒(méi)了。

image.png

Master-Slaver與Broker-Cluster結(jié)合:既實(shí)現(xiàn)負(fù)載均衡,又對(duì)數(shù)據(jù)進(jìn)行熱備份。既滿足集群,又滿足高可用。

image.png

5、高可靠:

高可靠性是指系統(tǒng)可以無(wú)故障地持續(xù)運(yùn)行。比如一個(gè)系統(tǒng)從來(lái)不崩潰、報(bào)錯(cuò),或者崩潰、報(bào)錯(cuò)的幾率較低,那就是高可靠。在高并發(fā)業(yè)務(wù)場(chǎng)景下,如果不能保證系統(tǒng)的高可靠,那造成的損失將會(huì)非常嚴(yán)重。
保證消息中間件的高可靠性,可以從以下幾方面考慮
1、消息傳輸可靠:通過(guò)協(xié)議來(lái)保證系統(tǒng)間數(shù)據(jù)解析的正確性。
2、消息存儲(chǔ)可靠:通過(guò)持久化來(lái)保證消息的存儲(chǔ)可靠性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,208評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,746評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,666評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,477評(píng)論 6 407
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,960評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,200評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,726評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,617評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,807評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,049評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,425評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,674評(píng)論 1 281
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,432評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,769評(píng)論 2 372

推薦閱讀更多精彩內(nèi)容