二十世紀九十年代中期以來(lái),業(yè)界一直在使用DCOM和CORBA這樣的面向對象的中間件平臺。在分布式的應用中,中間件平臺托管了大部分網(wǎng)絡(luò )事務(wù),比如對數據進(jìn)行編碼與解碼以進(jìn)行傳送,把邏輯對象地址映射到物理傳輸端點(diǎn),根據客戶(hù)和服務(wù)器的機器架構改變數據的表示,以及按照需要自動(dòng)啟動(dòng)服務(wù)器。
DCOM和CORBA由于自身的缺點(diǎn),都沒(méi)有成功占領(lǐng)大部分分布式計算的市場(chǎng)。
DCOM是Microsoft的獨家解決方案,在異構網(wǎng)絡(luò )中,各種機器運行多種操作系統,無(wú)法都使用DCOM。
同時(shí)DCOM不支持創(chuàng )建大量數目的對象(數十萬(wàn)或數百萬(wàn)),這在很大程度上是它的分布式垃圾收集機帶來(lái)的開(kāi)銷(xiāo)造成的。
雖然有多家供應商提供CORBA產(chǎn)品,但是沒(méi)有一家供應商能夠為異構網(wǎng)絡(luò )環(huán)境中的所有操作系統環(huán)境提供實(shí)現。盡管進(jìn)行了大量標準化工作,不同的CORBA實(shí)現之間仍缺乏互操作性,從而不斷地造成各種問(wèn)題;而且,由于供應商常常會(huì )自行定義擴展,而CORBA又缺乏針對多線(xiàn)程環(huán)境的規范,對于像C或C++這樣的語(yǔ)言,源碼兼容性從未完全實(shí)現過(guò)。
在異構網(wǎng)絡(luò )環(huán)境中,讓DCOM和CORBA共存不是一件容易的事情。
2002年,Microsoft推出了.NET平臺取代了DCOM。
.NET提供了比DCOM更強大的分布式計算支持,但是仍然是Microsoft的獨家解決方案。
另一方面,CORBA技術(shù)停滯不前,許多供應商離開(kāi)了市場(chǎng),CORBA規范中的許多缺陷未能得到及時(shí)解決。
在DCOM 和CORBA衰敗的同時(shí),分布式計算領(lǐng)域的研發(fā)人員對SOAP和Web Services產(chǎn)生了濃厚的興趣。
SOAP 和Web Services技術(shù)一度引發(fā)了很大的公眾效應,業(yè)界發(fā)表了許多論文。
但是無(wú)論是在網(wǎng)絡(luò )帶寬方面,還是在CPU開(kāi)銷(xiāo)方面,SOAP都會(huì )給應用程序留下嚴重的性能瓶頸。
應用程序可以把各種SOAP 消息拼湊在一起,但這樣做極其繁瑣而容易出錯。
Web Services的標準化進(jìn)程非常緩慢,多年以來(lái)一直停留在技術(shù)層面的實(shí)現上。
許多專(zhuān)家擔心SOAP和Web Services的架構安全性。
在這樣的背景下,網(wǎng)絡(luò )通訊的中間件ICE和ACE誕生了。
ICE的全稱(chēng)是 ICE是一款高性能的中間件,支持分布式的部署管理,消息中間件,以及網(wǎng)格計算等等。
ICE的優(yōu)點(diǎn)主要有:
面向對象的語(yǔ)義,所有的操作調用都使用遲后綁定。
支持同步和異步的消息傳遞,提供了同步和異步的操作調用和分派,提供了發(fā)布——訂閱消息傳遞機制。
與硬件架構無(wú)關(guān),客戶(hù)端及服務(wù)器與底層的硬件架構屏蔽開(kāi)來(lái)。對于應用代碼而言,像字節序和填充這樣的問(wèn)題都隱藏了起來(lái)。
與上層的編程語(yǔ)言無(wú)關(guān),客戶(hù)端和服務(wù)器可以分別部署,所用語(yǔ)言也可以不同,支持C++、Java語(yǔ)言,客戶(hù)端支持PHP語(yǔ)言。
與采用的操作系統無(wú)關(guān),ICE完全是可移植的,同樣的源碼能夠在Windows、Linux、MacOS和UNIX上編譯和運行。
完全是線(xiàn)程化的,其API是線(xiàn)程安全的。
采用TCP、IP 和UDP作為傳輸協(xié)議,客戶(hù)端和服務(wù)器代碼都不需要了解底層的傳輸機制。
服務(wù)器的位置是對用戶(hù)透明的,ICE例程負責定位對象,并管理底層的傳輸機制,比如打開(kāi)和關(guān)閉連接??蛻?hù)與服務(wù)器之間的交互顯得像是無(wú)連接的。服務(wù)器可以遷移到不同的物理地址,而不會(huì )使客戶(hù)持有的代理失效,而客戶(hù)完全不知道對象實(shí)現是怎樣分布在多個(gè)服務(wù)器進(jìn)程上的。
采用SSL強加密,可以使客戶(hù)和服務(wù)器完全安全地進(jìn)行通信。
采用內建的持久機制創(chuàng )建持久的對象。并且提供了對高性能數據庫Berkeley DB的內建支持。
ACE提供了一組豐富的可重用C++包裝外觀(guān)(Wrapper Facade)和框架組件,
可跨多種平臺完成通用的通信軟件任務(wù),其中包括:
事件多路分離和事件處理器分派、信號處理、服務(wù)初始化、進(jìn)程間通信、
共享內存管理、消息路由、分布式服務(wù)動(dòng)態(tài)(重)配置、并發(fā)執行和同步等等。
ACE簡(jiǎn)化了使用進(jìn)程間通信、事件多路分離、顯式動(dòng)態(tài)鏈接和并發(fā)的面向對象的網(wǎng)絡(luò )應用和服務(wù)的開(kāi)發(fā)。
ACE的好處包括:
增強可移植性:在A(yíng)CE組件的幫助下,很容易在一種OS平臺上編寫(xiě)并發(fā)網(wǎng)絡(luò )應用,然后快速地將它們移植到各種其他的OS平臺上。
更好的軟件質(zhì)量:ACE使用了許多可提高軟件質(zhì)量的關(guān)鍵設計模式,提供了通信軟件靈活性、可擴展性、重用性和模塊性。
更高的效率和可預測性:ACE支持廣泛的應用服務(wù)質(zhì)量(QoS)需求,包括延遲敏感應用的低響應等待時(shí)間、高帶寬應用的高性能,以及實(shí)時(shí)應用的可預測性。
更容易轉換到標準的高級中間件:TAO使用了ACE提供的可重用組件和模式,按照CORBA的標準實(shí)現,并且為高性能和實(shí)時(shí)系統作了優(yōu)化。
ACE包含一個(gè)高級的網(wǎng)絡(luò )編程框架,集成并增強了較低層次的C++包裝外觀(guān)。
該框架支持將并發(fā)分布式服務(wù)動(dòng)態(tài)配置進(jìn)應用。
ACE的框架部分包含以下組件:
事件多路分離組件:ACE Reactor(反應器)和Proactor(前攝器)是可擴展的面向對象多路分離器,它們分派應用專(zhuān)有的處理器,以響應多種類(lèi)型的基于I/O、定時(shí)器、信號和同步的事件。
服務(wù)初始化組件:ACE Acceptor(接受器)和Connector(連接器)組件分別使主動(dòng)和被動(dòng)的初始化任務(wù)與初始化一旦完成后通信服務(wù)所執行的應用專(zhuān)有的任務(wù)去耦合。
服務(wù)配置組件:ACE Service Configurator(服務(wù)配置器)支持應用的配置,這些應用的服務(wù)可在安裝時(shí)或運行時(shí)被動(dòng)態(tài)裝配。
分層的流組件:ACE Stream組件簡(jiǎn)化了像用戶(hù)級協(xié)議棧這樣的由分層服務(wù)組成的通信軟件應用的開(kāi)發(fā)。
ORB適配器組件:通過(guò)ORB適配器,ACE可以與單線(xiàn)程和多線(xiàn)程CORBA實(shí)現進(jìn)行無(wú)縫集成。
同為網(wǎng)絡(luò )通信中間件,ICE和ACE的區別在于,前者是對通信對象的封裝,
例如如客戶(hù)端的ICE核心和服務(wù)器端的ICE核心的不同,
而后者是對通信本身的封裝,例如對套接字的封裝,對同步異步通信方式的封裝。
后者比前者更加底層,更加抽象。ACE可以認為是通用網(wǎng)絡(luò )編程框架軟件,而ICE則是一個(gè)跨平臺的RPC軟件。
參考文檔:
Michi Henning和Mark Spruiell編寫(xiě)的《Distributed Programming with ICE》;
Douglas C. Schmidt編寫(xiě)的《C++ Network Programming with Patterns, Frameworks, and ACE》。
Internet Communications Engine,即因特網(wǎng)通信引擎。
ICE是由ZeroC, Inc.公司開(kāi)發(fā)的。
ACE的全稱(chēng)是ADAPTIVE Communication Environment,即自適應的通信環(huán)境。
ACE自從問(wèn)世以來(lái)得到了多家公司的商業(yè)支持。
ICE和ACE目前都是開(kāi)放源代碼的中間件。


聯(lián)系客服