消息中間件介紹

消息中間件(message oriented middleware)是指支持與保障分佈式應用程序之間同步/異步收發消息的中間件。消息是分佈式應用之間進行數據交換的基本信息單位,分佈式應用程序 之間的通訊接口由消息中間件提供。其中,異步方式指消息發送方在發送消息時沒必要知道接收方的狀態,更無需等待接收方的回覆,而接收方在收到消息時也沒必要知 道發送方的目前狀態,更無需進行同步的消息處理,它們之間的鏈接徹底是鬆耦合的,通訊是非阻塞的,這種異步通訊方式是由消息中間件中的消息隊列及其服務機 制保障的。通常地,實時性要求較高的業務採用同步方式處理,實時性要求不高的業務採用異步方式進行處理。消息中間件已普遍應用於各種分佈式應用系統中。

消息起源於分佈式操做系統進程通訊模型和分佈式應用互操做技術的研究。1980年代,隨着開放系統互連參考模型OSI的興起,做爲開放系統網絡模式中底層 的包交換通訊範型的一種天然擴充,分佈式系統消息機制的研究和應用獲得極大的發展,而統一處理消息發送、接收和管理的消息中間件的概念和平臺開始出現。 1980年代後期,IBM公司推出了消息中間件產品MQSeries,成爲消息中間件成熟的一個標誌。

進入1990年代,因爲應用需求的推進,消息中間件技術獲得極大的發展,並在世界範圍內涌現出大量的消息中間件產品。爲了有助於消息中間件技術的傳播,由 衆多消息中間件廠商、用戶和諮詢機構組成了消息中間件協會(MOMA),MOMA是一個非盈利機構,旨在推進消息技術在跨平臺、跨層次的分佈計算中的普遍 應用。國際對象管理組織(Object Management Group,簡稱OMG)制定了公共對象服務標準(Common Object Service Specifiaction,簡稱COSS),其中對消息服務進行了規範。

進入21世紀,消息中間件技術獲得進一步的發展。在規範化方面,因爲J2EE技術的普遍應用,J2EE的消息服務規範JMS(Java Message Service)獲得消息中間件廠商的普遍採納,並逐漸成爲消息中間件的事實標準,與此同時,Web服務技術的興起,與Web服務相關的標準體系獲得發展,在消息方面,W3C組織定義了Web服務的可靠消息傳送規範(WS-ReliableMessaging)。

目前,企業信息系統開始從部門級應用向企業級、跨企業集成的方向轉變,在這一過程當中,傳統的消息中間件體系架構也暴露出它的侷限性。傳統的消息中間件一般 採用點對點的消息傳輸結構,即在發送方對消息進行打包時須要顯明地標註接收方的地址。所以,儘管消息的接收方和發送方是鬆耦合鏈接的,相互通訊沒必要保持同 步,但因爲在消息中必須綁定接收方地址,致使在廣域、大型應用系統中使用消息中間件不夠靈活,系統擴展比較困難。爲了增長消息發送方和接收方之間對地址的 透明性,1990年代末期之後,消息中間件開始向發佈/訂閱架構轉變,併成爲企業應用集成中間件的一種核心機制,而基於發佈/訂閱架構的消息中間件一般稱 爲發佈/訂閱消息中間件(Publish/Subscribe Middleware,簡稱P/S MOM)或消息代理(Message Broker),以與傳統的消息中間件相區別。目前比較典型的消息中間件包括IBM WebSphere MQSeries、Tibco TIB/Rendezvous和Microsoft MSMQ等。

傳統的點對點消息中間件一般由消息隊列服務、消息傳遞服務、消息隊列和消息應用程序接口API組成,其典型的結構如圖6.1所示。html

 

