ICE中間件學習筆記 基礎理論篇

ICE中間件學習筆記 基礎理論篇

1、“最多一次”語義

    idempotent操作,如:x=1,執行多次對結果無影響,反之如:x++,執行多次對結果有影響。Ice的內在機制保證了在第一次確定失敗時纔會進行重試,將操作標記爲idempotent,將使Ice runtime更積極的進行錯誤恢復。


2、同步方法調用

    缺省情況下,客戶端將使用同步方式進行遠程過程調用,期間客戶端線程被掛起,並在調用結束時恢復。


4、異步方法調用

    Ice支持異步的方法調用(AMI),客戶端除了傳遞通常的參數外,還需傳遞一個回調對象,當操作完成時,Ice runtime會調用回調對象的方法。

注意:服務器的servant並不能區分客戶端是同步調用還是異步調用。


5、異步方法分派(AMD)

   是AMI的服務器等價物,缺省方式是同步分派,服務器run time向上調用服務器應用代碼,當操作在執行時,一個執行線程會被“束縛”在服務器中,直到操作完成纔會釋放。如果調用的客戶端數量衆多,服務器將無法承受。

    而異步方法分派,則是runtime僅給應用代碼一個通知,應用並不會立即處理該操作,當操作的結果可用時,應用發起API調用,告訴Ice runtime最後返回客戶端。

注意:客戶端並不能區分服務器執行的是同步還是異步分派。


6、單向方法調用

    具有“盡力”語義,客戶端runtime會把調用交給本地傳輸機制,實際的調用由操作系統異步發送。單向調用是不可靠的,由參數錯誤、對象不存在等引起的問題並不會反饋到客戶端。

     對服務器而言無法區分是單向調用還是雙向調用。只有當目標對象提供了面向流的傳輸機制時(TCP/IP或SSL)才能使用單向調用。

注意:即使單向操作是在面向流的機制中發送的,也沒有辦法保證服務器的調用次序是預想中的,因爲服務器是異步調用,線程間的調度是無序的。


7、成批的單向調用

    當客戶端發起數量衆多的單向調用時,帶給服務器的開銷是巨大的,runtime將爲每一個調用在用戶模式/內核模式中切換。成批單向調用允許客戶端累積一定數量的單向調用後,調用API通知runtime進行發送,從而形成一個通信包發送給服務器,同時服務器可保證是按調用順序依次執行。


8、數據報調用

    與第6條類似,包括不可靠特性和無序特性,特別的,數據包採用UDP而單向調用採用TCP/IP。帶來的問題是丟包的可能性,適用於LAN網及對及時性要求比可靠性高的intel網。


9、成批的數據報調用

    通過緩衝機制,客戶端在累積了一定量時調用API刷出,需注意的是包大小盡量比網絡PDU限制小,否則會產生UDP分包而加大丟包概率,同時可能出現部分丟包的情況,成批數據報調用在服務器端將順序執行。


10、ICE自有服務(好像有些老,隨進度更新吧)

IcePack(定位服務):隨需啓動服務器,部署描述符,簡單的對象查找服務

IceBox(簡單應用服務):協調應用組件啓動或停止,應用服務器可作爲動態庫而不是進程部署。

IceStorm(發佈-訂閱服務):降低客戶端與服務端的耦合,大量訂閱的場景中很有用(如證券報價應用),同時可作爲聯盟應用,多個服務器實例運行在不同機器上,實現負載均衡。

IcePatch(軟件補丁服務):客戶端連接後請求獲得特定應用的更新,服務器以壓縮形式下發,節省帶寬。

Glacier(防火牆服務):客戶端-服務端雙方向公鑰加密。

Freeze(對象持久服務):內建的對象持久服務,採用高性能數據庫BerkeleyDB實現存儲。

IceGrid(網格):實現服務集羣。

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