正確使用CORBA,ICE等分布式技術的一種思路

2021-03-31 13:22:43 字數 3336 閱讀 2705

目前分布式應用軟體越來越多,但在如何平衡分布式應用和單機應用的處理效能有一些麻煩。另外就是從一種分布式技術遷移到另一種分布式技術也很困難。乙個原因就是我們的上層應用**和底層的分布式技術(

corba,ice,socket

corba,ice,socket

等具體分布式技術不是核心,核心是我們的客戶需要的業務功能。

下面以corba

和socket(asn.1協議)

為例子說明這種分離架構。

1.所有業務功能都通過介面定義;

2.所有使用業務功能的**都必須通過介面工廠獲取業務介面的例項

介面+類工廠的方式。保證任何乙個業務模組(元件)對外(包括大平台內部各個業務模組或元件之間)提供的所有服務都是介面,同時提供類工廠讓外部訪問業務模組(元件)中某個介面的實現。

說明:1)

iexpand

是需要外部定製的介面,當然可能存在多個,如果乙個業務模組(元件)不需要外部定製,就不存在這個介面了;2)

iplatform

是提供外部使用的功能介面,當然可能存在多個;

3)iplatformfactory

是類工廠的介面,類工廠也用介面定義,是因為需要對外遮蔽底層通訊細節,比如

asn.1,corba

等;當然這個介面的定義應該是很少變化的;一般而言,乙個業務模組或元件只需要乙個類工廠的介面定義;

4)tfactory

是乙個類工廠的實現,這是外部唯一可見的乙個實現類。

5)platformimpl

是乙個內部用標準

c++開發的乙個功能實現體,它對外部是不可見的。

所有業務都是利用這個核心架構來實現,下面考慮

corba

,asn.1

介面的適配方式,這兩種方式都有乙個共同點:都可以看作是

client/server

結構,需要我們提供

client/server

兩端的外部介面

利用adaptor

和delegate

模式來遮蔽

corba

技術細節。

說明:1)

iserveridl

利用idl

語言定義

iplatform

這個介面,是外部不可見的;

2)corbaserverimpl

從iserveridl

和iplatform

繼承下來,將

iserveridl

的任何呼叫轉調

iplatform

的介面實現;同時

corbaserverimpl

還使用委託模式,將

iplatform

的介面呼叫轉調給

platformimpl

來實現,這樣

corbaserverimpl

在實現corba

物件的時候僅僅是將

corba

資料結構轉換為標準

c++的介面,將

corba

呼叫轉換為普通的

c++api

介面呼叫,它內部沒有複雜的業務邏輯,實現非常簡單

3)tcorbaserve***ctory

是內部負責建立

corbaserverimpl

物件,外部完全看不到

corba

的任何資訊

4)這裡沒有標出

iexpand

介面,因為它與

corba

任何細節無關

採用delegate

模式來實現

說明:1)

iclientidl

是利用idl

定義的iplatform

介面,這是

idl編譯器編譯後的客戶端的介面,這是外部不可見的

2)corbaclientimpl iplatform

同時繼承,將

iplatform

介面的都轉呼叫

iclientidl

介面來實現,它是外部不可見的

3)tcorbaclientfactory

負責建立

corbaclientimpl

例項,對外遮蔽

corba

的實現細節

4)iexpand

介面沒有在圖中出現,是因為它和

corba

的任何細節都無關

同corba

的適配方式,採用

adaptor

和delegate

模式來實現

說明:1)

iasn

介面定義傳送訊息和接收訊息兩個介面

2)asn.1serverimpl

採用adpator

模式和委託模式來實現,將

iplatform

的介面轉呼叫

platformimpl

來實現的,另外它分析收到的所有

asn.1

的訊息,將訊息內容轉換為

iplatform

的介面呼叫,然後再將

iplatform

介面呼叫的返回值組裝為乙個

asn.1

訊息傳送出去

3)tasn.1serve***ctory

內部負責

asn.1serverimpl

例項的建立,對外遮蔽

asn.1

的任何技術細節

4)iexpand

介面沒有出現,是因為它和

asn.1

的任何細節無關

採用adaptor

模式來實現。

說明:1)

asn.1clientimpl

將iplatform

介面呼叫轉換為

asn.1

訊息傳送出去,然後將收到的

asn.1

響應訊息轉為為標準

c++的資料結果作為

iplatform

介面呼叫的返回值和輸出引數

2)tasn.1clientfactory

對外遮蔽

asn.1

的技術細節

從上面可以看出,對於外部使用者來說,是內部是採用

corba,asn.1

還是純粹的

c++api

介面都沒有任何區別。我們甚至可以同時提供這三種方式,使用者根據需要進行選擇。比如所有業務模組(元件)都是同機執行,我們可以放棄

corba,asn.1

技術,以後要改為分布式組網方式,只需要替換為乙個類工廠庫即可。以後要支援一種新的分布式技術,只需要採用同樣的方式實現乙個適配層即可,上層業務的業務的所有實現都是可以重用的。

最後回到一點:應用軟體的核心是業務不是底層分布式技術。

CSS等分布局方法

css等比例劃分,在css布局中是比較重要的,下面分享幾種常用方法和 一下相容性。emmet html ul.float ul li 5 con h3 p.float ul float ul li該樣式相容性較好,但是無法實現當裡面的列增多時比例也隨著變化,必須手動修改,當然你也可以使用乙個js來調...

H5頁面如何進行等分布局?

眾所周知,flex布局可以使得一行元素等分排布,但是有時候我們的需求並不是每一行的元素都是等分排布,比如應該設定成下面都樣式 1 彈性布局flex此時不再適用,因為彈性布局是會使得每一行都是根據div的個數n進行將每乙個div都均分1 n的寬度。2 使用div布局,且必須設定成行內塊 inlne b...

正確使用記憶體

對於初學者來說,記憶體是個神秘的空間。程式的絕大部分錯誤,也是在於記憶體的使用不當造成的,而且這些錯誤有些都是隱藏很深的。所以,如何掌握記憶體的使用,通曉系統對記憶體的管理手段,將是軟體成功的乙個非常關鍵的因素。首先我們要了解記憶體的分配方式。一般來說,記憶體的分配方式有三種 1 從靜態儲存區域分配...