什么是中間件?


、什么是中間件?

1、百度百科

中間件是介於應用系統和系統軟件之間的一類軟件,它使用系統軟件所提供的基礎服務(功能),銜接網絡上應用系統的各個部分或不同的應用,能夠達到資源共享、功能共享的目的。目前,它並沒有很嚴格的定義,但是普遍接受IDC的定義:中間件是一種獨立的系統軟件服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源,中間件位於客戶機服務器的操作系統之上,管理計算資源和網絡通信。

從這個意義上可以用一個等式來表示中間件:中間件=平台+通信,這也就限定了只有用於分布式系統中才能叫中間件,同時也把它與支撐軟件和實用軟件區分開來。

簡而言之,中間件是基於TCP/IP協議,遵循一定規范的。

2、中間件的特性

互通性、跨平台性、持久性、高可擴展性。

背后遵循TCP/IP協議,但有時並不能滿足業務場景的需求,因此要在TCP/IP協議的基礎上構建自己的協議,比如AMQP協議,AMQP協議是rabbitMq的默認協議,包括在信息頭中增加mark,消息內容標簽、隊列名、交換機名、ip、連接對象內存的一些信息。

3、中間件的作用

屏蔽操作系統的復雜性,屏蔽技術之間的局限性,使框架更加靈活。

4、什么時候使用中間件

選擇中間件的時候,一定是業務的驅使,項目的驅動,一定要思考到底要不要使用,不要盲目的選擇與跟從,如果使用不當,則會造成學習成本的浪費、人員結構的復雜化、維護和服務器成本的加劇。

MySQL其實就是一個應用廣泛的中間件。

二、什么是協議

1、所謂協議

  1. 計算機底層操作系統和應用程序通訊時共同遵守的一組規定,只有遵循共同的約定和規范,系統和底層操作系統之間才能相互交流。
  2. 和一般的網絡應用程序的不同之處是,協議主要負責數據的接收和傳遞,所以性能比較高。
  3. 協議對數據格式和計算機之間交換數據都必須遵守規范。

2、網絡協議的三要素

  • 語義

語義是解釋控制信息每個部分的意義。它規定了需要發出何種控制信息,以及完成的動作與做出什么樣的響應。

  • 語法

語法是用戶數據與控制信息的結構與格式,以及數據出現的順序。

  • 時序

時序是對事件發生順序的詳細說明。

3、為什么消息中間件不直接使用http協議?

  • 因為http請求報文頭和響應報文頭是比較復雜的,包含了cookie,數據的加密解密,狀態碼,響應碼等附加的功能,但是對於一個消息而言,我們並不需要這么復雜,也沒有這個必要,因為rabbitmq只是負責數據傳遞、存儲、分發就夠了,一定要追求高性能,盡量簡潔、快速。
  • http大部分都是短連接,在實際的交互過程中,一個請求到響應很可能會被中斷,中斷以后也不會持久化,就會造成數據的丟失。這樣就不適合在消息中間件中使用,因為消息中間件是一個長期的獲取信息的過程,如果出現問題或故障,要進行持久化,目的是為了保證消息和數據的高可靠和高可用。

4、AMQP協議

AMQP,即Advanced Message Queuing Protocol,一個提供統一消息服務的應用層標准高級消息隊列協議,是應用層協議的一個開放標准,為面向消息的中間件設計。基於此協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件不同產品,不同的開發語言等條件的限制。

特性:

  1. 支持分布式事務
  2. 支持消息的持久化
  3. 高性能和高可靠的消息處理

三、消息隊列持久化

持久化,簡單的說就是將數據存入磁盤,而不是存在內存中,不會因為服務器的重啟而消失,使護具能夠永久保存。

rabbitmq是以文件存儲的形式進行持久化的。

四、消息的分發策略

rabbitmq支持發布訂閱、輪詢分發、公平分發、重發、消息拉取。

五、消息隊列高可用和高可靠

集群保證高可用;

持久化保證高可靠;

 

往期精彩內容:

Java知識體系總結

Spring框架總結

超詳細的springBoot學習筆記

常見數據結構與算法整理總結

Java設計模式:23種設計模式全面解析

Java面試題總結(附答案)

Linux知識體系總結

Redis知識體系總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM