複製鏈接
請複製以下鏈接發送給好友

ICE

(面向對象中間件)

鎖定
網絡通信引擎ICE(Internet Communications Engine)是Zero C公司的分佈式系統開發專家實現的一種新的高性能的面向對象中間件平台。從根本上説, ICE 為構建面向對象的客户-服務器應用提供了工具、 API( Application Program Interface)和庫支持。 [1]  基於ICE可以實現電信級的解決方案。
軟件名稱
ICE
軟件語言
C++,Java,c#等
開發商
ZeroC

ICE技術簡介

中間件(middleware)是基礎軟件的一大類,屬於可複用軟件的範疇。顧名思義,中間件處於操作系統軟件與用户的應用軟件的中間。中間件在操作系統、網絡和數據庫之上,應用軟件的下層,總的作用是為處於自己上層的應用軟件提供運行與開發的環境,幫助用户靈活、高效地開發和集成複雜的應用軟件。
在設計網站架構的時候可以使用ICE實現對網站應用的基礎對象操作,將基礎對象操作和數據庫操作封裝在這一層,在業務邏輯層以及表現層(java,php,.net,python)進行更豐富的表現與操作,從而實現比較好的架構。基於ICE的數據層可以在未來方便的進行擴展。ICE支持分佈式的部署管理,消息中間件,以及網格計算等等。 [2] 
ICE 作為一種新型的面向對象中間件,目前並未得到廣泛地應用。然而它在架構上為應用開發提供的種種好處,如面向對象的語義、支持同步和異步的消息傳遞、支持多個接口、機器、語言、操作系統無關性、線程支持、位置和服務器的透明性、高度的安全性、內建的恆久機制以及開放的源碼等等,它有着非常強大的技術優勢。在構建三層分佈式系統方面, ICE 中間件技術有着良好的發展前景。

ICE實現原理

客户與服務器
按照常規的理解,客户與服務器的劃分在於兩者承擔的角色不同:客户是發出請求的一方,服務器是響應請求、提供服務的一方。然而在實際應用中,很多服務器並不是純粹的服務器,它們常常充當某些客户的服務器,但為了完成它們的客户的請求,它們又會充當其他的服務器的客户。
ICE ICE
同理,很多客户機也不是純粹的客户。例如,客户可以在服務器上啓動一個長時間運行的操作,在啓動該操作時,客户可以向服務器提供回調對象( callback object),供服務器用於在操作完成時向客户發出通知。在這種情況下,客户在啓動操作時充當客户,而在接收操作完成通知時充當服務器。
ICE對象
Ice 對象是本地或遠地的地址空間中、能響應客户請求的實體。一個Ice對象可在一個或多個服務器中實例化。每個Ice對象都有一個或多個接口。一個接口是一個對象所支持的一系列有名稱的操作,客户通過調用操作來發出請求。一個操作有零個或更多參數,以及一個返回值。每個Ice 對象都有一個唯一的對象標識。對象標識是用於把一個對象與其他所有對象區別開來的標識值。 Ice 對象模型假定對象標識是全局唯一的,也就是説,在一個Ice 通信域中,不會有兩個對象具有相同的對象標識。對象標識既可以通過調用GenerateUUID全局唯一產生,也可以根據自己的喜好隨意創建一個,只要沒與其他對象標識重複即可。對象標識的定義如下:
module Ice
struct Identity
string name;
string category;
;
;
代理
要想與某個Ice對象聯繫,客户必須持有這個對象的代理。對客户而言,代理就是Ice對象的本地代表(該對象可能在遠地)。代理所封裝的信息有:尋址信息:用於讓客户端run time 聯繫正確的服務器對象標識:用於確定服務器中的哪一個對象是請求的目標可選的facet 標識符:用於確定代理所引用的是對象的哪一個facet。
Servants
Ice 對象是一種具有類型、標識,以及尋址信息,在本地或遠地的地址空間中、能響應客户請求的實體的概念性實體。而Servants是服務器端用具體的編程語言實現的實體,並且在服務器的地址空間中進行實例化。 Servants 為“客户發送的操作調用”提供服務器端行為。
動態映射表
動態映射表( Active servant map),簡稱ASM。之所以稱為動態映射表,是因為它可以動態維護servant的數量,可以添加,也可以刪除。它是一個查找表,用於把對象標識映射到servant;要激活一個servant,就將它添加進動態映射表。這個過程可以看作是在“Ice 對象的標識”與“對應的用編程語言編寫的、負責為該ICE對象處理請求的servant”之間創建鏈接。這個鏈接創建好之後,一旦客户端的請求到來時, Ice run time 就可以將該請求分派給正確的servant來執行。動態servant映射表的幾種操作行為如下:
add
add 操作把一個具有指定標識的servant 增加到ASM中。一旦add 被調用,請求就會分派給這個servant。返回值是這個servant 所體現的Ice對象的代理。你不能用同一標識多次調用add:如果你試圖在ASM 中增加一個已經存在的標識,就會引發AlreadyRegisteredException
addWithUUID
addWithUUID 操作的行為和add 操作一樣,但你不需要為servant 提供標識。addWithUUID 會生成一個UUID,作為對應的Ice 對象的標識。
remove
remove 操作中斷對象標識與其servant 之間的關聯,從ASM 中移除對應的條目。一旦servant 解除了激活,新到來的針對已移除的對象標識的請求會引發ObjectNotExistException

