国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

第5章分布式系統(tǒng)模式 Broker(代理程序)

2019-11-17 02:11:53
字體:
供稿:網(wǎng)友

第5章分布式系統(tǒng)模式 Broker(代理程序)

許多復(fù)雜的軟件系統(tǒng)運行在多個處理器或分布式計算機上。將軟件分布在多臺計算機上的原因有多種,例如:

  • 分布式系統(tǒng)可以利用多個 CPU 或一群低成本計算機的計算能力。
  • 某個軟件可能僅在特定計算機上可用。
  • 出于安全考慮,軟件的各部分可能必須運行在不同的網(wǎng)段上。
  • 一些服務(wù)可能是由業(yè)務(wù)合作伙伴提供的,并且只能通過 Internet 進行訪問。

但是,實現(xiàn)分布式系統(tǒng)是不容易的,因為您必須處理諸如并發(fā)性、跨平臺連接和不可靠網(wǎng)絡(luò)連接之類的問題。

影響因素

在構(gòu)建分布式系統(tǒng)時,必須協(xié)調(diào)下列影響因素:

  • 雖 然分布式系統(tǒng)具有許多優(yōu)點,但是它們往往也會使軟件系統(tǒng)變得很復(fù)雜。運行在同一網(wǎng)絡(luò)上的進程或計算機之間存在物理的和邏輯的邊界。要使運行在不同進程或計 算機上的對象跨越這些邊界相互通信,您必須處理諸如通信、編碼和安全之類的問題。如果您將這些實現(xiàn)細節(jié)與應(yīng)用程序代碼混合在一起,則通信基礎(chǔ)結(jié)構(gòu)中的簡單 更改就會導(dǎo)致大量的代碼更改。
  • 在開發(fā)完成之后,通常需要分布系統(tǒng)。例如,可能將軟件分布在多臺服務(wù)器上以提高處理能力。您不會希望在生命周期中如此晚的階段更改應(yīng)用程序代碼。
  • 跨進程通信的細節(jié)可能是相當(dāng)乏味的。您必須處理 TCP/ip 套接字、封送和拆收、序列化、超時和許多其他難題。因此,有必要讓一個特殊的工作組致力于處理基礎(chǔ)結(jié)構(gòu),以便讓應(yīng)用程序開發(fā)人員不必了解遠程通信。
  • 要維護能夠在部署時將組件移動到不同位置這一靈活性,您必須避免對具體組件的位置進行硬編碼。

解決方案

使用 Broker 模式可以隱藏遠程服務(wù)調(diào)用的實現(xiàn)細節(jié),方法是將這些細節(jié)封裝到一個與業(yè)務(wù)組件自身不同的層 [Buschmann96]。

這個層為客戶端提供一個接口,使客戶端可以像調(diào)用任何本地接口一樣調(diào)用方法。但是,客戶端接口內(nèi)的方法會觸發(fā)要對遠程對象執(zhí)行的服務(wù)。這對客戶端是透明的, 因為遠程服務(wù)對象實現(xiàn)了相同的接口。該模式將啟動遠程服務(wù)調(diào)用的業(yè)務(wù)組件當(dāng)作"客戶端",而將響應(yīng)遠程服務(wù)調(diào)用的組件當(dāng)作"服務(wù)器"。

圖 1 顯示沒有進行任何分布的簡單示例的靜態(tài)結(jié)構(gòu)。客戶端直接調(diào)用服務(wù)器上的 performFunctionA 方法。僅當(dāng)服務(wù)器對象與客戶端對象駐留在同一臺計算機上時,才能發(fā)生這種情況。

圖 1:沒有實現(xiàn)分布的結(jié)構(gòu)

圖 2 顯示實現(xiàn)分布后的靜態(tài)結(jié)構(gòu)。

圖 2:實現(xiàn)分布后的結(jié)構(gòu)

