<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zyskm用夢想丈量人生,用奔跑丈量激情

    分布式模式之Broker模式

    轉發 http://blog.chinaunix.net/uid-23093301-id-90459.html 問題來源: 創建一個游戲系統,其將運行在互聯網的環境中。客戶端通過WWW服務或特定的客戶端軟件連接到游戲服務器,隨著流量的增加,系統不斷的膨脹,最終后臺數據、業務邏輯被分布式的部署。然而相比中心化的系統,復雜度被無可避免的增大了,該如何降低各個組件之間的耦合度。 挑戰: 需要保證可伸縮性、可維護性、可更新性,需要將服務劃分為各個相對獨立的組件,組件被分布式的部署,它們之間通過進程間通信方式實現交互。服務的增加、刪除、改變都應該被支持。理想情況,以開發者的角度看,集中化的系統和分布式的系統在中心邏輯上沒有什么不同。為實現這個目標: l 可以遠程的訪問服務,而對于訪問者,服務的位置應該是透明的。 l 提供服務的組件可以增加、刪除、改變,而且這些在運行期同樣應該被支持。 l 訪問服務的客戶端不應該關心服務的實現細節。 解決方案: 引入一個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. 調試和測試的工作加大。

    posted on 2015-10-26 10:32 zyskm 閱讀(257) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 久久久久亚洲精品天堂久久久久久| 精品久久久久国产免费| 亚洲AV无码之日韩精品| 亚洲国产精品无码久久| 国产男女性潮高清免费网站| 伊人久久五月丁香综合中文亚洲| 成人片黄网站A毛片免费| 国产亚洲中文日本不卡二区| 久久久久免费看黄A片APP| 四虎亚洲精品高清在线观看| 日韩一级视频免费观看| 国产亚洲精品仙踪林在线播放| 亚洲AⅤ优女AV综合久久久| 久99久无码精品视频免费播放| 亚洲综合另类小说色区| 在线观看的免费网站无遮挡| 亚洲国产av高清无码| 一本无码人妻在中文字幕免费| 亚洲成a人片在线不卡一二三区| 尤物永久免费AV无码网站| 免费又黄又爽又猛大片午夜| 久久久久久久尹人综合网亚洲| 久久国产乱子伦免费精品| 亚洲精品无码mⅴ在线观看| 免费一级特黄特色大片在线 | 亚洲入口无毒网址你懂的| 成人免费视频小说| 一级特黄a大片免费| 亚洲无线电影官网| 免费羞羞视频网站| 成年网在线观看免费观看网址| 亚洲精品无码精品mV在线观看| 久久精品免费一区二区| 亚洲国产成人无码AV在线| 中文字幕不卡亚洲| 免费h片在线观看网址最新| 国产精品亚洲二区在线| 西西人体44rt高清亚洲| 国产美女无遮挡免费视频网站 | 777爽死你无码免费看一二区| 亚洲丁香婷婷综合久久|