吉林省統(tǒng)計(jì)局?jǐn)?shù)據(jù)管理中心 李志剛
計(jì)算機(jī)技術(shù)迅猛發(fā)展。從硬件技術(shù)看,CPU速度越來(lái)越高,處理能力越來(lái)越強(qiáng);從軟件技術(shù)看,應(yīng)用程序的規(guī)模不斷擴(kuò)大,特別是Internet及WWW的出現(xiàn),使計(jì)算機(jī)的應(yīng)用范圍變得更為廣闊,許多應(yīng)用程序需在網(wǎng)絡(luò)環(huán)境的異構(gòu)平臺(tái)上運(yùn)行。這一切都對(duì)新一代的軟件開發(fā)提出了新的需求。在這種分布異構(gòu)環(huán)境中,通常存在多種硬件系統(tǒng)平臺(tái)(如PC,工作站,小型機(jī)等),在這些硬件平臺(tái)上又存在各種各樣的系統(tǒng)軟件(如不同的操作系統(tǒng)、數(shù)據(jù)庫(kù)、語(yǔ)言編譯器等),以及多種風(fēng)格各異的用戶界面,這些硬件系統(tǒng)平臺(tái)還可能采用不同的網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)體系結(jié)構(gòu)連接。如何把這些系統(tǒng)集成起來(lái)并開發(fā)新的應(yīng)用是一個(gè)非?,F(xiàn)實(shí)而困難的問(wèn)題。
在中間件產(chǎn)生前,應(yīng)用軟件直接使用操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議和數(shù)據(jù)庫(kù)等開發(fā),這些都是計(jì)算機(jī)最底層的東西,越底層越復(fù)雜,開發(fā)者不得不面臨許多很棘手的問(wèn)題,如操作系統(tǒng)的多樣性,繁雜的網(wǎng)絡(luò)程序設(shè)計(jì)、管理,復(fù)雜多變的網(wǎng)絡(luò)環(huán)境,數(shù)據(jù)分散處理帶來(lái)的不一致性問(wèn)題、性能和效率、安全,等等。這些與用戶的業(yè)務(wù)沒(méi)有直接關(guān)系,但又必須解決,耗費(fèi)了大量有限的時(shí)間和精力。于是,有人提出能不能將應(yīng)用軟件所要面臨的共性問(wèn)題進(jìn)行提煉、抽象,在操作系統(tǒng)之上再形成一個(gè)可復(fù)用的部分,供成千上萬(wàn)的應(yīng)用軟件重復(fù)使用。這一技術(shù)思想最終構(gòu)成了中間件這類的軟件。
為解決分布異構(gòu)問(wèn)題,人們提出了中間件(Middleware)的概念。中間件是位于平臺(tái)(硬件和操作系統(tǒng))和應(yīng)用之間的通用服務(wù),如圖1所示,這些服務(wù)具有標(biāo)準(zhǔn)的程序接口和協(xié)議。針對(duì)不同的操作系統(tǒng)和硬件平臺(tái),它們可以有符合接口和協(xié)議規(guī)范的多種實(shí)現(xiàn)。
中間件(middleware)是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源,中間件位于客戶機(jī)服務(wù)器的操作系統(tǒng)之上,管理計(jì)算資源和網(wǎng)絡(luò)通信。中間件(middleware)是基礎(chǔ)軟件的一大類,屬于可復(fù)用軟件的范疇。顧名思義,中間件處于操作系統(tǒng)軟件與用戶的應(yīng)用軟件的中間。中間件在操作系統(tǒng)、網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)之上,應(yīng)用軟件的下層,總的作用是為處于自己上層的應(yīng)用軟件提供運(yùn)行與開發(fā)的環(huán)境,幫助用戶靈活、高效地開發(fā)和集成復(fù)雜的應(yīng)用軟件。
也許很難給中間件一個(gè)嚴(yán)格的定義,但中間件應(yīng)具有如下的一些基本特點(diǎn):
1)滿足大量應(yīng)用的需要
2)運(yùn)行于多種硬件和OS平臺(tái)
3)支持分布計(jì)算,提供跨網(wǎng)絡(luò)、硬件和OS平臺(tái)的透明性的應(yīng)用或服務(wù)的交互
4)支持標(biāo)準(zhǔn)的協(xié)議
5)支持標(biāo)準(zhǔn)的接口
由于標(biāo)準(zhǔn)接口對(duì)于可移植性和標(biāo)準(zhǔn)協(xié)議對(duì)于互操作性的重要性,中間件已成為許多標(biāo)準(zhǔn)化工作的主要部分。對(duì)于應(yīng)用軟件開發(fā),中間件遠(yuǎn)比操作系統(tǒng)和網(wǎng)絡(luò)服務(wù)更為重要,中間件提供的程序接口定義了一個(gè)相對(duì)穩(wěn)定的高層應(yīng)用環(huán)境,不管底層的計(jì)算機(jī)硬件和系統(tǒng)軟件怎樣更新?lián)Q代,只要將中間件升級(jí)更新,并保持中間件對(duì)外的接口定義不變,應(yīng)用軟件幾乎不需任何修改,從而保護(hù)了企業(yè)在應(yīng)用軟件開發(fā)和維護(hù)中的重大投資。
中間件分類(IDC的分類):大致可分為六類:終端仿真/屏幕轉(zhuǎn)換中間件、數(shù)據(jù)訪問(wèn)中間件、遠(yuǎn)程過(guò)程調(diào)用中間件、消息中間件、交易中間件、對(duì)象中間件[1]。
中間件所包括的范圍十分廣泛,針對(duì)不同的應(yīng)用需求涌現(xiàn)出多種各具特色的中間件產(chǎn)品。但至今中間件還沒(méi)有一個(gè)比較精確的定義,因此,在不同的角度或不同的層次上,對(duì)中間件的分類也會(huì)有所不同。由于中間件需要屏蔽分布環(huán)境中異構(gòu)的操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議,它必須能夠提供分布環(huán)境下的通訊服務(wù),我們將這種通訊服務(wù)稱之為平臺(tái)?;谀康暮蛯?shí)現(xiàn)機(jī)制的不同,我們將平臺(tái)分為以下主要幾類:
遠(yuǎn)程過(guò)程調(diào)用中間件(Remote Procedure Call)
面向消息的中間件(MesSAge-Oriented Middleware)
對(duì)象請(qǐng)求代理中間件(object RequeST Brokers)
它們可向上提供不同形式的通訊服務(wù),包括同步、排隊(duì)、訂閱發(fā)布、廣播等等,在這些基本的通訊平臺(tái)之上,可構(gòu)筑各種框架,為應(yīng)用程序提供不同領(lǐng)域內(nèi)的服務(wù),如事務(wù)處理監(jiān)控器、分布數(shù)據(jù)訪問(wèn)、對(duì)象事務(wù)管理器OTM等。平臺(tái)為上層應(yīng)用屏蔽了異構(gòu)平臺(tái)的差異,而其上的框架又定義了相應(yīng)領(lǐng)域內(nèi)的應(yīng)用的系統(tǒng)結(jié)構(gòu)、標(biāo)準(zhǔn)的服務(wù)組件等,用戶只需告訴框架所關(guān)心的事件,然后提供處理這些事件的代碼。當(dāng)事件發(fā)生時(shí),框架則會(huì)調(diào)用用戶的代碼。用戶代碼不用調(diào)用框架,用戶程序也不必關(guān)心框架結(jié)構(gòu)、執(zhí)行流程、對(duì)系統(tǒng)級(jí)API的調(diào)用等,所有這些由框架負(fù)責(zé)完成。因此,基于中間件開發(fā)的應(yīng)用具有良好的可擴(kuò)充性、易管理性、高可用性和可移植性。
MOM(Message-Oriented Middleware)指的是利用高效可靠的消息傳遞機(jī)制進(jìn)行平臺(tái)無(wú)關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來(lái)進(jìn)行分布式系統(tǒng)的集成。通過(guò)提供消息傳遞和消息排隊(duì)模型,它可在分布環(huán)境下擴(kuò)展進(jìn)程間的通信,并支持多通訊協(xié)議、語(yǔ)言、應(yīng)用程序、硬件和軟件平臺(tái)。目前流行的MOM中間件產(chǎn)品有IBM的MQSeries、BEA的MessageQ等。
1)通訊程序可在不同的時(shí)間運(yùn)行程序[2]。不在網(wǎng)絡(luò)上直接相互通話,而是間接地將消息放入消息隊(duì)列,因?yàn)槌绦蜷g沒(méi)有直接的聯(lián)系。所以它們不必同時(shí)運(yùn)行。消息放入適當(dāng)?shù)年?duì)列時(shí),目標(biāo)程序甚至根本不需要正在運(yùn)行;即使目標(biāo)程序在運(yùn)行,也不意味著要立即處理該消息。
2)對(duì)應(yīng)用程序的結(jié)構(gòu)沒(méi)有約束。在復(fù)雜的應(yīng)用場(chǎng)合中,通訊程序之間不僅可以是一對(duì)一的關(guān)系,還可以進(jìn)行一對(duì)多和多對(duì)一方式,甚至是上述多種方式的組合。多種通訊方式的構(gòu)造并沒(méi)有增加應(yīng)用程序的復(fù)雜性。
3)程序與網(wǎng)絡(luò)復(fù)雜性相隔離。程序?qū)⑾⒎湃胂㈥?duì)列或從消息隊(duì)列中取出消息來(lái)進(jìn)行通訊,與此關(guān)聯(lián)的全部活動(dòng),比如維護(hù)消息隊(duì)列、維護(hù)程序和隊(duì)列之間的關(guān)系、處理網(wǎng)絡(luò)的重新啟動(dòng)和在網(wǎng)絡(luò)中移動(dòng)消息等是MOM的任務(wù),程序不直接與其它程序通話,并且它們不涉及網(wǎng)絡(luò)通訊的復(fù)雜性。
圖1 中間件
中間件能夠屏蔽操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議的差異,為應(yīng)用程序提供多種通訊機(jī)制;并提供相應(yīng)的平臺(tái)以滿足不同領(lǐng)域的需要。因此,中間件為應(yīng)用程序了一個(gè)相對(duì)穩(wěn)定的高層應(yīng)用環(huán)境。然而,中間件服務(wù)也并非“萬(wàn)能藥”。中間件所應(yīng)遵循的一些原則離實(shí)際還有很大距離。多數(shù)流行的中間件服務(wù)使用專有的API和專有的協(xié)議,使得應(yīng)用建立于單一廠家的產(chǎn)品,來(lái)自不同廠家的實(shí)現(xiàn)很難互操作。有些中間件服務(wù)只提供一些平臺(tái)的實(shí)現(xiàn),從而限制了應(yīng)用在異構(gòu)系統(tǒng)之間的移植。應(yīng)用開發(fā)者在這些中間件服務(wù)之上建立自己的應(yīng)用還要承擔(dān)相當(dāng)大的風(fēng)險(xiǎn),隨著技術(shù)的發(fā)展他們往往還需重寫他們的系統(tǒng)。盡管中間件服務(wù)提高了分布計(jì)算的抽象化程度,但應(yīng)用開發(fā)者還需面臨許多艱難的設(shè)計(jì)選擇,例如,開發(fā)者還需決定分布應(yīng)用在client方和server方的功能分配。通常將表示服務(wù)放在client以方便使用顯示設(shè)備,將數(shù)據(jù)服務(wù)放在server以靠近數(shù)據(jù)庫(kù),但也并非總是如此,何況其它應(yīng)用功能如何分配也是不容易確定的。
[1]秦璟,高文,儲(chǔ)方杰.中間件技術(shù)研究[J].計(jì)算機(jī)應(yīng)用研究,2003(8):35-37.
[2]Mobilink Synchronization User's Guide.http://www.ianywhere.com/developer/product_manuals/sqlanywhere 2004.