分布式模式之Broker模式


 

引入一個Broker組件,解耦客戶端和服務端。服務端注冊自己到Broker,通過暴露接口的方式允許客戶端接入服務。客戶端是通過Broker發送請求的,Broker轉發請求道服務端,並將請求的結果或異常回發給客戶端。通過使用Broker模式,應用可以通過發送消息訪問遠程的服務。

這一架構模式允許動態的改變、添加、刪除服務端,從客戶端的角度,這些都是透明的。

結構:

Broker模式定義了6中類:Client,Server,Client_Proxy,Server_Proxy,Broker,Bridge。

Server:

l 責任:處理特定領域的問題,實現服務的細節,注冊自己到Broker,處理請求並返回結果或異常。

l 協作類:Server_Proxy,Broker

Client:

Client是需要訪問遠程服務的應用程序,為此,Client發送請求到Broker,並從Broker上接收響應或異常。Client和Server只是邏輯上相關而已,實際上Client並不知道Server的確切位置。

 

l 責任:1. 實現用戶端功能,2. 發送請求到Broker,3. 接收相應和異常。

l 協作類:Broker,Client_Proxy

Broker:

Broker可以被看成消息轉發器。Broker也負責一些控制和管理操作。它能夠定位服務端的位置,若發生異常,能夠將異常捕獲傳給Client。Broker需要提供注冊服務的接口給Server。如果請求來自其他的Broker,本地的Broker需要轉發請求並最終將結果或異常回應給相應的遠程Broker。Broker提供的服務和name service非常相像(如DNS、LDAP)。

l 責任:1. 注冊服務。2. 提供服務API。3. 轉發消息。4. 容錯處理。5. 與其他Broker的交互。6。 定位服務。

l 協作類:Client_Proxy,Server_Proxy,Bridge

Client_Proxy:

連系Client和Broker,這一層保證了通訊的透明性,使Client調用遠程服務就像調用本地的服務一樣。

 

l 責任:1. 封裝特定的系統調用。2. 封裝通訊的參數、控制信息等。

l 協作類:Client,Broker。

Server_Proxy:

Server_proxy是與Client_Proxy相對應的,它接受請求,解包消息,解析出參數並調用服務的實現接口。

l 責任:1. 封裝特定的系統調用。2. 封裝通訊的參數、控制信息等。3. 調用server的服務接口。

l 協作類:Server,Broker。

Bridge:

Bridge用來連接各個Broker,一般這個組件是可選的。當系統是發雜的網絡組成時,有可能需要這一角色。

l 責任:1. 封裝特定的網絡特性。2. 傳遞Broker之間的通訊。

l 協作類:Broker。

應用場景一:

直接通訊方式。Client和Server相互理解他們之間的通訊協議。Broker主要完成Client和Server之間的握手。之后所有的消息、異常都是由Client與Server直接交互。(想象DNS)。簡單對象交互如圖:

應用場景二:

 

 

 

 

l Broker啟動,完成自身的初始化,之后進入事件循環,等待消息到來。

l Server啟動,首先執行自身的初始化,然后注冊自己到Broker。

l Broker接收Server的注冊請求,將其加入到可使用服務的列表,並回應Ack給Server。

l Server接收Ack,進入事件監聽循環,等待消息到來。

l Client調用遠程服務對象的方法,Client_Proxy封裝消息請其發送給Broker。

l Broker查詢可使用的Server,將請求轉發給Server。

l Server_Proxy解析消息,分離出參數和控制信息,並調用特定的Server實現接口。Server處理完的結果通過Server_proxy封裝成消息轉發到Server。

l Broker將相應消息轉發給正確的Client_Proxy,Client受到響應繼續其他邏輯。

簡單對象交互如圖:

應用場景三:

 

l Broker A接收到請求,交由Server處理,但是發現該Server位於其他的網絡節點。

l Broker A將請求轉發給Bridge A,Bridge A將請求進行必要的格式化,傳送給Bridge B。

l Bridge B將請求進行必要的格式化,轉化成Broker B可以理解的格式,並轉發給Broker B。Broker B執行場景二中的過程,處理的結果按如上逆序返回。

簡單對象交互如圖:

部署示意圖:

 

 

 

總結:

 

u 優點:

1. 服務的位置透明性。

2. 組件的可變性及擴展性。由於Server是注冊到Broker上的,所以Server可以動態的增加、刪除、改變。

3. Broker之間可交互。

4. 可重用性。

5. 由於組件的耦合度較小,調試和測試的工作也是可控的。

 

u 缺點:

1. 效率;增加了一層Broker的消息轉發,效率有所降低。

2. 容錯能力必須要特別考慮。

3. 調試和測試的工作加大。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM