一、什么是中間件?
1、百度百科
中間件是介于應(yīng)用系統(tǒng)和系統(tǒng)軟件之間的一類軟件,它使用系統(tǒng)軟件所提供的基礎(chǔ)服務(wù)(功能),銜接網(wǎng)絡(luò)上應(yīng)用系統(tǒng)的各個(gè)部分或不同的應(yīng)用,能夠達(dá)到資源共享、功能共享的目的。目前,它并沒(méi)有很嚴(yán)格的定義,但是普遍接受IDC的定義:中間件是一種獨(dú)立的系統(tǒng)軟件服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源,中間件位于客戶機(jī)服務(wù)器的操作系統(tǒng)之上,管理計(jì)算資源和網(wǎng)絡(luò)通信。
從這個(gè)意義上可以用一個(gè)等式來(lái)表示中間件:中間件=平臺(tái)+通信,這也就限定了只有用于分布式系統(tǒng)中才能叫中間件,同時(shí)也把它與支撐軟件和實(shí)用軟件區(qū)分開(kāi)來(lái)。
簡(jiǎn)而言之,中間件是基于TCP/IP協(xié)議,遵循一定規(guī)范的。
2、中間件的特性
互通性、跨平臺(tái)性、持久性、高可擴(kuò)展性。
背后遵循TCP/IP協(xié)議,但有時(shí)并不能滿足業(yè)務(wù)場(chǎng)景的需求,因此要在TCP/IP協(xié)議的基礎(chǔ)上構(gòu)建自己的協(xié)議,比如AMQP協(xié)議,AMQP協(xié)議是rabbitMq的默認(rèn)協(xié)議,包括在信息頭中增加mark,消息內(nèi)容標(biāo)簽、隊(duì)列名、交換機(jī)名、ip、連接對(duì)象內(nèi)存的一些信息。
3、中間件的作用
屏蔽操作系統(tǒng)的復(fù)雜性,屏蔽技術(shù)之間的局限性,使框架更加靈活。
4、什么時(shí)候使用中間件
選擇中間件的時(shí)候,一定是業(yè)務(wù)的驅(qū)使,項(xiàng)目的驅(qū)動(dòng),一定要思考到底要不要使用,不要盲目的選擇與跟從,如果使用不當(dāng),則會(huì)造成學(xué)習(xí)成本的浪費(fèi)、人員結(jié)構(gòu)的復(fù)雜化、維護(hù)和服務(wù)器成本的加劇。
MySQL其實(shí)就是一個(gè)應(yīng)用廣泛的中間件。
二、什么是協(xié)議
1、所謂協(xié)議
- 計(jì)算機(jī)底層操作系統(tǒng)和應(yīng)用程序通訊時(shí)共同遵守的一組規(guī)定,只有遵循共同的約定和規(guī)范,系統(tǒng)和底層操作系統(tǒng)之間才能相互交流。
- 和一般的網(wǎng)絡(luò)應(yīng)用程序的不同之處是,協(xié)議主要負(fù)責(zé)數(shù)據(jù)的接收和傳遞,所以性能比較高。
- 協(xié)議對(duì)數(shù)據(jù)格式和計(jì)算機(jī)之間交換數(shù)據(jù)都必須遵守規(guī)范。
2、網(wǎng)絡(luò)協(xié)議的三要素
- 語(yǔ)義
語(yǔ)義是解釋控制信息每個(gè)部分的意義。它規(guī)定了需要發(fā)出何種控制信息,以及完成的動(dòng)作與做出什么樣的響應(yīng)。
- 語(yǔ)法
語(yǔ)法是用戶數(shù)據(jù)與控制信息的結(jié)構(gòu)與格式,以及數(shù)據(jù)出現(xiàn)的順序。
- 時(shí)序
時(shí)序是對(duì)事件發(fā)生順序的詳細(xì)說(shuō)明。
3、為什么消息中間件不直接使用http協(xié)議?
- 因?yàn)閔ttp請(qǐng)求報(bào)文頭和響應(yīng)報(bào)文頭是比較復(fù)雜的,包含了cookie,數(shù)據(jù)的加密解密,狀態(tài)碼,響應(yīng)碼等附加的功能,但是對(duì)于一個(gè)消息而言,我們并不需要這么復(fù)雜,也沒(méi)有這個(gè)必要,因?yàn)閞abbitmq只是負(fù)責(zé)數(shù)據(jù)傳遞、存儲(chǔ)、分發(fā)就夠了,一定要追求高性能,盡量簡(jiǎn)潔、快速。
- http大部分都是短連接,在實(shí)際的交互過(guò)程中,一個(gè)請(qǐng)求到響應(yīng)很可能會(huì)被中斷,中斷以后也不會(huì)持久化,就會(huì)造成數(shù)據(jù)的丟失。這樣就不適合在消息中間件中使用,因?yàn)橄⒅虚g件是一個(gè)長(zhǎng)期的獲取信息的過(guò)程,如果出現(xiàn)問(wèn)題或故障,要進(jìn)行持久化,目的是為了保證消息和數(shù)據(jù)的高可靠和高可用。
4、AMQP協(xié)議
AMQP,即Advanced Message Queuing Protocol,一個(gè)提供統(tǒng)一消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)高級(jí)消息隊(duì)列協(xié)議,是應(yīng)用層協(xié)議的一個(gè)開(kāi)放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計(jì)?;诖藚f(xié)議的客戶端與消息中間件可傳遞消息,并不受客戶端/中間件不同產(chǎn)品,不同的開(kāi)發(fā)語(yǔ)言等條件的限制。
特性:
- 支持分布式事務(wù)
- 支持消息的持久化
- 高性能和高可靠的消息處理
三、消息隊(duì)列持久化
持久化,簡(jiǎn)單的說(shuō)就是將數(shù)據(jù)存入磁盤,而不是存在內(nèi)存中,不會(huì)因?yàn)榉?wù)器的重啟而消失,使護(hù)具能夠永久保存。
rabbitmq是以文件存儲(chǔ)的形式進(jìn)行持久化的。
四、消息的分發(fā)策略
rabbitmq支持發(fā)布訂閱、輪詢分發(fā)、公平分發(fā)、重發(fā)、消息拉取。
五、消息隊(duì)列高可用和高可靠
集群保證高可用;
持久化保證高可靠;