分散式開發簡介
1 概述
分散式應用程式就是指應用程式分佈在不同計算機上,通過網路來共同完成一項任務,通常為伺服器/客戶端模式。更廣義上理解“分佈”,不只是應用程式,還包括資料庫等,分佈在不同計算機,完成同一個任務。之所以要把一個應用程式分佈在不同的計算機上,主要有兩個目的:
1) 分散伺服器的壓力
大型系統中,模組眾多,併發量大,僅用一個伺服器承載往往會發生壓力過大而導致系統癱瘓的情況。可以在橫向和縱向兩方面來進行拆分,把這些模組部署到不同的伺服器上。這樣整個系統的壓力就分佈到了不同的伺服器上。
l 橫向:按功能劃分。
l 縱向:N層架構,其中的一些層分佈到不同的伺服器上(分層的概念會在後文進行介紹)。
2) 提供服務,功能重用
使用服務進行功能重用比使用元件進行程式碼重用更進一層。舉例來說,如果在一個系統中的三個模組都需要用到報表功能,一種方法是把報表功能做成一個單獨的元件,然後讓三個模組都引用這個元件,計算操作由三個模組各自進行;另一種方法是把報表功能做成單獨的服務,讓這三個模組直接使用這個服務來獲取資料,所有的計算操作都在一處進行,很明顯後者的方案會比前者好得多。
服務不僅能對內提供還能對外提供,如果其他合作伙伴需要使用我們的報表服務,我們又不想直接把所有的資訊都公開給它們。在這種情況下元件方式就不是很合理了,通過公開服務並對服務的使用方做授權和驗證,那麼我們既能保證合作伙伴能得到他們需要的資料,又能保證核心的資料不公開。
2 架構
分散式的系統架構,主要從以下幾個方面來考慮:分層、面向服務以及分散式資料庫。
2.1 分層模型
一般地,我們將應用程式功能分為三個方面,對應
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是使用託管程式碼建立和執行面向服務的應用程式的統一架構,是開發者可以建立一個跨平臺(可與在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) 代理伺服器實現請求的分離 。
2) 快取的分散式部署,提高系統性能。
3) 拆分網站的對外功能,例如不同域名前、字尾,URL 重寫。
4) 面向服務,每個服務分佈到一臺伺服器上 。
5) 資料庫的分散式叢集部署。
6) 設立專門的應用伺服器。比如傳送郵件通知的服務。
如有侵權請聯絡我