ICE和ACE高效網絡編程中間件平臺

自從上世紀九十年代以來,計算工業一直在使用像DCOM 和CORBA這樣的面向對象中間件平臺。

在使分佈式計算能爲應用開發者所用的進程中,面向對象中間件是十分重要的一步。開發者第一次擁有了這樣的可能:可以構建分佈式應用——中間件平臺會照管大部分網絡雜務,比如整編(marshaling)和解編(unmarshaling)(對數據進行編碼與解碼,以進行傳送)、把邏輯對象地址映射到物理傳輸端點、根據客戶和服務器的原生機器架構改變數據的表示,以及應需自動啓動服務器。然而,由於一些原因,無論是DCOM 還是CORBA,都未能成功佔領大部分計算市場:(1) DCOM 是Microsoft 的獨家解決方案,在異種網絡中,各種機器會運行多種操作系統,無法使用COM。(2) DCOM 不能支持大量對象(數十萬或數百萬),這在很大程度上是它的分佈式垃圾收集機制來的開銷造成的。(3) 儘管有多家供應商提供CORBA 產品,幾乎不可能找到一家供應商,能夠爲異種網絡中的所有環境提供實現。儘管進行了大量標準化工作,不同的CORBA 實現之間仍缺乏互操作性,從而不斷地造成各種問題;而且,由於供應商常常會自行定義擴展,而CORBA 又缺乏針對多線程環境的規範,對於像C 或C++ 這樣的語言,源碼兼容性從未完全實現過.(4) DCOM和 CORBA都過於複雜。 在異種環境中,讓DCOM 和CORBA 共存從來都不是一件容易的事情:儘管有供應商提供互操作產,這兩種平臺之間的互操作從來都不是無縫的,而且難以管理,會產生互不相連的技術孤島。2002 年,Microsoft .NET 平臺取代了DCOM。但儘管.NET 提供了比DCOM 更強大的分佈式計算支持,它仍然是Microsoft 的獨家解決方案,因而不是異種環境下的選擇。另一方面,CORBA 近年來已停滯不前,許多供應商離開了市場,給消費者留下了不再受到廣泛支持的平臺;剩下的少數供應商在進一步標準化方面的興趣也已衰退,致使CORBA 規範中的許多缺陷未能得到解決,或是在它們被報告多年之後纔得到解決。在DCOM 和CORBA 衰敗的同時,分佈式計算社羣對SOAP和web services產生了濃厚的興趣。使用無處不在的WWW 基礎設施和HTTP來開發中間件平臺的想法十分迷人——至少在理論上。SOAP 和web services 曾經允諾要成爲Internet 上的分佈式計算通用語言。 但儘管引發了很大的公衆效應,發表了許多論文,web services 卻沒有能兌現其允諾:用web services 架構開發的商業系統非常少。其原因是:無論是在網絡帶寬方面,還是在CPU 開銷方面,SOAP 都會給應用造成嚴重的性能惡化,以致於該技術無法適用於許多有苛刻性能要求的系統。儘管SOAP 提供了"on-the-wire" 規範,要開發現實的應用,那仍是不夠的,因爲該規範提供的抽象層次太低。應用可以把各種SOAP 消息拼湊在一起,但這樣做極其繁瑣而易錯。缺乏更高級的抽象促使供應商提供各種應用開發平臺,使遵從SOAP 的應用開發自動化。但是,除了協議一級,這些開發平臺完全沒有標準化,不可避免是私有的,所以用一家供應商開發的應用無法與其他供應商的中間件產品一起使用。
關於SOAP 和web services 的架構安全性,有一些嚴重的擔憂。