消息中間件的基本工做原理爲:在消息發送方,消息發送者調用發送消息的API函數,將須要發送的消息經消息隊列服務存儲到發送消息隊列中;經過雙方消息傳 遞服務之間的交互,經消息隊列服務將須要發送的消息從發送隊列取出,並送到接收方;接收方再經它的消息隊列服務將接收到的消息存放到它的接收消息隊列中; 在消息接收方,消息接收者調用接收消息的API函數,一樣通過消息隊列服務,將須要的消息從接收隊列中取出,並進行處理。消息在發送或接收成功後,消息隊 列服務將對相應的消息隊列進行管理。

在基於消息代理的分佈式應用系統中,消息的發送方稱爲出版者,消息的接收方稱爲訂閱者,不一樣的消息經過不一樣的主題進行區分。出版者向消息代理出版其餘應用 系統感興趣的消息,而訂閱者從消息代理接收本身感興趣的消息,出版者和訂閱者之間經過消息代理進行關聯。消息代理的基本結構如圖6.2所示。

消息中間件的比較-轉載


消息代理具備很好的靈活性和可擴展性,並支持主動、實時的信息傳遞方式,當消息發佈者有動態更新的數據產生時,消息代理會經過事件的發佈主動通知消息訂閱 者存在新的數據可用,而無需消息訂閱者進行頻度沒法肯定的查詢。消息代理適合於具備實時性、異步性、異構性、動態性和鬆耦合的應用需求。

消息代理的工做原理爲:消息發佈者和訂閱者分別同消息代理進行通訊。消息發佈者將包含主題的消息發佈到消息代理;消息訂閱者向消息代理訂閱本身感興趣的主 題。消息代理對雙方的主題進行匹配後,不斷將訂閱者感興趣的消息推(Push)給訂閱者,直到訂閱者向消息代理髮出取消訂閱的消息。

消息代理實現了發佈者和訂閱者在時間、空間和流程三個方面的解耦:
數據庫

  • 時間解耦—-發佈方和訂閱方無需同時在線就可以進行消息傳輸,消息中間件經過存儲轉發提供了這種異步傳輸的能力;
  • 空間解耦——發佈方和訂閱方都無需知道對方的物理地址、端口,甚至無需知道對方的邏輯名字和個數;
  • 流程解耦——發佈方和訂閱方在發送和接收數據時並不阻塞各自的控制流程。


從消息中間件的基本功能來看,不管是點對點消息中間件仍是消息代理,其體系結構都是很是清晰簡單的。但因爲分佈式應用及其環境的多樣性和複雜性,致使了消息中間件的複雜性。

消息中間件的複雜性主要體如今下面幾個方面:
緩存

  • 消息中間件須要爲分佈在企業各個物理服務器上的應用系統提供消息服務,而這些服務器可能採用不一樣硬件平臺,相互之間可能經過不一樣的網絡協議進行鏈接,這就要求消息中間件可以跨越不一樣的網絡和硬件平臺;
  • 分佈式應用可能採用不一樣開發語言或工具實現,所以須要消息中間件爲這些應用程序提供各種應用程序接口;
  • 因爲企業網絡結構的複雜性和分佈式應用傳輸消息的多樣性要求,在分佈式應用之間傳遞的消息每每須要在消息中間件之間進行屢次傳輸才能到達接收方,所以要求消息中間件具備存儲轉發或消息路由的能力;
  • 對消息傳輸的安全性、事務性、時限等質量要求,均須要消息中間件系統進行相應的處理;
  • 爲了保證消息不會由於網絡或服務器等物理故障而在傳輸過程當中丟失,每每須要消息中間件具有消息的持久存儲能力。


消息的表示 消息一般由消息頭和消息體兩部分組成。消息頭用於描述消息發送者和接收者的地址或消息主題,以及消息的服務質量要求,例如,消息傳輸的時限、優先級、安全屬性等;消息體用於描述消息中具體攜帶的信息內容。目前多采用XML做爲消息表示的格式。

