分布式開發簡介 1 概述
分布式應用程式就是指應用程式分布在不同電腦上,通過網路來共同完成一項任務,通常為伺服器/用戶端模式。更廣義上理解“分布”,不只是應用程式,還包括資料庫等,分布在不同電腦,完成同一個任務。之所以要把一個應用程式分布在不同的電腦上,主要有兩個目的:
1) 分散伺服器的壓力
大型系統中,模組眾多,並發量大,僅用一個伺服器承載往往會發生壓力過大而導致系統癱瘓的情況。可以在橫向和縱向兩方面來進行拆分,把這些模組部署到不同的伺服器上。這樣整個系統的壓力就分布到了不同的伺服器上。
l 橫向:按功能劃分。
l 縱向:N層架構,其中的一些層分布到不同的伺服器上(分層的概念會在後文進行介紹)。
2) 提供服務,功能重用
使用服務進行功能重用比使用組件進行代碼重用更進一層。舉例來說,如果在一個系統中的三個模組都需要用到報表功能,一種方法是把報表功能做成一個單獨的組件,然後讓三個模組都引用這個組件,計算操作由三個模組各自進行;另一種方法是把報表功能做成單獨的服務,讓這三個模組直接使用這個服務來擷取資料,所有的計算操作都在一處進行,很明顯後者的方案會比前者好得多。
服務不僅能對內提供還能對外提供,如果其他夥伴需要使用我們的報表格服務,我們又不想直接把所有的資訊都公開給它們。在這種情況下組件方式就不是很合理了,通過公開服務並對服務的使用方做授權和驗證,那麼我們既能保證夥伴能得到他們需要的資料,又能保證核心的資料不公開。 2 架構
分布式的系統架構,主要從以下幾個方面來考慮:分層、面向服務以及分散式資料庫。 2.1 分層模型
一般地,我們將應用程式功能分為三個方面,對應3層架構模式。它們是資料層、中介層(商務邏輯層)和展示層,如下圖所示。
1) 資料層:儲存資料以及從資料庫中獲得較為原始的資料。
2) 商務邏輯層:介於資料層和展示層之間,負責處理來自資料存放區或發送給資料存放區的資料,把資料轉換成符合商務規則的有意義的資訊。
3) 展示層:從商務邏輯層獲得資訊並顯示給使用者,負責與使用者的互動。
三層架構模式,將商務邏輯和資料存放區分離,並分別用獨立的伺服器來承載,有利於分散系統的壓力。其優點具體如下所示:
1) 因為客戶機不包含商務邏輯,所以它們變得更加簡潔。這就使部署和維護工作更加容易,因為更新商務邏輯只需要對應用伺服器進行操作。
2) 客戶機與資料庫細節相分離。應用伺服器能夠與幾個不同的資料來源(分布在不同的資料庫伺服器上,下文中會對分散式資料庫系統進行介紹)協同工作,並且只對客戶機提供單一的訪問點。
3) 如果設計正確,商務邏輯就能夠被分布到幾個負載平衡的應用伺服器上。如果使用者需求增加,則可以添加更多的伺服器以滿足要求。同時,可以將商務邏輯發布為服務,供用戶端應用程式或者其它服務調用,構建成面向服務的系統架構。 2.2 面向服務
一家汽車租賃公司決定建立一個新的應用程式,用於汽車預定。該租車預定應用程式的建立者知道,應用程式所實現的商務邏輯必須能夠讓公司內外啟動並執行其它軟體訪問。因此,他們決定以面向服務的方式來建立此應用程式,並通過定義完善的一組服務,將此應用程式的邏輯公開給其他軟體。
為了實現這些服務並使之與其他軟體進行通訊,這一新應用程式將使用 .Net Framework的分散式運算技術,主要有:
1) ASP.NET Web 服務
它使用Soap互動資訊,是跨平台,跨語言的,目前大多數平台都支援基本的 Web 服務,所以在 WCF 發布之前,這是實現跨供應商互通性的最直接的方法。一般用在B/S結構的系統中,需要IIS進行啟動。
下圖示範了客戶機消費Web服務的情形。客戶機可以是一個Web應用程式、另一個Web服務等。
Web服務的消費者調用名為Method()的Web服務上的方法。實際調用向下層傳播,作為Soap訊息通過網路,並向上層傳播到Web服務。Web服務執行並響應(如果有的話)。實現Web服務與客戶機之間的雙向通知或者發布/訂閱功能是可能的,但是必須手工完成。客戶機可以實現自己的Web服務並在對伺服器的調用中傳遞該Web服務的引用。伺服器可以儲存引用,然後回調給客戶機。
2) .NET Remoting
專門為緊密耦合的 .NET 到 .NET 通訊而設計,它為本網中的應用程式提供了無縫而直接的開發體驗。一般用在C/S結構的系統中,需要通過一個WinForm或是Windows服務進行啟動。
3) Microsoft 訊息佇列 (MSMQ)
提供持久穩定的訊息傳送,這通常是間歇式連線應用程式程式的最佳解決方案。這些應用程式對資料傳送、工作量分離以及應用程式生存期均要求有保證。
4) WCF服務
WCF是使用Managed 程式碼建立和運行面向服務的應用程式的統一架構,是開發人員可以建立一個跨平台(可與在J2EE 伺服器構建、非 Windows 系統上啟動並執行應用程式通訊)、安全、可信賴、事務性的解決方案,能與目前已有的分布式系統相容。它是微軟分布式應用程式開發的集大成者,整合了.Net 平台下所有和分布式系統有關的技術。
以通訊範圍而言,WCF可以跨進程(同一機器上不同的應用程式之間的通訊)、跨子網、企業網(區域網路內不同的機器之間的通訊)甚至於Internet(互連網中不同的機器之間的通訊)。從宿主程式而言,可以是ASP.NET,EXE , WPF(Windows Presentation Foundation), Windows Forms, NT Service, COM+. 2.3 分散式資料庫系統
分散式資料庫系統由分佈於多個電腦結點上的若干個資料庫系統組成,它提供有效存取手段來操縱這些結點上的子資料庫。分散式資料庫在使用上可視為一個完整的資料庫,而實際上它是分布在地理分散的各個結點上。分散式資料庫系統適合於單位分散的部門,允許各個部門將其常用的資料存放區在本地,實施就地存放本地使用,從而提高響應速度,降低通訊費用。它有以下優點:
1) 解決組織機構分散而資料需要相互聯絡的問題。比如銀行系統,總行與各分行處於不同的城市或城市中的各個地區,在業務上它們需要處理各自的資料,也需要彼此之間的交換和處理,這就需要分布式的系統。
2) 均衡負載。負載在各處理機間分擔,可避免臨界瓶頸。
3) 可靠性高。資料分布在不同場地,且存有多個副本,即使個別場地發生故障,不致引起整個系統的癱瘓。
4) 可擴充性好。當需要增加新的相對自主的組織單位時,可在對當前機構影響最小的情況下進行擴充。
5) 提高系統效能系統。可以根據距離選擇離使用者最近的資料副本進行操作,減少通訊代價,改善整個系統的效能。
分散式資料庫系統雖然有諸多優點,但它同時也帶來了許多新問題。如:資料一致性問題、更新同步以及查詢分解等的複雜性、資料遠程傳遞的實現、通訊開銷的降低等,這使得分散式資料庫系統的開發變得較為複雜。 3 總結
分布式應用程式的開發,要對應用程式進行分層,各層之間相互獨立,通過服務或介面來進行調用,不僅便於開發的管理,也有利於整合其他平台上的應用程式,實現了功能模組的複用、重用,提高了應用程式的可擴充性。在業務資料量多的情況下,還要考慮構建分布式的資料庫系統,這可以通過DBMS自動管理的資料訂閱、分發技術實現資料庫的資料同步,以達到資料共用的目的;也可以與一些分布式的計算技術結合起來,比如說.NET Remoting技術來解決各資料庫之間的通訊問題,等等。
針對大型的網站應用程式,分布式部署策略可以從以下幾個方面考慮:
1) Proxy 伺服器實現請求的分離 。
2) 緩衝的分布式部署,提高系統效能。
3) 拆分網站的對外功能,例如不同網域名稱前、尾碼,URL 重寫。
4) 面向服務,每個服務分布到一台伺服器上 。
5) 資料庫的分布式叢集部署。
6) 設立專門的應用伺服器。比如發送郵件通知的服務。