了解中间件与消息中间件
該筆記大部分搬運(yùn)B站學(xué)相伴的RabbitMQ,順便把圖文合并記錄,便于回顧,僅用于學(xué)習(xí)!
視頻地址:https://www.bilibili.com/video/BV1dX4y1V73G 作者真的非常好,別白嫖,記得三連
如有侵權(quán),請(qǐng)聯(lián)系刪除!
1. 什么是中間件
-
我國(guó)企業(yè)從20世紀(jì)80年代開(kāi)始就逐漸進(jìn)行信息化建設(shè),由于方法和體系的不成熟,以及企業(yè)業(yè)務(wù)和市場(chǎng)需求的不斷變化,一個(gè)企業(yè)可能同時(shí)運(yùn)行著多個(gè)不同的業(yè)務(wù)系統(tǒng),這些系統(tǒng)可能基于不同的操作系統(tǒng)、不同的數(shù)據(jù)庫(kù)、異構(gòu)的網(wǎng)絡(luò)環(huán)境。現(xiàn)在的問(wèn)題是,如何把這些信息系統(tǒng)結(jié)合成一個(gè)有機(jī)地協(xié)同工作的整體,真正實(shí)現(xiàn)企業(yè)跨平臺(tái)、分布式應(yīng)用。中間件便是解決之道,它用自己的復(fù)雜換取了企業(yè)應(yīng)用的簡(jiǎn)單。
-
中間件(Middleware)是處于操作系統(tǒng)和應(yīng)用程序之間的軟件,也有人認(rèn)為它應(yīng)該屬于操作系統(tǒng)中的一部分。人們?cè)谑褂弥虚g件時(shí),往往是一組中間件集成在一起,構(gòu)成一個(gè)平臺(tái)(包括開(kāi)發(fā)平臺(tái)和運(yùn)行平臺(tái)),但在這組中間件中必須要有一個(gè)通信中間件,即中間件=平臺(tái)+通信,這個(gè)定義也限定了只有用于分布式系統(tǒng)中才能稱為中間件,同時(shí)還可以把它與支撐軟件和使用軟件區(qū)分開(kāi)來(lái)。
舉例:
2. 為什么需要使用消息中間件
具體地說(shuō),中間件屏蔽了底層操作系統(tǒng)的復(fù)雜性,使程序開(kāi)發(fā)人員面對(duì)一個(gè)簡(jiǎn)單而統(tǒng)一的開(kāi)發(fā)環(huán)境,減少程序設(shè)計(jì)的復(fù)雜性,將注意力集中在自己的業(yè)務(wù)上,不必再為程序在不同系統(tǒng)軟件上的移植而重復(fù)工作,從而大大減少了技術(shù)上的負(fù)擔(dān),中間件帶給應(yīng)用系統(tǒng)的,不只是開(kāi)發(fā)的簡(jiǎn)便、開(kāi)發(fā)周期的縮短,也減少了系統(tǒng)的維護(hù)、運(yùn)行和管理的工作量,還減少了計(jì)算機(jī)總體費(fèi)用的投入。
為什么要使用MQ消息中間件?它解決了什么問(wèn)題?
https://www.jianshu.com/p/2820561158c4
3. 中間件特點(diǎn)
為解決分布異構(gòu)問(wèn)題,人們提出了中間件(middleware)的概念。中間件是位于平臺(tái)(硬件和操作系統(tǒng))和應(yīng)用之間的通用服務(wù),如下圖所示,這些服務(wù)具有標(biāo)準(zhǔn)的程序接口和協(xié)議。針對(duì)不同的操作系統(tǒng)和硬件平臺(tái),它們可以有符合接口和協(xié)議規(guī)范的多種實(shí)現(xiàn)。
也許很難給中間件一個(gè)嚴(yán)格的定義,但中間件應(yīng)具有如下的一些特點(diǎn):
(1)滿足大量應(yīng)用的需要
(2)運(yùn)行于多種硬件和OS平臺(tái)
(3)支持分布計(jì)算,提供跨網(wǎng)絡(luò)、硬件和OS平臺(tái)的透明性的應(yīng)用或服務(wù)的交互
(4)支持標(biāo)準(zhǔn)的協(xié)議
(5)支持標(biāo)準(zhǔn)的接口
由于標(biāo)準(zhǔn)接口對(duì)于可移植性和標(biāo)準(zhǔn)協(xié)議對(duì)于互操作性的重要性,中間件已成為許多標(biāo)準(zhǔn)化工作的主要部分。對(duì)于應(yīng)用軟件開(kāi)發(fā),中間件遠(yuǎn)比操作系統(tǒng)和網(wǎng)絡(luò)服務(wù)更為重要,中間件提供的程序接口定義了一個(gè)相對(duì)穩(wěn)定的高層應(yīng)用環(huán)境,不管底層的計(jì)算機(jī)硬件和系統(tǒng)軟件怎樣更新?lián)Q代,只要將中間件升級(jí)更新,并保持中間件對(duì)外的接口定義不變,應(yīng)用軟件幾乎不需任何修改,從而保護(hù)了企業(yè)在應(yīng)用軟件開(kāi)發(fā)和維護(hù)中的重大投資。
簡(jiǎn)單說(shuō):中間件有個(gè)很大的特點(diǎn),是脫離于具體設(shè)計(jì)目標(biāo),而具備提供普遍獨(dú)立功能需求的模塊。這使得中間件一定是可替換的。如果一個(gè)系統(tǒng)設(shè)計(jì)中,中間件時(shí)不可替代的,不是架構(gòu)、框架設(shè)計(jì)有問(wèn)題,那么就是這個(gè)中間件,在別處可能是個(gè)中間件,在這個(gè)系統(tǒng)內(nèi)是引擎。
4. 在項(xiàng)目中什么時(shí)候使用中間件技術(shù)
在項(xiàng)目的架構(gòu)和重構(gòu)中,使用任何技術(shù)和架構(gòu)的改變我們都需要謹(jǐn)慎斟酌和思考,因?yàn)槿魏渭夹g(shù)的融入和變化都可能人員,技術(shù),和成本的增加,中間件的技術(shù)一般現(xiàn)在一些互聯(lián)網(wǎng)公司或者項(xiàng)目中使用比較多,如果你僅僅還只是一個(gè)初創(chuàng)公司建議還是使用單體架構(gòu),最多加個(gè)緩存中間件即可,不要盲目追求新或者所謂的高性能,而追求的背后一定是業(yè)務(wù)的驅(qū)動(dòng)和項(xiàng)目的驅(qū)動(dòng),因?yàn)橐坏┳非缶鸵馕吨愕膶W(xué)習(xí)成本,公司的人員結(jié)構(gòu)以及服務(wù)器成本,維護(hù)和運(yùn)維的成本都會(huì)增加,所以需要謹(jǐn)慎選擇和考慮。
但是作為一個(gè)開(kāi)放人員,一定要有學(xué)習(xí)中間件技術(shù)的能力和思維,否則很容易當(dāng)項(xiàng)目發(fā)展到一個(gè)階段在去掌握估計(jì)或者在面試中提及,就會(huì)給自己帶來(lái)不小的困擾,在當(dāng)今這個(gè)時(shí)代這些技術(shù)也并不是什么新鮮的東西,如果去掌握和挖掘最關(guān)鍵的還是自己花時(shí)間和花精力去探討和研究。
5. 中間件技術(shù)及架構(gòu)的概述
知識(shí)圖譜
6. 什么是消息中間件
6.1 單體架構(gòu)
在實(shí)際的項(xiàng)目中,大部分的企業(yè)項(xiàng)目開(kāi)發(fā)中,在早起都采用的是單體的架構(gòu)模式
在企業(yè)開(kāi)發(fā)當(dāng)中,大部分的初期架構(gòu)都采用的是單體架構(gòu)的模式進(jìn)行架構(gòu),而這種架構(gòu)的典型的特點(diǎn):就是把所有的業(yè)務(wù)和模塊,源代碼,靜態(tài)資源文件等都放在一個(gè)工程中,如果其中的一個(gè)模塊升級(jí)或者迭代發(fā)生一個(gè)很小的變動(dòng)都會(huì)重新編譯和重新部署項(xiàng)目。這種這狗存在的問(wèn)題是:
這樣就有后續(xù)的分布式架構(gòu)系統(tǒng)。 如下:
6.2 分布式架構(gòu)
何謂分布式系統(tǒng):
通俗一點(diǎn):就是一個(gè)請(qǐng)求由服務(wù)器端的多個(gè)服務(wù)(服務(wù)或者系統(tǒng))協(xié)同處理完成
和單體架構(gòu)不同的是,單體架構(gòu)是一個(gè)請(qǐng)求發(fā)起 jvm調(diào)度線程(確切的是 tomcat線程池)分配線程 Thread來(lái)處理請(qǐng)求直到釋放,而分布式系統(tǒng)是:一個(gè)請(qǐng)求時(shí)由多個(gè)系統(tǒng)共同來(lái)協(xié)同完成,jvm和環(huán)境都可能是獨(dú)立。如果生活中的比喻的話,單體架構(gòu)就像建設(shè)一個(gè)小房子很快就能夠搞定,如果你要建設(shè)一個(gè)鳥(niǎo)巢或者大型的建筑,你就必須是各個(gè)環(huán)節(jié)的協(xié)同和分布,這樣目的也是項(xiàng)目發(fā)展到后期的時(shí)候要去部署和思考的問(wèn)題。我們也不難看出來(lái):分布式架構(gòu)系統(tǒng)存在的特點(diǎn)和問(wèn)題如下:
存在問(wèn)題:
好處:
6.3 基于消息中間件的分布式系統(tǒng)的架構(gòu)
沒(méi)有加一層解決不了的事情!
從上圖中可以看出來(lái),消息中間件的是
7. 消息中間件應(yīng)用的場(chǎng)景
比如你有一個(gè)數(shù)據(jù)要進(jìn)行遷移或者請(qǐng)求并發(fā)過(guò)多的時(shí)候,比如你有10 W的并發(fā)請(qǐng)求下訂單,我們可以在這些訂單入庫(kù)之前,我們可以把訂單請(qǐng)求堆積到消息隊(duì)列中,讓它穩(wěn)健可靠的入庫(kù)和執(zhí)行
8. 常見(jiàn)的消息中間件
ActiveMQ、RabbitMQ、Kafka、RocketMQ等
9. 消息中間件的本質(zhì)及設(shè)計(jì)
它是一種接受數(shù)據(jù)、接受請(qǐng)求、存儲(chǔ)數(shù)據(jù)、發(fā)送數(shù)據(jù)等功能的技術(shù)服務(wù)
MQ消息隊(duì)列:負(fù)責(zé)數(shù)據(jù)的傳接受,存儲(chǔ)和傳遞,所以性能要高于普通服務(wù)和技術(shù)
誰(shuí)來(lái)生產(chǎn)消息,存儲(chǔ)消息和消費(fèi)消息呢?
10. 消息中間件的核心組成部分
11. 小結(jié)
其實(shí)不論選擇單體架構(gòu)還是分布式架構(gòu)都是項(xiàng)目開(kāi)發(fā)的一個(gè)階段,在什么階段選擇合適的架構(gòu)方式,而不能盲目追求,最后造成的后果和問(wèn)題都需要自己買單。但作為一個(gè)開(kāi)發(fā)人員學(xué)習(xí)和探討新的技術(shù)使我們每個(gè)程序開(kāi)發(fā)者都應(yīng)該去保持和思考的問(wèn)題。當(dāng)我們沒(méi)辦法去改變社會(huì)和世界的時(shí)候,我們?yōu)榱松詈蜕婺蔷捅仨氁掀髽I(yè)和市場(chǎng)的需求,發(fā)揮你的價(jià)值和所學(xué)的才能,創(chuàng)造價(jià)值和實(shí)現(xiàn)自我。
總結(jié)
以上是生活随笔為你收集整理的了解中间件与消息中间件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: sqldeveloper修改jdk配置
- 下一篇: 讯闪