ICE實現過程

Ice 對象的實現過程如下:
服務器端
ICE ICE
(1) 創建 servant 類,並在服務器端 Ice run time 上註冊。
(2) 實例化 servant 類,創建具體的 servant。
(3) 為這個 servant 所體現的 Ice 對象創建標識。
(4) 激活 servant(即將 servant 添加進動態 servant 映射表)。 [3] 
客户端
(1) 當客户端要調用某一操作時, 客户端 run time 會將對象標識以及請求一起發給服務器。
(2) 服務器端的對象適配器接收到了請求和對象標識, 對象適配器繼而根據這個對象標識,在它所維護管理的active servant map中查找其相對應的正確的servant。
(3) 若找到了與對象標識對應的正確的servant,就把調用分派給它。若查找不到,就會引發Object Not Exist Exception。最後客户端接收到來自服務器端的返回值或異常信息。

ICE設計目標

ICE主要設計目標是:
  1. ·成為適用於異種環境的面向對象中間件平台。
  2. 具有一組完整的特性,支持廣泛領域中的實際的分佈式應用的開發。
  3. ·去掉不必要的複雜性,使平台更易於學習和使用。
  4. 是一種在網絡帶寬、內存使用和CPU 開銷方面都很高效的實現。
  5. 是一種具有內建安全性的實現,使它適用於不安全的公共網絡。

ICE優點

(一) 面向對象的語義
支持面向對象的分佈式計算技術
(二) 適合在異種環境中使用
客户和服務器可以用不同的編程語言編寫,可以運行在不同的操作系統和機器架構上,並且可以使用多種網絡技術進行通信。無論應用環境如何,這些源碼是可以移植的。
(三) IceStorm 的發佈/訂閲機制
IceStorm 是一種發佈-訂閲服務, 能夠解除客户與服務器的耦合。 在本質上, IceStorm充當的是事件分發交換機。發佈者把事件發給這個服務,由它發給訂閲者。這樣,發佈者發佈的單個事件就可以發送給多個訂閲者。 IceStorm適用於構建高效的事件轉發機制。
(四) 利用 Glacier 機制,可以方便地實現穿越防火牆
Glacier 是Ice 防火牆服務:它能讓客户與服務器通過防火牆安全地進行通信,且不犧牲安全性。
(五) 採用了 TCP/UDP 協議
ICE 提供了一種 RPC 協議,既可以把 TCP/IP、也可以把 UDP 用作底層傳輸機制。(可以通過配置一個參數來選擇需要的傳輸機制)。另外, ICE 還允許採用 SSL 作為傳輸機制,讓客户和服務器間所有通信都進行加密。
(六) 可靠的安全機制
ICE 採用了 SSL 加密技術,使得客户機和服務器哪怕是在不安全的網絡中,也可以安全地進行通信。 [4] 
參考資料