ServiceInterface 是一個必需的抽象,對于在服務(wù)器端不必公開實現(xiàn)細節(jié)的情況下將由服務(wù)器提供的服務(wù)來說,這樣的抽象可以通過提供有關(guān)該服務(wù)的和約而使分布成為可能。在實現(xiàn) 分布時,將添加客戶端和服務(wù)器代理,以處理通過網(wǎng)絡(luò)將方法調(diào)用及其參數(shù)發(fā)送到服務(wù)器,然后將響應(yīng)發(fā)回客戶端的所有傳送工作。代理將完成所有數(shù)據(jù)封送和拆 收、安全控制、傳輸通道配置和任何其他附加工作。客戶端只需調(diào)用客戶端代理的 performFunctionA 方法,就像它是本地調(diào)用一樣,這是因為客戶端代理實際上實現(xiàn)的是 ServerInterface。對客戶端進行的代碼更改將是最低限度的,因此您可以開發(fā)整個業(yè)務(wù)域模型,而不必知道系統(tǒng)是否是分布式的。對遠程服務(wù)調(diào)用的實現(xiàn)方式的任何更改都將被限制在代理類以內(nèi),并且不會對域模型產(chǎn)生任何影響。圖 3 顯示這些組件之間的一種交互方案。

圖 3:實現(xiàn)分布后的行為

服務(wù)器查找

Broker 解 決方案所針對的是前面所述的大多數(shù)問題。但是,因為客戶端代理直接與服務(wù)器代理進行通信,所以客戶端必須能夠在編譯時找到服務(wù)器的位置。這意味著,您不能 在運行時將服務(wù)器更改或移動到不同位置。要克服這一限制,需要避免公開服務(wù)器的確切位置。而應(yīng)當(dāng)將新組件(即代理程序組件)部署在一個眾所周知的位置,然 后向客戶端公開該位置。此后,代理程序組件負責(zé)為客戶端查找服務(wù)器。代理程序組件還會實現(xiàn)一個用于添加和刪除服務(wù)器組件的儲存庫,這樣就有可能在運行時添 加、刪除或交換服務(wù)器組件。圖 4 顯示包含代理程序組件的靜態(tài)結(jié)構(gòu)。

這種類型的功能通常稱為"名稱服務(wù)"。查找遠程對象是企業(yè)計算中的一項常見要求。因此,許多平臺實現(xiàn)了名稱服務(wù),例如,Microsoft 使用 Active Directory® 目錄服務(wù)。

圖 4:具有服務(wù)器查找功能的代理程序結(jié)構(gòu)

代 理程序駐留在一個不應(yīng)該頻繁更改的、眾所周知的位置。已被激活并且準備接收請求的任何服務(wù)器都將向代理程序注冊自己,以便下一次客戶端向代理程序請求這種 類型的服務(wù)器時,代理程序能夠使用它。這還可能提高系統(tǒng)的性能和可用性,因為它使您可以擁有多個同時運行并服務(wù)于多個客戶端的、完全相同的服務(wù)器組件。這 種機制有時稱為負載平衡。圖 5 顯示了一個這些組件之間的交互方案示例。

圖 5:具有服務(wù)器查找功能的代理程序行為

代理程序作為中介

在 前面的方案中,代理程序僅負責(zé)為客戶端查找服務(wù)器。這種方案中,客戶端從代理程序獲得服務(wù)器的位置,然后在不涉及代理程序的情況下直接與服務(wù)器進行通信。 但是,在某些情況下,我們并不希望客戶端與服務(wù)器之間進行直接通信。例如,由于安全原因,您可能希望將所有服務(wù)器放在位于防火墻后面的公司專用網(wǎng)絡(luò)中,并 且只允許代理程序訪問它們。這種情況下,您必須讓代理程序轉(zhuǎn)發(fā)服務(wù)器和客戶端這二者之間的所有請求和響應(yīng),而不是讓它們直接相互通信。圖 6 顯示將此模型修訂后的靜態(tài)結(jié)構(gòu)。

圖 6:用作中介的代理程序的結(jié)構(gòu)

