代理者模式——學習筆記

熊貓夜未眠發表於2011-09-21

原文連結:enter link description here 作者:chgaowei

代理者系統結構模式可以用來構建帶有隔離元件的分散式系統,該軟體通過遠端服務呼叫進行互動。代理者元件負責協調通訊,諸如訊息轉發,以及傳回結果和異常。

我所知的一個應用代理者模式的架構是SOA。

1. 例子

分散式的城市資訊系統。

2. 語境

系統由獨立的、相互協作的、分散式的、異構的元件構成。

3. 問題

構建一個複雜的軟體系統,它是由獨立的和互操作的元件構成,而不是一個整體的應用程式,從而使系統具有可維護性,可變更性和靈活性。通過將系統分割為多個元件,系統變得可分佈和可擴充套件。可以參考SCA(服務元件架構)。

  1. 對客戶隱藏服務提供者資訊:比如他的地址,開發語言等。
  2. 元件在執行期可替換,移動,更改,而對客戶無影響。
  3. 能夠通過遠端呼叫服務。

4. 解決方案

通過引入代理者元件來隔離客戶端和服務提供端,對客戶隱藏服務端的細節。伺服器向代理者註冊自己的服務,客戶端通過向代理者傳送請求呼叫服務,代理者根據服務請求決定服務提供者,並且將請求路由到服務提供者。最後返回結果給客戶端。

5. 結構

分為:客戶機,伺服器,代理者,客戶端代理和服務端代理,網橋。

  1. 伺服器是服務的提供者,它們可能使用不同的技術構建,也就是它們可能是異構的。它們啟動後向代理者註冊服務。
  2. 客戶機呼叫服務,向代理者傳送請求。考慮一種情況,伺服器也可能是客戶端,這出現在它需要呼叫其他的服務端情況下。
  3. 代理者:接收伺服器的服務註冊,接收客戶端的服務請求,並路由的指定的伺服器。
  4. 客戶端代理和服務代理:是他們的一個小的模組,用來隱藏代理。它可以由代理者提供。
  5. 網橋:連線多個代理者。以構成更復雜的系統。

這種結構和SOA非常相像。SOA中的代理其實就是服務匯流排。

6. 動態特性

7. 實現

  1. 定義一個物件模型。
  2. 確定使用哪種方法公開服務。
  3. 指定代理者元件提供給客戶端和服務端的API。
  4. 用代理物件對客戶端和伺服器隱藏細節。
  5. 開發IDL編譯器。其實可以使用webservice。

8. 已解決的例子

9. 變體

  1. 直接通訊代理者系統:代理者將通訊通道開放給客戶端。
  2. 訊息傳送代理者系統:舉個簡單的例子,客戶端傳送一個服務請求,這個請求是一個訊息,代理收到訊息後,根據訊息的型別轉發至不同的伺服器。伺服器在具體解析這個請求。
  3. 交易器系統:客戶機的請求被唯一的轉發至目標伺服器。
  4. 介面卡代理者系統:應對異構的伺服器,分別提供代理者的介面卡,以對伺服器隱藏代理者的介面,實現靈活性。
  5. 會叫代理系統:反應式模型是事件驅動的,一旦事件到來,代理主將呼叫已註冊的方法來對事件作出反應。

10. 已知應用

11. 效果

優點:

  1. 對客戶端隱藏伺服器的資訊:位置,介面格式等。
  2. 服務元件的可變性和可擴充套件性。
  3. 代理者系統的可移植性。
  4. 不同代理者之間的互操作性。
  5. 可重用性。

缺點:

  1. 效率受限
  2. 容錯性差。

相關文章