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