1 概述 分佈式應用程序就是指應用程序分佈在不一樣計算機上,經過網絡來共同完成一項任務,一般爲服務器/客戶端模式。更廣義上理解「分佈」,不僅是應用程序,還包括數據庫等,分佈在不一樣計算機,完成同一個任務。之因此要把一個應用程序分佈在不一樣的計算機上,主要有兩個目的:web
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是使用託管代碼創建和運行面向服務的應用程序的統一架構,是開發者能夠創建一個跨平臺(可與在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) 設立專門的應用服務器。好比發送郵件通知的服務。