圖 7 顯示用作客戶端和服務(wù)器之間的信使的代理程序的交互圖。此示例還說明了客戶端和服務(wù)器之間的通信可以是異步的(注意 sendRequest 調(diào)用上的開放箭頭)。

也 存在這樣的情況:客戶端必須對同一服務(wù)器進行一系列方法調(diào)用,才能完成一個持續(xù)時間長而且復(fù)雜的業(yè)務(wù)事務(wù)。在這樣的情況中,服務(wù)器必須在前后客戶端調(diào)用之 間保持狀態(tài)不變。然后,代理程序必須確保客戶端在基本會話內(nèi)所進行的所有服務(wù)器調(diào)用都會被路由到完全相同的服務(wù)器組件。

圖 7:用作中介的代理程序的行為

Broker 模式具有 Layered application 模式的許多優(yōu)點和缺點。

優(yōu)點

Broker 具有下列優(yōu)點:

  • 隔離。通過將所有與通信有關(guān)的代碼分離到它自己的層中,從而使其與應(yīng)用程序隔離。您可以決定在不必更改任何應(yīng)用程序代碼的情況下以分布方式運行應(yīng)用程序,或者在一臺計算機上運行全部應(yīng)用程序。
  • 簡單。將復(fù)雜的通信邏輯封裝到單獨的層中,可以使問題變得更簡單。為代理程序編寫代碼的工程師不必關(guān)心無法預(yù)知的用戶要求和業(yè)務(wù)邏輯,而應(yīng)用程序開發(fā)人員也不必關(guān)心多播協(xié)議和 TCP/IP 路由。
  • 靈活。通過將多個函數(shù)封裝在一個層中,可以允許您以不同的實現(xiàn)來交換該層。例如,您可以從 DCOM 切換到 .NET Remoting,再切換到標準 Web Service,而不用更改應(yīng)用程序代碼。

缺點

可惜的是,抽象層可以損害性能。基本規(guī)則是,擁有的信息越多,就可以優(yōu)化得越好。使用單獨的代理程序?qū)涌赡茈[藏有關(guān)應(yīng)用程序如何使用較低層的細節(jié),這可能又 會阻止較低層執(zhí)行特定的優(yōu)化操作。例如,使用 TCP/IP 時,路由協(xié)議不知道正在路由的是什么數(shù)據(jù)包。因此,很難決定包含視頻流的數(shù)據(jù)包(例如)應(yīng)該具有比包含垃圾郵件的數(shù)據(jù)包更高的路由優(yōu)先級。

安全考慮事項

包含敏感業(yè)務(wù)數(shù)據(jù)的服務(wù)器組件通常位于公司的專用網(wǎng)絡(luò)中,并受到防火墻的保護。而代理程序位于外圍網(wǎng)絡(luò)(也稱為非管制區(qū) (DMZ) 或屏蔽子網(wǎng))中,外圍網(wǎng)絡(luò)是作為公司專用網(wǎng)絡(luò)與外部公用網(wǎng)絡(luò)之間的中性區(qū)域而插入的小型網(wǎng)絡(luò)。只允許從外圍網(wǎng)絡(luò)訪問服務(wù)器組件,而不允許從外部公用網(wǎng)絡(luò)訪 問這些組件。這一額外的網(wǎng)絡(luò)層阻止了外部用戶直接訪問服務(wù)器。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 藁城市| 荣昌县| 莒南县| 渝中区| 临江市| 罗定市| 太保市| 绥化市| 罗定市| 凌云县| 邵武市| 兰坪| 无锡市| 建瓯市| 前郭尔| 长阳| 竹山县| 龙泉市| 昭苏县| 萍乡市| 平远县| 汾阳市| 汶川县| 庆安县| 赤峰市| 桦川县| 崇仁县| 依兰县| 张家界市| 松桃| 专栏| 乐亭县| 江城| 龙川县| 禄劝| 阿巴嘎旗| 延川县| 余庆县| 门源| 文山县| 中宁县|