標籤:style blog http java 使用 檔案
訊息中介軟體(message oriented middleware)是指支援與保障分布式應用程式之間同步/非同步收發訊息的中介軟體。訊息是分布式應用之間進行資料交換的基本資料單位,分布式應用程式 之間的通訊介面由訊息中介軟體提供。其中,非同步方式指訊息發送方在發送訊息時不必知道接收方的狀態,更無需等待接收方的回複,而接收方在收到訊息時也不必知 道發送方的目前狀態,更無需進行同步的訊息處理,它們之間的串連完全是松耦合的,通訊是非阻塞的,這種非同步通訊方式是由訊息中介軟體中的訊息佇列及其服務機 制保障的。一般地,即時性要求較高的業務採用同步方式處理,即時性要求不高的業務採用非同步方式進行處理。訊息中介軟體已廣泛應用於各類分布式應用系統中。
訊息起源於分布式作業系統進程通訊模型和分布式應用互操作技術的研究。1980年代,隨著開放系統互相連線模型參考模型OSI的興起,作為開放系統網路模式中底層的包交換通訊範型的一種自然擴充,分布式系統訊息機制的研究和應用得到極大的發展,而統一處理訊息發送、接收和管理的訊息中介軟體的概念和平台開始出現。1980年代後期,IBM公司推出了訊息中介軟體產品MQSeries,成為訊息中介軟體成熟的一個標誌。
進入1990年代,由於應用需求的推動,訊息中介軟體技術得到極大的發展,並在世界範圍內湧現出大量的訊息中介軟體產品。為了有助於訊息中介軟體技術的傳播,由眾多訊息中介軟體廠商、使用者和諮詢機構組成了訊息中介軟體協會(MOMA),MOMA是一個非盈利機構,旨在推動訊息技術在跨平台、跨層次的分布計算中的廣泛應用。國際對象管理組織(ObjectManagement Group,簡稱OMG)制定了公用物件服務標準(Common Object ServiceSpecifiaction,簡稱COSS),其中對Message Service進行了規範。
進入21世紀,訊息中介軟體技術得到進一步的發展。在正常化方面,由於J2EE技術的廣泛應用,J2EE的Message Service規範JMS(JavaMessageService)得到訊息中介軟體廠商的廣泛採納,並逐漸成為訊息中介軟體的事實標準,與此同時,Web服務技術的興起,與Web服務相關的標準體系得到發展,在訊息方面,W3C組織定義了Web服務的可靠訊息傳送規範(WS-ReliableMessaging)。
目前,公司資訊系統開始從部門級應用向企業級、跨企業整合的方向轉變,在這一過程中,傳統的訊息中介軟體體系架構也暴露出它的局限性。傳統的訊息中介軟體通常採用點對點的訊息傳輸結構,即在發送方對訊息進行打包時需要顯明地標註接收方的地址。因此,儘管訊息的接收方和發送方是松耦合串連的,相互連信不必保持同步,但由於在訊息中必須綁定接收方地址,導致在廣域、大型應用系統中使用訊息中介軟體不夠靈活,系統擴充比較困難。為了增加訊息發送方和接收方之間對地址的透明性,1990年代末期以後,訊息中介軟體開始向發布/訂閱架構轉變,並成為公司專屬應用程式整合中介軟體的一種核心機制,而基於發布/訂閱架構的訊息中介軟體通常稱為發布/訂閱訊息中介軟體(Publish/SubscribeMiddleware,簡稱P/S MOM)或訊息代理(MessageBroker),以與傳統的訊息中介軟體相區別。目前比較典型的訊息中介軟體包括IBM WebSphere MQSeries、TibcoTIB/Rendezvous和Microsoft MSMQ等。
傳統的點對點訊息中介軟體通常由訊息佇列服務、訊息傳遞服務、訊息佇列和訊息應用程式介面API組成,其典型的結構6.1所示。
訊息中介軟體的基本工作原理為:在訊息發送方,訊息寄件者調用發送訊息的API函數,將需要發送的訊息經訊息佇列服務儲存到發送訊息佇列中;通過雙方訊息傳 遞服務之間的互動,經訊息佇列服務將需要發送的訊息從發送隊列取出,並送到接收方;接收方再經它的訊息佇列服務將接收到的訊息存放到它的接收訊息佇列中; 在訊息接收方,訊息接收者調用接收訊息的API函數,同樣經過訊息佇列服務,將需要的訊息從接收隊列中取出,並進行處理。訊息在發送或接收成功後,訊息隊 列服務將對相應的訊息佇列進行管理。
在基於訊息代理的分布式應用系統中,訊息的發送方稱為出版者,訊息的接收方稱為訂閱者,不同的訊息通過不同的主題進行區分。出版者向訊息代理出版其他應用系統感興趣的訊息,而訂閱者從訊息代理接收自己感興趣的訊息,出版者和訂閱者之間通過訊息代理進行關聯。訊息代理的基本結構6.2所示。
訊息代理具有很好的靈活性和可擴充性,並支援主動、即時的資訊傳遞方式,當訊息發行者有動態更新的資料產生時,訊息代理會通過事件的發布主動通知訊息訂閱者存在新的資料可用,而無需訊息訂閱者進行頻度無法確定的查詢。訊息代理適合於具有即時性、非同步性、異構性、動態性和松耦合的應用需求。
訊息代理的工作原理為:訊息發行者和訂閱者分別同訊息代理進行通訊。訊息發行者將包含主題的訊息發布到訊息代理;訊息訂閱者向訊息代理訂閱自己感興趣的主題。訊息代理對雙方的主題進行匹配後,不斷將訂閱者感興趣的訊息推(Push)給訂閱者,直到訂閱者向訊息代理髮出取消訂閱的訊息。
訊息代理實現了發行者和訂閱者在時間、空間和流程三個方面的解耦:
- 時間解耦—-發布方和訂閱者無需同時線上就能夠進行訊息傳輸,訊息中介軟體通過儲存轉寄提供了這種非同步傳輸的能力;
- 空間解耦——發布方和訂閱者都無需知道對方的物理地址、連接埠,甚至無需知道對方的邏輯名字和個數;
- 流程解耦——發布方和訂閱者在發送和接收資料時並不阻塞各自的控制流程程。
從訊息中介軟體的準系統來看,無論是點對點訊息中介軟體還是訊息代理,其體繫結構都是非常清晰簡單的。但由於分布式應用及其環境的多樣性和複雜性,導致了訊息中介軟體的複雜性。
訊息中介軟體的複雜性主要體現在下面幾個方面:
- 訊息中介軟體需要為分布在企業各個物理伺服器上的應用系統提供Message Service,而這些伺服器可能採用不同硬體平台,相互之間可能通過不同的網路通訊協定進行串連,這就要求訊息中介軟體能夠跨越不同的網路和硬體平台;
- 分布式應用可能採用不同開發語言或工具實現,因此需要訊息中介軟體為這些應用程式提供各類應用程式介面;
- 由於商業網路結構的複雜性和分布式應用傳輸訊息的多樣性要求,在分布式應用之間傳遞的訊息往往需要在訊息中介軟體之間進行多次傳輸才能到達接收方,因此要求訊息中介軟體具有儲存轉寄或訊息路由的能力;
- 對訊息傳輸的安全性、事務性、時限等品質要求,均需要訊息中介軟體系統進行相應的處理;
- 為了保證訊息不會因為網路或伺服器等物理故障而在傳輸過程中丟失,往往需要訊息中介軟體具備訊息的持久儲存能力。
訊息的表示訊息通常由訊息頭和訊息體兩部分組成。訊息頭用於描述訊息寄件者和接收者的地址或訊息主題,以及訊息的服務需求品質,例如,訊息傳輸的時限、優先順序、安全屬性等;訊息體用於描述訊息中具體攜帶的資訊內容。目前多採用XML作為訊息表示的格式。
訊息佇列為了有效控制訊息收發過程而在訊息中介軟體中內建的儲存訊息的資料結構。由於訊息多採用先進先出的控制方式,因此,通常採用隊列作為訊息的儲存結構。從訊息的內容來看,訊息可以分為發送訊息佇列、接收訊息佇列、無效信件佇列(無法投遞或到期的訊息構成隊列)。訊息佇列也可以按訊息發送的品質要求進一步細分,如將優先順序高的隊列組織成一個優先隊列,以便於處理。從佇列儲存體介質來看,訊息佇列一般分為持久訊息佇列、記憶體隊列和快取隊列。
- 持久訊息佇列:基於資料庫或檔案系統,提供訊息持久儲存功能,同時又具有最小的記憶體開銷,適合於訊息需要可靠傳輸的應用環境。
- 記憶體隊列:基於記憶體的訊息佇列。不提供訊息持久功能,完全基於記憶體來進行訊息的緩衝和分發。適合對效能要求非常苛刻,但是訊息無需可靠持 久的應用環境。
- 快取隊列:基於資料庫和記憶體Cache的持久。提供可靠持久功能,同時又使用記憶體作為Cache,因此具有最大的資源開銷,同時又具有很高的效能。適合於大部分應用場合。
訊息路由訊息路由借用了IP層的路由和路由器中的路由的概念,但不同之處在於:訊息路由屬於應用程式層的概念。它是為了保證應用之間的訊息交換處於可控的狀態而設計的軟體功能模組,其機制是按照訊息路由規則將訊息從寄件者傳送到目標應用,並提供訊息流程量控制功能。因此,訊息路由有時也稱為“流量控制”、“根據訊息內容決定路由”、“智能路由”。
訊息QoS機制 服務品質(Quality ofService,簡稱QoS)是指與使用者對服務滿意程度相關的各種效能效果。訊息QoS機制是指訊息中介軟體提供的訊息傳送過程中在效能、安全、可靠性等方面的各種非功能型需求約束。訊息中介軟體通常具有以下幾種Qos特性:
- 可靠性訊息中介軟體的可靠性分為訊息可靠性和串連可靠性,訊息可靠性控制訊息失效時的處理方式,串連可靠性控制串連失敗時的系統行為。
- 事務性為了使應用和訊息中介軟體之間的訊息傳遞在一個邏輯相關的序列層次上得到控制而不是僅僅只是控制單個的傳遞過程,訊息中介軟體需要將這些邏輯相關的序列組成一個事務,來保證整個訊息傳遞過程的ACID特性。
- 安全性 提供訊息的授權、認證、加密傳輸等手段,支援安全的訊息傳輸。
- 優先順序優先順序用來描述訊息傳遞的優先程度。考慮到具體的網路傳輸情況,訊息中介軟體無法保證每個訊息都能按時傳遞給接收者,所以,訊息寄件者通過指定訊息的緊急程度,使訊息按照優先順序的順序傳遞給訊息接收者。
- 時間約束時間約束是指訊息只在特點的時期內有效。它包括訊息的開始時間、有效時間和最遲交付時間,開始時間是指訊息的起始傳輸時間,有效時間是指訊息的有效期間,最遲交付時間是指訊息最晚到達接收者的時間,如果訊息過了這個時間仍未到達,則被廢棄。
- 隊列管理隊列管理主要從訊息發送的空間約束上進行控制,主要包括:隊列長度、接收訊息的最大數目、訊息的最大長度和丟棄策略等。隊列長度是記憶體中用來儲存訊息的Cache的大小,接收訊息的最大數目控制訊息接收者接收的訊息的最大數目,丟棄策略是指當訊息緩衝溢出時廢棄訊息的順序,常見的策略包括:FIFO、LIFO、優先順序和任意順序等。
代理化、服務化、流程化、平台化是目前訊息中介軟體發展的主要趨勢。代理化是指訊息中介軟體體系架構逐漸向訊息代理架構靠攏;服務化是指訊息中介軟體在應用高端支援面向服務的體系架構;流程化是指訊息中介軟體在應用形態上逐漸與商務程序管理機制相融合,成為公司專屬應用程式整合中介軟體的一個核心組成組件;而平台化是指圍繞訊息處理,各種應用開發和管理工具與訊息中介軟體有機結合在一起,為分布式應用的訊息處理提供一個有機的統一平台。