吉林省統計局數據管理中心 李志剛
計算機技術迅猛發展。從硬件技術看,CPU速度越來越高,處理能力越來越強;從軟件技術看,應用程序的規模不斷擴大,特別是Internet及WWW的出現,使計算機的應用范圍變得更為廣闊,許多應用程序需在網絡環境的異構平臺上運行。這一切都對新一代的軟件開發提出了新的需求。在這種分布異構環境中,通常存在多種硬件系統平臺(如PC,工作站,小型機等),在這些硬件平臺上又存在各種各樣的系統軟件(如不同的操作系統、數據庫、語言編譯器等),以及多種風格各異的用戶界面,這些硬件系統平臺還可能采用不同的網絡協議和網絡體系結構連接。如何把這些系統集成起來并開發新的應用是一個非常現實而困難的問題。
在中間件產生前,應用軟件直接使用操作系統、網絡協議和數據庫等開發,這些都是計算機最底層的東西,越底層越復雜,開發者不得不面臨許多很棘手的問題,如操作系統的多樣性,繁雜的網絡程序設計、管理,復雜多變的網絡環境,數據分散處理帶來的不一致性問題、性能和效率、安全,等等。這些與用戶的業務沒有直接關系,但又必須解決,耗費了大量有限的時間和精力。于是,有人提出能不能將應用軟件所要面臨的共性問題進行提煉、抽象,在操作系統之上再形成一個可復用的部分,供成千上萬的應用軟件重復使用。這一技術思想最終構成了中間件這類的軟件。
為解決分布異構問題,人們提出了中間件(Middleware)的概念。中間件是位于平臺(硬件和操作系統)和應用之間的通用服務,如圖1所示,這些服務具有標準的程序接口和協議。針對不同的操作系統和硬件平臺,它們可以有符合接口和協議規范的多種實現。
中間件(middleware)是一種獨立的系統軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源,中間件位于客戶機服務器的操作系統之上,管理計算資源和網絡通信。中間件(middleware)是基礎軟件的一大類,屬于可復用軟件的范疇。顧名思義,中間件處于操作系統軟件與用戶的應用軟件的中間。中間件在操作系統、網絡和數據庫之上,應用軟件的下層,總的作用是為處于自己上層的應用軟件提供運行與開發的環境,幫助用戶靈活、高效地開發和集成復雜的應用軟件。
也許很難給中間件一個嚴格的定義,但中間件應具有如下的一些基本特點:
1)滿足大量應用的需要
2)運行于多種硬件和OS平臺
3)支持分布計算,提供跨網絡、硬件和OS平臺的透明性的應用或服務的交互
4)支持標準的協議
5)支持標準的接口
由于標準接口對于可移植性和標準協議對于互操作性的重要性,中間件已成為許多標準化工作的主要部分。對于應用軟件開發,中間件遠比操作系統和網絡服務更為重要,中間件提供的程序接口定義了一個相對穩定的高層應用環境,不管底層的計算機硬件和系統軟件怎樣更新換代,只要將中間件升級更新,并保持中間件對外的接口定義不變,應用軟件幾乎不需任何修改,從而保護了企業在應用軟件開發和維護中的重大投資。
中間件分類(IDC的分類):大致可分為六類:終端仿真/屏幕轉換中間件、數據訪問中間件、遠程過程調用中間件、消息中間件、交易中間件、對象中間件[1]。
中間件所包括的范圍十分廣泛,針對不同的應用需求涌現出多種各具特色的中間件產品。但至今中間件還沒有一個比較精確的定義,因此,在不同的角度或不同的層次上,對中間件的分類也會有所不同。由于中間件需要屏蔽分布環境中異構的操作系統和網絡協議,它必須能夠提供分布環境下的通訊服務,我們將這種通訊服務稱之為平臺。基于目的和實現機制的不同,我們將平臺分為以下主要幾類:
遠程過程調用中間件(Remote Procedure Call)
面向消息的中間件(MesSAge-Oriented Middleware)
對象請求代理中間件(object RequeST Brokers)
它們可向上提供不同形式的通訊服務,包括同步、排隊、訂閱發布、廣播等等,在這些基本的通訊平臺之上,可構筑各種框架,為應用程序提供不同領域內的服務,如事務處理監控器、分布數據訪問、對象事務管理器OTM等。平臺為上層應用屏蔽了異構平臺的差異,而其上的框架又定義了相應領域內的應用的系統結構、標準的服務組件等,用戶只需告訴框架所關心的事件,然后提供處理這些事件的代碼。當事件發生時,框架則會調用用戶的代碼。用戶代碼不用調用框架,用戶程序也不必關心框架結構、執行流程、對系統級API的調用等,所有這些由框架負責完成。因此,基于中間件開發的應用具有良好的可擴充性、易管理性、高可用性和可移植性。
MOM(Message-Oriented Middleware)指的是利用高效可靠的消息傳遞機制進行平臺無關的數據交流,并基于數據通信來進行分布式系統的集成。通過提供消息傳遞和消息排隊模型,它可在分布環境下擴展進程間的通信,并支持多通訊協議、語言、應用程序、硬件和軟件平臺。目前流行的MOM中間件產品有IBM的MQSeries、BEA的MessageQ等。
1)通訊程序可在不同的時間運行程序[2]。不在網絡上直接相互通話,而是間接地將消息放入消息隊列,因為程序間沒有直接的聯系。所以它們不必同時運行。消息放入適當的隊列時,目標程序甚至根本不需要正在運行;即使目標程序在運行,也不意味著要立即處理該消息。
2)對應用程序的結構沒有約束。在復雜的應用場合中,通訊程序之間不僅可以是一對一的關系,還可以進行一對多和多對一方式,甚至是上述多種方式的組合。多種通訊方式的構造并沒有增加應用程序的復雜性。
3)程序與網絡復雜性相隔離。程序將消息放入消息隊列或從消息隊列中取出消息來進行通訊,與此關聯的全部活動,比如維護消息隊列、維護程序和隊列之間的關系、處理網絡的重新啟動和在網絡中移動消息等是MOM的任務,程序不直接與其它程序通話,并且它們不涉及網絡通訊的復雜性。

圖1 中間件
中間件能夠屏蔽操作系統和網絡協議的差異,為應用程序提供多種通訊機制;并提供相應的平臺以滿足不同領域的需要。因此,中間件為應用程序了一個相對穩定的高層應用環境。然而,中間件服務也并非“萬能藥”。中間件所應遵循的一些原則離實際還有很大距離。多數流行的中間件服務使用專有的API和專有的協議,使得應用建立于單一廠家的產品,來自不同廠家的實現很難互操作。有些中間件服務只提供一些平臺的實現,從而限制了應用在異構系統之間的移植。應用開發者在這些中間件服務之上建立自己的應用還要承擔相當大的風險,隨著技術的發展他們往往還需重寫他們的系統。盡管中間件服務提高了分布計算的抽象化程度,但應用開發者還需面臨許多艱難的設計選擇,例如,開發者還需決定分布應用在client方和server方的功能分配。通常將表示服務放在client以方便使用顯示設備,將數據服務放在server以靠近數據庫,但也并非總是如此,何況其它應用功能如何分配也是不容易確定的。
[1]秦璟,高文,儲方杰.中間件技術研究[J].計算機應用研究,2003(8):35-37.
[2]Mobilink Synchronization User's Guide.http://www.ianywhere.com/developer/product_manuals/sqlanywhere 2004.