首先聲明,我們既不想引起一場"CORBA vs Ice"的爭論,也不想懷疑CORBA。相反,我們認(rèn)為CORBA在它的時(shí)代是一個(gè)很大的成就,而且,Ice也明顯借用了CORBA的很多思想。
我們決定寫這篇比較文章是因?yàn)槲覀兤谕嗟娜四苷_地詢問我們?yōu)楹嗡麄円肐ce代替CORBA。對這個(gè)問題,我們通常的回答是:為什么不先自己試試使用 Ice呢?我們敢肯定,一旦你使用了Ice有一段時(shí)間,你就永遠(yuǎn)不會(huì)再想用回CORBA。請相信我們,很容易會(huì)喜歡上Ice,因?yàn)樗鼉?yōu)雅、簡單,它的結(jié)構(gòu)一致性,而且最后一點(diǎn):至少它沒有大量的特性和工具。
對于沒有時(shí)間去試驗(yàn)Ice來了解它的人,這里有一些原因讓我們相信Ice優(yōu)于CORBA:
1、Completeness(完備性)
當(dāng)我們說到完備性時(shí),我們的意思是實(shí)際產(chǎn)品的完備性,而不是從來未被實(shí)現(xiàn)的標(biāo)準(zhǔn)的完備性。我們相信Ice比市場上任何單個(gè)CORBA更完備。你可以自己做一個(gè)檢查:市場上有哪個(gè)CORBA產(chǎn)品提供了跟Ice可比較的特性?
2、Performance(性能)
由于具有CORBA所沒有的結(jié)構(gòu)優(yōu)點(diǎn),Ice具有突出的性能。Ice高效的協(xié)議、請求批量化、高效的事件分發(fā)都意味著Ice比CORBA ORB運(yùn)行得更快,同時(shí)消耗更少的線路帶寬。
3、No "Design by Committee"(非“委員會(huì)設(shè)計(jì)”)
Ice由一群專業(yè)的資深專家所設(shè)計(jì)。Ice沒有設(shè)計(jì)成適合所有人的“萬金油”。而CORBA則充斥著被具有特權(quán)的制定者加進(jìn)到標(biāo)準(zhǔn)里的眾多不切實(shí)際的特性,卻又沒有真正考慮到這些特性是否會(huì)被真正地實(shí)現(xiàn)。
通常,為了就CORBA標(biāo)準(zhǔn)達(dá)成一致的唯一方法就是將之前大量實(shí)現(xiàn)的特性放在一起,生硬地塞進(jìn)標(biāo)準(zhǔn)里。這導(dǎo)致了標(biāo)準(zhǔn)越來越大,也越來越復(fù)雜,超出了實(shí)際的需要。這也意味著平臺(tái)更大更慢,也因?yàn)閺?fù)雜的API導(dǎo)致了難以使用。Ice提供的API集小得多,也更高效,比CORBA的API易于學(xué)習(xí)使用,并且功能并不少。
4、Slice
Slice,Ice的規(guī)范定義語言,比CORBA IDL更小、更簡潔、更強(qiáng)大。Slice具有更少的語言結(jié)構(gòu),但卻更靈活。例如,一個(gè)內(nèi)建的字典類型提供直接快速訪問數(shù)據(jù)結(jié)構(gòu),異常的繼承允許更清晰地影射到支持異常處理的語言。同時(shí),Slice拋棄了CORBA IDL不需要的復(fù)雜性,例如屬性,inout參數(shù),上下文和傳值對象(Objects-by-Value)的復(fù)雜性。
5、Language Mappings(語言影射)
Ice支持到C++、Java、Python、PHP、C#和Visual Basic的語言影射。我們知道任何一個(gè)CORBA實(shí)現(xiàn)提供商都沒有提供那么多的語言影射選擇。
實(shí)際上大多數(shù)的CORBA提供商只提供C++和Java的影射,如果你想使用其它語言影射,你就要切換到不同的提供商的產(chǎn)品或使用沒有實(shí)驗(yàn)支持的CORBA實(shí)現(xiàn)。
6、Persistence(持久性)
Slice并不單單是一個(gè)接口定義語言。它也可以用來描述Ice對象進(jìn)行持久的屬性,使得很容易寫出支持對象持久的服務(wù)器端程序。
7、Metadata(元數(shù)據(jù))
Slice支持可擴(kuò)展的元數(shù)據(jù)設(shè)施,它允許Slice為實(shí)現(xiàn)應(yīng)用程序相關(guān)的某些目的而使用元數(shù)據(jù)的標(biāo)記。例如元數(shù)據(jù)可以用于定制不同于標(biāo)準(zhǔn)Java影射方式的影射來滿足某些特定程序的要求。
8、No any Type(沒有any數(shù)據(jù)類型)
Ice 沒有CORBA里Any類型的等價(jià)數(shù)據(jù)類型。這對于CORBA用戶來說可能感到很驚訝,因?yàn)锳ny數(shù)據(jù)類型在CORBA標(biāo)準(zhǔn)里被廣泛地使用。但是,Any 數(shù)據(jù)類型是多余的:程序語言象Java和C++并沒有Any數(shù)據(jù)類型,而且Any數(shù)據(jù)類型對分布式系統(tǒng)來說也不是屬于一個(gè)良好的設(shè)計(jì)。Any數(shù)據(jù)類型通常用在兩種情況下:一種是需要在系統(tǒng)的中介部分對接收到的數(shù)據(jù)直接進(jìn)行傳遞,而不用關(guān)心數(shù)據(jù)的真實(shí)類型,例如CORBA的Event服務(wù),另一種是用來作為 union(聯(lián)合結(jié)構(gòu)體)的一個(gè)等價(jià)物。
Ice可以通過發(fā)送和接收"blobs"的請求來滿足第一種情況,Slice的類繼承可以滿足第二種情況。任何一種情況,Ice的程序都更高效,更加具有類型安全,更加容易設(shè)計(jì)和實(shí)現(xiàn),而不會(huì)遇到使用CORBA Any數(shù)據(jù)類型時(shí)所具有的復(fù)雜性。
9、Ice Core(Ice的核心)
雖著時(shí)間的演化,CORBA的核心變得異常的復(fù)雜。一個(gè)初級的例子要在POA(CORBA的對象適配器)里面正確使用都需要很專業(yè)的知識(shí),即使你只想支持一小部分的技術(shù)特性。Ice的對象適配器,在另一方面來說,更加簡單、直觀、也跟POA一樣的功能強(qiáng)大:定義良好的API使得比POA開發(fā)一個(gè)可擴(kuò)展的程序項(xiàng)目需要更少的工作。
10、Ice Protocol(Ice協(xié)議)
IIOP是CORBA的弱點(diǎn)之一,具有太多的設(shè)計(jì)缺陷。例如,沒有缺少請求的封裝來防止消息的分發(fā)。低效的對齊規(guī)則導(dǎo)致了多余的數(shù)據(jù)拷貝。數(shù)據(jù)的編碼規(guī)則復(fù)雜,卻沒有帶來相應(yīng)的性能的提高,對象引用的編碼異常復(fù)雜,妨礙了有效的的編碼和在內(nèi)存共享的執(zhí)行。代碼集的協(xié)商是在標(biāo)準(zhǔn)下達(dá)成,會(huì)遭遇到很多沖突。所有這些復(fù)雜性意味著IIOP很難實(shí)現(xiàn),帶來了互操作性和性能上的問題。Ice的協(xié)議是簡單并且更加有效,它提供了一些IIOP沒有提供的特性,例如數(shù)據(jù)壓縮和批請求批量化。
11、Security(安全性)
安全性是CORBA的最大的一個(gè)難題。OMG已經(jīng)通過了多個(gè)標(biāo)準(zhǔn),但很多都沒有被廣泛地實(shí)現(xiàn),CORBA的客戶依然沒有一個(gè)可工作的安全的ORBs。當(dāng)設(shè)計(jì) Ice時(shí),和CORBA相比,安全性被認(rèn)為是基本的特性。這就是Ice提供一個(gè)真正能運(yùn)作的SSL實(shí)現(xiàn)的安全的防火墻的原因。
12、C++ Mapping(C++映射)
用 C++來使用CORBA非常困難。即使你是很有經(jīng)驗(yàn)的C++開發(fā)者。CORBA的C++映射在內(nèi)存管理和異常安全方面有很多的陷阱和缺陷。相較之下,Ice的C++映射非常簡單和直觀。它不會(huì)有因?yàn)殄e(cuò)誤而導(dǎo)致內(nèi)存的泄漏。要記住的映射規(guī)則的數(shù)目比CORBA的C++映射少得多,而且Ice的C++ 映射是基于工業(yè)標(biāo)準(zhǔn)的STL。
14、Scalability(可伸縮性)
當(dāng)你是一個(gè)專家時(shí),CORBA是一種可伸縮性很好的技術(shù)。但采用Ice,任何人都可以寫出高可伸縮性的應(yīng)用。例如,Ice實(shí)現(xiàn)了一個(gè)持久化的逐出器,你可以使用它來很容易地處理上百萬的對象,你所做的僅僅是在 Slice的定義里指定對象的數(shù)據(jù),剩下的工作Ice一手包辦:Ice運(yùn)行庫使用高速的數(shù)據(jù)庫來自動(dòng)加載和保存對象。
15、Versioning(版本化)
CORBA沒有任何機(jī)制來支持對象狀態(tài)的版本化。Freeze是Ice的持久服務(wù),它允許持久數(shù)據(jù)在Slice的定義中改變時(shí),很容易地進(jìn)行數(shù)據(jù)庫的移植。
16、Software Updates(軟件更新)
IcePatch是一個(gè)允許你更行客戶端軟件的工具。它使用壓縮來提高數(shù)據(jù)的傳輸,并使用校驗(yàn)值來保證一致性。CORBA完全沒有提供一個(gè)在分布式環(huán)境來進(jìn)行軟件更新的機(jī)制。
17、Typed Event Service(類型化的事件服務(wù))
CORBA有一個(gè)標(biāo)準(zhǔn)來提供類型化的事件服務(wù),但很少甚至沒有被實(shí)現(xiàn)。類型化的事件服務(wù)也有很多已知的問題,事實(shí)上它在真正環(huán)境的部署是不可用的。Ice從一開始就提供了類型化事件的服務(wù)。IceStorm是一個(gè)高效、類型化事件服務(wù)的實(shí)現(xiàn),它支持事件聯(lián)盟。
18、Facets(多接口)
CORBA支持繼承,DCOM支持聚合。在過去,有很多關(guān)于那一種是更好的方法的爭論。Ice以接口繼承加上以多接口形式的聚合來同時(shí)支持這兩種方式。Facets允許你在運(yùn)行的時(shí)候用動(dòng)態(tài)的聚合來擴(kuò)展類型來替代靜態(tài)的繼承。
19、Asynchronous Messages(異步消息)
CORBA 支持異步消息調(diào)用(AMI),但很少CORBA產(chǎn)品實(shí)現(xiàn)了AMI。Ice一開始就以簡單和有效的方式支持AMI。Ice也支持異步消息分發(fā)(AMD),這是CORBA里完全沒有的東西。AMD等價(jià)于客戶端的AMI,不過AMD是用在服務(wù)器端的。使用AMI,你可以發(fā)送了一個(gè)請求,然后在以后的一個(gè)事件收到服務(wù)器的結(jié)果時(shí)調(diào)用一個(gè)回調(diào)函數(shù)來處理返回的結(jié)果。而使用AMD,你可以將分發(fā)線程歸還給Ice,并在結(jié)果已經(jīng)準(zhǔn)備好發(fā)送到客戶端時(shí)再次調(diào)用分發(fā)線程。 AMI和AMD都能被連接起來,這允許你只消耗很少的資源就能構(gòu)建高效的路由程序。
AMI和AMD對客戶端和服務(wù)器端來說都是透明的。也就是,一個(gè)服務(wù)器程序不知道一個(gè)請求是否通過AMI調(diào)用發(fā)出的還是同步地調(diào)用發(fā)出的,客戶端程序也不知道一個(gè)操作的調(diào)用在服務(wù)器端是通過AMD分發(fā)處理的還是同步地處理的。當(dāng)需要使用AMI和AMD時(shí),不用修改Slice。
結(jié)束語:
我們希望上面的解釋能另你激發(fā)你對Ice的興趣。如果你有任何的問題或解釋,我們會(huì)邀請你加入我們的郵件列表。我們的目標(biāo)是不斷地改進(jìn)Ice,因此你的反饋對我們來說是很有價(jià)值的。
??????????????????????????????????????????????????????????????????????????????????? gigaboy翻譯完成于2005/7/4 3:02
?