消息中間件的比較-轉載

原文地址:

http://blog.sina.com.cn/s/blog_493a8455010160jc.html


消息中間件(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所示。

消息中間件的比較-轉載

消息中間件的基本工作原理爲消息發送方(想象成咱自己),消息發送者調用發送消息的API函數(比如ActiveMQ這個消息中間件的函數),將需要發送的消息經消息隊列服務(想象成本地啓動的ActiveMQ服務)存儲到發送消息隊列中;通過雙方消息傳遞服務(想象成發送端的ActiveMQ服務與接受端的ActiveMQ服務)之間的交互,經消息隊列服務(本地)將需要發送的消息從發送隊列取出,並送到接收方;接收方再經它的消息隊列服務將接收到的消息存放到它的接收消息隊列中;在消息接收方,消息接收者調用接收消息的API函數,同樣經過消息隊列服務,將需要的消息從接收隊列中取出,並進行處理。消息在發送或接收成功後,消息隊列服務將對相應的消息隊列進行管理。(這個管理暫時理解爲由消息中間件管理)

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

消息中間件的比較-轉載


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

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

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

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

從消息中間件的基本功能來看,無論是點對點消息中間件還是消息代理,其體系結構都是非常清晰簡單的。但由於分佈式應用及其環境的多樣性和複雜性,導致了消息中間件的複雜性。

消息中間件的複雜性主要體現在下面幾個方面:

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

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

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

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

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

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

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

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

參考文獻

1. Eugster PT, Felber PA, Guerraoui R, Kermarrec AM. The many faces of publish/subscribe. ACM Computing Surveys, 2003,35(2): 114-131.
2. Markku Korhonen, Message Oriented Middleware (MOM): http://www.tml.tkk.fi/Opinnot/Tik-110.551/1997/mqs.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章