消息隊列 爲了有效控制消息收發過程而在消息中間件中內置的存儲消息的數據結構。因爲消息多采用先進先出的控制方式,所以,一般採用隊列做爲消息的存儲結構。從消息 的內容來看,消息能夠分爲發送消息隊列、接收消息隊列、死信隊列(沒法投遞或過時的消息構成隊列)。消息隊列也能夠按消息發送的質量要求進一步細分,如將 優先級高的隊列組織成一個優先隊列,以便於處理。從隊列存儲介質來看,消息隊列通常分爲持久消息隊列、內存隊列和高速緩存隊列。

安全

  • 持久消息隊列:基於數據庫或文件系統,提供消息持久存儲功能,同時又具備最小的內存開銷,適合於消息須要可靠傳輸的應用環境。
  • 內存隊列:基於內存的消息隊列。不提供消息持久功能,徹底基於內存來進行消息的緩存和分發。適合對性能要求很是苛刻,可是消息無需可靠持  久的應用環境。
  • 高速緩存隊列:基於數據庫和內存Cache的持久。提供可靠持久功能,同時又使用內存做爲Cache,所以具備最大的資源開銷,同時又具備很高的性能。適合於大部分應用場合。


消息路由 消息路由借用了IP層的路由和路由器中的路由的概念,但不一樣之處在於:消息路由屬於應用層的概念。它是爲了保證應用之間的消息交換處於可控的狀態而設計的 軟件功能模塊,其機制是按照消息路由規則將消息從發送者傳送到目標應用,並提供消息流量控制功能。所以,消息路由有時也稱爲「流量控制」、「基於內容的路 由」、「智能路由」。

消息QoS機制 服務質量(Quality of Service,簡稱QoS)是指與用戶對服務滿意程度相關的各類性能效果。消息QoS機制是指消息中間件提供的消息傳送過程當中在性能、安全、可靠性等方面的各類非功能型需求約束。消息中間件一般具備如下幾種Qos特性:

服務器

  • 可靠性 消息中間件的可靠性分爲消息可靠性和鏈接可靠性,消息可靠性控制消息失效時的處理方式,鏈接可靠性控制鏈接失敗時的系統行爲。
  • 事務性 爲了使應用和消息中間件之間的消息傳遞在一個邏輯相關的序列層次上獲得控制而不是僅僅只是控制單個的傳遞過程,消息中間件須要將這些邏輯相關的序列組成一個事務,來保證整個消息傳遞過程的ACID特性。
  • 安全性 提供消息的受權、認證、加密傳輸等手段,支持安全的消息傳輸。
  • 優先級 優先級用來描述消息傳遞的優先程度。考慮到具體的網絡傳輸狀況,消息中間件沒法保證每一個消息都能按時傳遞給接收者,因此,消息發送者經過指定消息的緊急程度,使消息按照優先級的順序傳遞給消息接收者。
  • 時間約束 時間約束是指消息只在特色的時期內有效。它包括消息的開始時間、有效時間和最遲交付時間,開始時間是指消息的起始傳輸時間,有效時間是指消息的有效期,最遲交付時間是指消息最晚到達接收者的時間,若是消息過了這個時間仍未到達,則被廢棄。
  • 隊列管理 隊列管理主要從消息發送的空間約束上進行控制,主要包括:隊列長度、接收消息的最大數目、消息的最大長度和丟棄策略等。隊列長度是內存中用來存儲消息的 Cache的大小,接收消息的最大數目控制消息接收者接收的消息的最大數目,丟棄策略是指當消息緩存溢出時廢棄消息的順序,常見的策略包括:FIFO、 LIFO、優先級和任意順序等。


代理化、服務化、流程化、平臺化是目前消息中間件發展的主要趨勢。代理化是指消息中間件體系架構逐漸向消息代理架構靠攏;服務化是指消息中間件在應用高端 支持面向服務的體系架構;流程化是指消息中間件在應用形態上逐漸與業務流程管理機制相融合,成爲企業應用集成中間件的一個核心組成部件;而平臺化是指圍繞 消息處理,各類應用開發和管理工具與消息中間件有機結合在一塊兒,爲分佈式應用的消息處理提供一個有機的統一平臺。
網絡

相關文章
相關標籤/搜索