賈素來(lái)
(無(wú)錫商業(yè)職業(yè)技術(shù)學(xué)院公共計(jì)算機(jī)教學(xué)部, 江蘇 無(wú)錫 214153)
傳統(tǒng)的客戶機(jī)/服務(wù)器體系結(jié)構(gòu),隨著業(yè)務(wù)處理對(duì)系統(tǒng)提出更高要求,也逐漸暴露出其客戶端逐漸龐大和服務(wù)器負(fù)擔(dān)過(guò)重等缺點(diǎn)。因此計(jì)算機(jī)科學(xué)家提出了三層或多層分布式系統(tǒng)(Multi-storey Distributed System)。隨著不斷改進(jìn)和發(fā)展,分布式系統(tǒng)逐漸形成了三種具有代表性的主流技術(shù),即 CORBA(Common Object Request Broker Architecture)、COM/DCOM(Distributed Component Object Model)和J2EE(Java2 Platform Enterprise Edition)。
在多層結(jié)構(gòu)當(dāng)中,業(yè)務(wù)邏輯從客戶端分離出來(lái),移至中間層,系統(tǒng)也就成為客戶端表示層、中間業(yè)務(wù)邏輯層和數(shù)據(jù)庫(kù)服務(wù)器的三層或多層體系結(jié)構(gòu),如圖1所示[1]。多層體系結(jié)構(gòu)將表示和業(yè)務(wù)處理分開(kāi),縮減了客戶端的規(guī)模,又將相關(guān)業(yè)務(wù)和資源分開(kāi),降低了服務(wù)器的負(fù)載,避免了服務(wù)器的性能缺陷對(duì)整個(gè)系統(tǒng)性能的影響。這種在多個(gè)服務(wù)器上分布應(yīng)用程序處理的多層可變結(jié)構(gòu)比二層體系結(jié)構(gòu)的伸縮性和擴(kuò)展性有了很大加強(qiáng)。
在分布式環(huán)境中,無(wú)論是硬件平臺(tái)還是軟件平臺(tái)都不可能做到統(tǒng)一。大規(guī)模的應(yīng)用系統(tǒng)通常要求軟硬件在各不相同的網(wǎng)絡(luò)環(huán)境中運(yùn)行,為了更好的開(kāi)發(fā)和應(yīng)用能夠運(yùn)行在這種異構(gòu)平臺(tái)上的軟件,迫切需要一種基于標(biāo)準(zhǔn)的、獨(dú)立于計(jì)算機(jī)軟硬件的開(kāi)發(fā)和運(yùn)行環(huán)境,中間件技術(shù)也就在這種情況下應(yīng)運(yùn)而生了。中間件是一種軟件,它位于系統(tǒng)的不同分布式組件之間,獨(dú)立于計(jì)算機(jī)軟硬件平臺(tái),且具有標(biāo)準(zhǔn)的程序接口和協(xié)議,使不同硬件和操作系統(tǒng)平臺(tái)上分布式應(yīng)用的數(shù)據(jù)共享和互操作。它作用是為處于自己上層的應(yīng)用軟件提供運(yùn)行和開(kāi)發(fā)環(huán)境,幫助用戶靈活、高效的開(kāi)發(fā)和集成復(fù)雜的應(yīng)用軟件。OMG的COBRA技術(shù)規(guī)范、微軟的COM/DCOM技術(shù)規(guī)范、Sun公司的J2EE技術(shù)規(guī)范是目前三種主流的面向?qū)ο笾虚g件技術(shù)。
圖1 多層分布式體系結(jié)構(gòu)模型
CORBA分布計(jì)算技術(shù)是OMG組織基于眾多開(kāi)放系統(tǒng)平臺(tái)廠商提交的分布對(duì)象互操作內(nèi)容的基礎(chǔ)上制定的公共對(duì)象請(qǐng)求代理體系規(guī)范。它是為處理基于對(duì)象的分布式計(jì)算系統(tǒng)之間的移植和互操作而定義的一套框架性標(biāo)準(zhǔn)和規(guī)范。它定義了IDL語(yǔ)言映射、單個(gè)ORB體系結(jié)構(gòu)和多個(gè)ORB間互操作機(jī)制及標(biāo)準(zhǔn)協(xié)議( IIOP),有潛力包容現(xiàn)有客戶機(jī)/服務(wù)器中間件的每一種格式,可將現(xiàn)有應(yīng)用軟件都?xì)w到對(duì)象軟件上來(lái),最新的CORBA規(guī)范如圖2所示[2]。
圖2 CORBA規(guī)范模型
在CORBA規(guī)范中,最底層是對(duì)象請(qǐng)求代理ORB,這是分布對(duì)象系統(tǒng)中的“軟總線”,從而使客戶方不必再關(guān)心底層的通信,實(shí)現(xiàn)了客戶程序與服務(wù)器程序的完全分離,從而使客戶端與服務(wù)端可以采用不同的語(yǔ)言和使用不同供應(yīng)商的ORB。同時(shí)CORBA提供了接口定義語(yǔ)言到C、C++、Java、COBOL等語(yǔ)言的映射機(jī)制編譯器,它可以生成服務(wù)器方的框架和客戶方存根代碼,再通過(guò)分別與客戶端和服務(wù)器端的聯(lián)編,即可得到服務(wù)方和客戶方的程序。
COM是一個(gè)獨(dú)立于語(yǔ)言的、基于對(duì)象的編程規(guī)范,使用COM可以定義一類(lèi)對(duì)象,這類(lèi)對(duì)象可以在不同的進(jìn)程中調(diào)用,從而為開(kāi)發(fā)多層應(yīng)用系統(tǒng)提供了必要的基礎(chǔ),但 COM本身并不能構(gòu)造完整的多層應(yīng)用系統(tǒng)框架,它只能在本地生成組件對(duì)象。為了能在網(wǎng)絡(luò)環(huán)境中構(gòu)建多層應(yīng)用系統(tǒng),這就需要進(jìn)一步使用DCOM。DCOM擴(kuò)展了COM,它可以支持實(shí)現(xiàn)在網(wǎng)絡(luò)環(huán)境中不同計(jì)算機(jī)之間對(duì)象的通信。也就是說(shuō),DCOM可以使一個(gè)應(yīng)用系統(tǒng)分布在不同的網(wǎng)絡(luò)環(huán)境中,從而可以更有效地為客戶提供服務(wù)。
J2EE是一個(gè)基于JAVA的適合服務(wù)器端組件體系結(jié)構(gòu)的結(jié)合了 Java Enterprise API的完整的企業(yè)級(jí)應(yīng)用系統(tǒng)開(kāi)發(fā)平臺(tái)或中間件體系結(jié)構(gòu),它通過(guò)提供一組應(yīng)用組件和運(yùn)行時(shí)環(huán)境來(lái)構(gòu)造可伸縮的企業(yè)應(yīng)用。J2EE技術(shù)以核心 Java平臺(tái)或Java 2平臺(tái)的標(biāo)準(zhǔn)版J2SE為基礎(chǔ),并且鞏固了標(biāo)準(zhǔn)版J2SE中的許多優(yōu)點(diǎn),例如“編寫(xiě)一次,到處運(yùn)行”的特性、JDBC API、CORBA技術(shù)以及能夠在因特網(wǎng)應(yīng)用中保護(hù)數(shù)據(jù)的安全模式等。同時(shí)J2EE還提供了對(duì)EJB、Java Servlets API、JSP以及XML技術(shù)的全面支持。
典型的J2EE 結(jié)構(gòu)的應(yīng)用程序包括四層:客戶層、表示邏輯層、業(yè)務(wù)邏輯層和企業(yè)信息系統(tǒng)層,如圖3所示[3]。
圖3 J2EE 多層體系結(jié)構(gòu)
CORBA、DCOM和J2EE各有其特定的產(chǎn)生背景、技術(shù)特點(diǎn)和使用范圍。CORBA標(biāo)準(zhǔn)是最早出現(xiàn)的,也是最完美的[4]。與COM/DCOM技術(shù)在擴(kuò)展性方面的局限和Java RMI在實(shí)現(xiàn)語(yǔ)言方面的不足相比,CORBA是一種在異構(gòu)平臺(tái)下的語(yǔ)言無(wú)關(guān)的對(duì)象互操作模型。
在支持語(yǔ)言方面,CORBA是一個(gè)規(guī)范,可以用在不同的平臺(tái)、操作系統(tǒng)和編程語(yǔ)言之上,只要該平臺(tái)支持ORB的實(shí)現(xiàn),而且有對(duì)編程語(yǔ)言的映射就可以。相對(duì)而言,DCOM比較適合與 C++緊密集成,對(duì)象的實(shí)現(xiàn)需要 WIN32 API的支持。J2EE則建立在Java 語(yǔ)言之上,只能使用Java語(yǔ)言和Java RMI進(jìn)行接口定義和應(yīng)用開(kāi)發(fā)。雖然Java語(yǔ)言提供了和其它語(yǔ)言的接口,但這種接口使用起來(lái)非常復(fù)雜。
在平臺(tái)支持方面,DCOM是基于微軟操作系統(tǒng)的,使用RPC和安全機(jī)制產(chǎn)生符合 DCOM協(xié)議標(biāo)準(zhǔn)的標(biāo)準(zhǔn)網(wǎng)絡(luò)包,但 DCOM只是簡(jiǎn)單地把本地跨進(jìn)程通信用一個(gè)網(wǎng)絡(luò)協(xié)議傳輸來(lái)替代。雖然通過(guò)使用第三方組件,開(kāi)發(fā)者可以實(shí)現(xiàn)其它操作平臺(tái)上的DCOM組件,但這些實(shí)現(xiàn)必須和微軟的實(shí)現(xiàn)相匹配。J2EE是一種純Java的解決方案,只要安裝有Java虛擬機(jī),就可以實(shí)現(xiàn)J2EE,但是它對(duì)集成的支持卻很脆弱。EJB使用Java遠(yuǎn)程方法調(diào)用接口RMI,RMI使用JRMP作為通信傳遞協(xié)議,但JRMP是一個(gè)非標(biāo)準(zhǔn)的協(xié)議,不允許使用交叉語(yǔ)言編寫(xiě)的對(duì)象之間進(jìn)行通信,這就要求客戶端和服務(wù)器都必須是基于Java的。CORBA使用IIOP和GIOP作為通信層協(xié)議,兩個(gè)協(xié)議從本質(zhì)上來(lái)講非常簡(jiǎn)單,但提供了建立可擴(kuò)展的 CORBA服務(wù)器的能力。
在分布式事務(wù)處理方面,DCOM沒(méi)有提供自動(dòng)的容錯(cuò)和負(fù)載平衡服務(wù),這個(gè)工作全是交給MTS來(lái)完成的。EJB使用Java事務(wù)服務(wù)JTS來(lái)完成分布式事務(wù)處理,應(yīng)用程序通過(guò)JTA使用事務(wù)管理功能。CORBA規(guī)范中的OTS為分布式CORBA對(duì)象提供了事務(wù)管理的接口,支持平面事務(wù)和嵌套式事務(wù),同時(shí)OTS基于X/open DTP標(biāo)準(zhǔn),所以不是基于CORBA的應(yīng)用程序也可以與OTS互操作。
CORBA是一個(gè)通用的分布式對(duì)象規(guī)范說(shuō)明,沒(méi)有給出具體的實(shí)現(xiàn)方案,所以為實(shí)現(xiàn)提供了極大的靈活性。IDL反編譯工具可以從Java RMI實(shí)現(xiàn)類(lèi)生成IDL文件,根據(jù)Java到CORBA的映射規(guī)范可以確定CORBA和EJB架構(gòu)各元素之間的對(duì)應(yīng)關(guān)系。目前很多ORB產(chǎn)品都實(shí)現(xiàn)了基于IIOP的RMI,如Sun的Java IDL、InPrise的VisiBroker,以及一些開(kāi)發(fā)源碼的ORB產(chǎn)品,如OPenORB、JacORB等。
在.NET中,IDL是由開(kāi)發(fā)工具生成的。.NET中涵蓋的DCOM技術(shù)和CORBA一樣,在網(wǎng)絡(luò)傳輸層都采用TCP/IP協(xié)議和相應(yīng)的IDL規(guī)范,但微軟沒(méi)有公開(kāi)這個(gè)規(guī)范。在實(shí)施時(shí),CORBA的IDL采用類(lèi)C++的定義,是公開(kāi)的規(guī)范,但DCOM的IDL的文件是文本形式的。在DCOM中,客戶機(jī)存根稱(chēng)為代理,而服務(wù)器存根稱(chēng)為存根。相反,CORBA中的客戶機(jī)存根稱(chēng)為存根,而服務(wù)器存根稱(chēng)為框架。這樣,在DCOM和CORBA之間由于存在數(shù)據(jù)類(lèi)型、命名方式、參數(shù)值形式等方面的差異性,使得相互通信很困難。
DCOM只支持 Win32,如果系統(tǒng)主要運(yùn)行微軟操作系統(tǒng),并且其地域分布上不是很廣的話,COM/DCOM或許是比較合適的選擇。J2EE在Internet環(huán)境下集組件模式、跨異構(gòu)平臺(tái)、兼具事務(wù)處理、數(shù)據(jù)庫(kù)連接等許多基礎(chǔ)結(jié)構(gòu)服務(wù),開(kāi)發(fā)效率高、簡(jiǎn)單,缺點(diǎn)是僅限于支持Java語(yǔ)言。相比較而言,CORBA提供了一個(gè)多功能的一致的對(duì)象模型,具有高度的透明性。同時(shí) CORBA具有良好的跨平臺(tái)和跨語(yǔ)言的特征,支持客戶端應(yīng)用和服務(wù)器對(duì)象的特點(diǎn),并且具有良好的運(yùn)行效率,成為了大部分分布式系統(tǒng)設(shè)計(jì)首選[5]。
[1] 潘俊虹.淺析三種主流分布式組件對(duì)象模型對(duì)比及互操作[J].南平師專(zhuān)學(xué)報(bào),2006,25(4):56-59.
[2] 劉建兵.基于CORBA的對(duì)象Web研究[J].電腦知識(shí)與技術(shù),2009,5(2):308-312.
[3] 閆珅,郭燚.基于Eclipse開(kāi)發(fā)環(huán)境的J2EE編程技術(shù)[J].唐山職業(yè)技術(shù)學(xué)院學(xué)報(bào),2008,6(4):45-46.
[4] 李紅宇,王秀珍.分布式對(duì)象技術(shù)應(yīng)用探討[J].現(xiàn)代計(jì)算機(jī),2007(251):72-75.
[5] 史永昌,李亞崗.CORBA、DCOM和J2EE技術(shù)比較[J].唐山師范學(xué)院學(xué)報(bào),2007,27(5):98-100.