這些使人不快的選擇,ZeroC, Inc. 決定開發Internet Communications Engine,簡稱Ice。Riverace公司(http://www.riverace.com)採用開放源碼商業模式對ACE進行商業支持。此外, ACE開發組的許多成員目前正在進行The ACE ORB(TAO,http://www.cs.wustl.edu/~schmidt/TAO.html)的開發工作。

ACE自適配通信環境(ADAPTIVE Communication Environment)是可自由使用、開放源碼的面向對象(OO)框架(framework),它實現了許多用於併發通信軟件的核心模式。ACE提供了一組豐富的可重用C++包裝外觀(wrapper facade)和框架組件,可跨多種平臺完成通用的通信軟件任務,其中包括:事件多路分離和事件處理器分派、信號處理、服務初始化、進程間通信、共享內存管理、消息路由、分佈式服務動態(重)配置、併發執行和同步,等等。ACE的目標用戶是高性能和實時通信服務和應用的開發者。它簡化了使用進程間通信、事件多路分離、顯式動態鏈接和併發的OO網絡應用和服務的開發。此外,通過服務在運行時與應用的動態鏈接,ACE使系統的配置和重配置得以自動化。

ICE (Internet Communications Engine)是ZeroC提供的一款高性能的中間件,基於ICE可以實現電信級的解決方案。前面我們提到過在設計網站架構的時候可以使用ICE實現對網站應用的基礎對象操作,將基礎對象操作和數據庫操作封裝在這一層,在業務邏輯層以及表現層(java,php,.net,python)進行更豐富的表現與操作,從而實現比較好的架構。基於ICE的數據層可以在未來方便的進行擴展。ICE支持分佈式的部署管理,消息中間件,以及網格計算等等。

Ice和ACE在性能與開發簡便上深化了.CORBA這是一個老牌的分佈式中間件平臺,並且以其標準實現困難,開發者使用困難而著稱。  Ice 採用的許多思想也能在CORBA 及以前的一些分佈式計算平臺中找到。在有些方面, Ice 與CORBA 非常接近,而在另外一些方面,它們的差異則意義深遠,並且在架構上有着廣泛的影響。如果你曾經使用過CORBA,瞭解這些差異十分重要。儘管從表面看來, Ice 對象模型與CORBA 對象模型是一樣的,但它們在一些重要方面卻有所不同。類型系統Ice 對象和CORBA 對象一樣,都只有一個派生層次最深的(most derived) 主接口。但Ice 對象可以提供其他接口作爲facets。重要的是要注意到,一個Ice 對象的所有facets 都具有相同的對象標識,也就是說,客戶看到的是具有多個接口的單個對象,而不是看到多個對象、每個對象有不同的接口。facets 提供了極大的架構靈活性。特別地,它們爲版本管理問題提供了一種解決途徑:你可以簡單地給已經存在的對象增加新的facet,輕鬆地擴展某個服務器的功能,而不會破壞已有的、已經部署的客戶。代理語義Ice 代理(CORBA 對象引用的等價物) 不是不透明的。 客戶只要知道對象的類型和標識,無需其他系統組件的支持,就可以創建出代理(在使用間接綁定時, 不必瞭解對象的傳輸地址)。
 
ACE的好處包括:
(1)增強可移植性:在ACE組件的幫助下,很容易在一種OS平臺上編寫併發網絡應用,然後快速地將它們移植到各種其他的OS平臺上。而且,因爲ACE是開放源碼的自由軟件,你無需擔心被鎖定在特定的操作系統平臺或編譯器上。
(2)更好的軟件質量:ACE的設計使用了許多可提高軟件質量的關鍵模式,這些質量因素包括通信軟件靈活性、可擴展性、重用性和模塊性。
(3)更高的效率和可預測性:ACE經仔細設計,支持廣泛的應用服務質量(QoS)需求,包括延遲敏感應用的低響應等待時間、高帶寬應用的高性能,以及實時應用的可預測性。
(4) 更容易轉換到標準的高級中間件:TAO使用了ACE提供的可重用組件和模式。它是CORBA的開發源碼、遵循標準的實現,併爲高性能和實時系統作了優化。爲此,ACE和TAO被設計爲能良好地協同工作,以提供全面的中間件解決方案。
ACE還包含一個高級的網絡編程框架,集成並增強了較低層次的C++包裝外觀。該框架支持將併發分佈式服務動態配置進應用。

ACE的框架部分包含以下組件:
(1)事件多路分離組件:ACE Reactor(反應器)和Proactor(前攝器)是可擴展的面向對象多路分離器,它們分派應用專有的處理器,以響應多種類型的基於I/O、定時器、信號和同步的事件。
(2)服務初始化組件:ACE Acceptor(接受器)和Connector(連接器)組件分別使主動和被動的初始化任務與初始化一旦完成後通信服務所執行的應用專有的任務去耦合。
(3)服務配置組件:ACE Service Configurator(服務配置器)支持應用的配置,這些應用的服務可在安裝時和/或運行時被動態裝配。
(4)分層的流組件:ACE Stream組件簡化了像用戶級協議棧這樣的由分層服務組成的通信軟件應用的開發。
(5)ORB適配器組件:通過ORB適配器,ACE可以與單線程和多線程CORBA實現進行無縫集成。
ACE 框架組件便利了通信軟件的開發,它們無需修改、重編譯、重鏈接,或頻繁地重啓運行中的應用,就可被更新和擴展。在ACE中,這樣的靈活性是通過結合以下要素來獲得的:(1)C++語言特性,比如模板、繼承和動態綁定,(2)設計模式,比如抽象工廠、策略和服務配置器,以及(3)OS機制.
除了OS適配層、C++包裝外觀和框架組件,ACE還提供了包裝成自包含組件的標準分佈式服務庫。儘管這些服務組件並不是ACE框架庫的嚴格組成部分,它們在ACE中扮演了兩種角色:
1. 分解出可重用分佈式應用的“積木”:這些服務組件提供通用的分佈式應用任務的可重用實現,比如名字服務、事件路由、日誌、時間同步和網絡鎖定。
2. 演示常用的ACE組件的用例:這些分佈式服務還演示了怎樣用像Reactor、Service Configurator、Acceptor和Connector、Active Object,以及IPC包裝這樣的ACE組件來有效地開發靈活、高效和可靠的通信軟件。
  
Ice是一種面向對象的中間件平臺。從根本上說,這意味着Ice爲構建面向對象的客戶-服務器應用提供了工具、API 和庫支持。Ice應適合在異種環境中使用:客戶和服務器可以用不同的編程語言編寫,可以運行在不同的操作系統和機器架構上,並且可以使用多種網絡技術進行通信。無論部署環境如何,這些應用的源碼都是可移植的。

ICE的好處包括:

(1)客戶無需詢問外部的查找服務,比如命名服務,就能夠創建代理。實際上,對象標識和對象的名字被認爲是同一事物。這樣能夠消除命名服務的內容與實際情況失去同步所可能帶來的問題;同時,爲了讓客戶和服務器正常工作、必須正常運轉的系統組件的數目也會減少。
(2)通過創建所需的初始對象的代理,客戶可以輕鬆地進行自引導(bootstrap)。這樣就無需使用單獨的引導服務了。
(3) 不需要對串化代理進行不同的編碼。一種統一的表示就足夠了,而這種表示是人可以閱讀的。這樣就避免了CORBA 的三種不同的對象引用編碼(IOR、corbaloc,以及corbaname)所帶來的各種複雜問題。開發者多年使用CORBA 的經驗表明,對象引用的不透明性很成問題:它不僅需要更加複雜的API 和運行時支,還會妨礙我們構建現實的系統。爲此, CORBA 增加了像corbaloc 和corbaname 這樣的機制,以及用於進行引用比較的is_equivalent 和hash 操作(這些操作的定義有問題)。所有這些機制都降低了對象引用的不透明性,但CORBA 平臺的其他部分仍試圖維持引用是不透明的這樣一個錯覺。結果,開發者在兩方面所得的東西都是最糟的:引用既不是完全不透明的,也不是完全透明的——這樣所帶來的混亂和複雜性相當大。對象標識Ice 對象模型假定對象標識在任何地方都是唯一的(但並沒有把這個要求強加給應用開發者)。這種對象標識的主要好處是,你可以遷移服務器,也可以把多個不同服務器中的對象合併進 一個服務器,而不用考慮名字衝突的問題:如果每個Ice 對象都具有唯一的標識,它就不可能與另外的域中的對象的標識發生衝突。Ice 對象模型還使用了強對象標識:使用本地的客戶端操作,你就能確定兩個代理表示的是否是同一個對象(在CORBA 中,要進行可靠的標識比較,你必須調用遠地對象上的操作)。本地標識比較要高效得多,而且對於有些應用領域而言(比如分佈式事務服務),這樣的比較也至關緊要。

Ice 在架構上提供的好處
(1)面向對象的語義:Ice “在線路上”完全保留了 面向對象範型。所有的操作調用都使用遲後綁定,所以操作的實現的選定,是根據對象在運行時的(而不是靜態的)實際類型決定的。
(2)持同步和異步的消息傳遞:Ice 提供了同步和異步的操作調用和分派,並且通過IceStorm 提供了發佈-訂閱消息傳遞機制。這樣,你可以根據你的應用的需要來選擇通信模型,而不必把你的應用硬塞進某種模型裏。
(3)支持多個接口:通過facets,對象可以提供多個不相關的接口,同時又跨越這些接口、保持單一的對象標識。這提供了極大的靈活性,特別是在這樣的情況下:應用在發生演化,但又需要與更老的、已經部署的客戶保持兼容。
(4)機器無關性:客戶及服務器與底層的機器架構屏蔽開來。對於應用代碼而言,像字節序和填充這樣的問題都隱藏了起來。
      (5)語言無關性:客戶和服務器可以分別部署,所用語言也可以不同(目前支持C++、Java,以及PHP (客戶端))。 客戶和服務器所用的Slice 定義建立兩者之間的接口合約,這樣的定義也是它們唯一需要達成一致的東西。
(6)操作系統無關性:Ice API 完全是可移植的,所以同樣的源碼能夠在Windows 和UNIX上編譯和運行。
(7)線程支持:Ice run time 完全是線程化的,其API 是線程安全的。 作爲應用開發者,(除了在訪問共享數據時進行同步)你無需爲開發線程化的高性能客戶和服務器付出額外努力。
(8) 傳輸機制無關性:Ice 目前採用了TCP/IP 和UDP 作爲傳輸協議。客戶和服務器代碼都不需要了解底層的傳輸機制(你可以通過一個配置參數選擇所需的傳輸機制)。
(9)位置和服務器透明性:Ice run time 會負責定位對象,並管理底層的傳輸機制,比如打開和關閉連接。客戶與服務器之間的交互顯得像是無連接的。如果在客戶調用操作時,服務器沒有運行,你可以通過IcePack 讓它們隨需啓動。服務器可以遷移到不同的物理地址,而不會使客戶持有的代理失效,而客戶完全不知道對象實現是怎樣分佈在多個服務器進程上的。
(10) 安全性:通過SSL 強加密,可以使客戶和服務器完全安全地進行通信,這樣,應用可以使用不安全的網絡安全地進行通信。你可以使用Glacier穿過防火牆,實現安全的請求轉發,並且完全支持回調。
(11)內建的持久機制:使用Freeze,創建持久的對象實現變成了一件微不足道的事情。Ice提供了對高性能數據庫Berkeley DB[18] 的內建支持。  Ice 的源碼是開放的。儘管要使用Ice 平臺,並不一定要閱讀源碼,通過源碼你可以瞭解各種事情是怎樣實現的,或把這些代碼移植到新的操作系統上。

總而言之, Ice 和ACE 提供了一流的分佈式計算開發和部署環境,比我們所知道的其他任何平臺都更完整。提供適用於異種環境的面向對象中間件平臺,提供一組完整的特性,支持廣泛的領域中的實際的分佈式應用的開發,避免不必要的複雜性,使平臺更易於學習和使用。提供一種在網絡帶寬、內存使用和CPU 開銷方面都很高效的實現,提供一種具有內建安全性的實現,使它適用於不安全的公共網絡。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章