1) 分散服務(wù)器的壓力
成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給成都創(chuàng)新互聯(lián)公司一個(gè)展示的機(jī)會(huì)來證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。大型系統(tǒng)中,模塊眾多,并發(fā)量大,僅用一個(gè)服務(wù)器承載往往會(huì)發(fā)生壓力過大而導(dǎo)致系統(tǒng)癱瘓的情況。可以在橫向和縱向兩方面來進(jìn)行拆分,把這些模塊部署到不同的服務(wù)器上。這樣整個(gè)系統(tǒng)的壓力就分布到了不同的服務(wù)器上。
l 橫向:按功能劃分。
l 縱向:N層架構(gòu),其中的一些層分布到不同的服務(wù)器上(分層的概念會(huì)在后文進(jìn)行介紹)。
2) 提供服務(wù),功能重用
使用服務(wù)進(jìn)行功能重用比使用組件進(jìn)行代碼重用更進(jìn)一層。舉例來說,如果在一個(gè)系統(tǒng)中的三個(gè)模塊都需要用到報(bào)表功能,一種方法是把報(bào)表功能做成一個(gè)單獨(dú)的組件,然后讓三個(gè)模塊都引用這個(gè)組件,計(jì)算操作由三個(gè)模塊各自進(jìn)行;另一種方法是把報(bào)表功能做成單獨(dú)的服務(wù),讓這三個(gè)模塊直接使用這個(gè)服務(wù)來獲取數(shù)據(jù),所有的計(jì)算操作都在一處進(jìn)行,很明顯后者的方案會(huì)比前者好得多。
服務(wù)不僅能對(duì)內(nèi)提供還能對(duì)外提供,如果其他合作伙伴需要使用我們的報(bào)表服務(wù),我們又不想直接把所有的信息都公開給它們。在這種情況下組件方式就不是很合理了,通過公開服務(wù)并對(duì)服務(wù)的使用方做授權(quán)和驗(yàn)證,那么我們既能保證合作伙伴能得到他們需要的數(shù)據(jù),又能保證核心的數(shù)據(jù)不公開。
2 架構(gòu)
分布式的系統(tǒng)架構(gòu),主要從以下幾個(gè)方面來考慮:分層、面向服務(wù)以及分布式數(shù)據(jù)庫。
2.1 分層模型
一般地,我們將應(yīng)用程序功能分為三個(gè)方面,對(duì)應(yīng)3層架構(gòu)模式。它們是數(shù)據(jù)層、中間層(業(yè)務(wù)邏輯層)和表示層,如下圖所示。
1) 數(shù)據(jù)層:存儲(chǔ)數(shù)據(jù)以及從數(shù)據(jù)庫中獲得較為原始的數(shù)據(jù)。
2) 業(yè)務(wù)邏輯層:介于數(shù)據(jù)層和表示層之間,負(fù)責(zé)處理來自數(shù)據(jù)存儲(chǔ)或發(fā)送給數(shù)據(jù)存儲(chǔ)的數(shù)據(jù),把數(shù)據(jù)轉(zhuǎn)換成符合商務(wù)規(guī)則的有意義的信息。
3) 表示層:從業(yè)務(wù)邏輯層獲得信息并顯示給用戶,負(fù)責(zé)與用戶的交互。
三層架構(gòu)模式,將業(yè)務(wù)邏輯和數(shù)據(jù)存儲(chǔ)分離,并分別用獨(dú)立的服務(wù)器來承載,有利于分散系統(tǒng)的壓力。其優(yōu)點(diǎn)具體如下所示:
1) 因?yàn)榭蛻魴C(jī)不包含業(yè)務(wù)邏輯,所以它們變得更加簡(jiǎn)潔。這就使部署和維護(hù)工作更加容易,因?yàn)楦聵I(yè)務(wù)邏輯只需要對(duì)應(yīng)用服務(wù)器進(jìn)行操作。
2) 客戶機(jī)與數(shù)據(jù)庫細(xì)節(jié)相分離。應(yīng)用服務(wù)器能夠與幾個(gè)不同的數(shù)據(jù)源(分布在不同的數(shù)據(jù)庫服務(wù)器上,下文中會(huì)對(duì)分布式數(shù)據(jù)庫系統(tǒng)進(jìn)行介紹)協(xié)同工作,并且只對(duì)客戶機(jī)提供單一的訪問點(diǎn)。
3) 如果設(shè)計(jì)正確,業(yè)務(wù)邏輯就能夠被分布到幾個(gè)負(fù)載均衡的應(yīng)用服務(wù)器上。如果用戶需求增加,則可以添加更多的服務(wù)器以滿足要求。同時(shí),可以將業(yè)務(wù)邏輯發(fā)布為服務(wù),供客戶端應(yīng)用程序或者其它服務(wù)調(diào)用,構(gòu)建成面向服務(wù)的系統(tǒng)架構(gòu)。
2.2 面向服務(wù)
一家汽車租賃公司決定創(chuàng)建一個(gè)新的應(yīng)用程序,用于汽車預(yù)定。該租車預(yù)定應(yīng)用程序的創(chuàng)建者知道,應(yīng)用程序所實(shí)現(xiàn)的業(yè)務(wù)邏輯必須能夠讓公司內(nèi)外運(yùn)行的其它軟件訪問。因此,他們決定以面向服務(wù)的方式來創(chuàng)建此應(yīng)用程序,并通過定義完善的一組服務(wù),將此應(yīng)用程序的邏輯公開給其他軟件。
為了實(shí)現(xiàn)這些服務(wù)并使之與其他軟件進(jìn)行通信,這一新應(yīng)用程序?qū)⑹褂?.Net Framework的分布式計(jì)算技術(shù),主要有:
1) ASP.NET Web 服務(wù)
它使用Soap交互信息,是跨平臺(tái),跨語言的,目前大多數(shù)平臺(tái)都支持基本的 Web 服務(wù),所以在 WCF 發(fā)布之前,這是實(shí)現(xiàn)跨供應(yīng)商互操作性的最直接的方法。一般用在B/S結(jié)構(gòu)的系統(tǒng)中,需要IIS進(jìn)行啟動(dòng)。
下圖演示了客戶機(jī)消費(fèi)Web服務(wù)的情形。客戶機(jī)可以是一個(gè)Web應(yīng)用程序、另一個(gè)Web服務(wù)等。
Web服務(wù)的消費(fèi)者調(diào)用名為Method()的Web服務(wù)上的方法。實(shí)際調(diào)用向下層傳播,作為Soap消息通過網(wǎng)絡(luò),并向上層傳播到Web服務(wù)。Web服務(wù)執(zhí)行并響應(yīng)(如果有的話)。實(shí)現(xiàn)Web服務(wù)與客戶機(jī)之間的雙向通知或者發(fā)布/訂閱功能是可能的,但是必須手工完成??蛻魴C(jī)可以實(shí)現(xiàn)自己的Web服務(wù)并在對(duì)服務(wù)器的調(diào)用中傳遞該Web服務(wù)的引用。服務(wù)器可以保存引用,然后回調(diào)給客戶機(jī)。
2) .NET Remoting
專門為緊密耦合的 .NET 到 .NET 通信而設(shè)計(jì),它為本地網(wǎng)絡(luò)中的應(yīng)用程序提供了無縫而直接的開發(fā)體驗(yàn)。一般用在C/S結(jié)構(gòu)的系統(tǒng)中,需要通過一個(gè)WinForm或是Windows服務(wù)進(jìn)行啟動(dòng)。
3) Microsoft 消息隊(duì)列 (MSMQ)
提供持久穩(wěn)定的消息傳送,這通常是間歇式連接的應(yīng)用程序的最佳解決方案。這些應(yīng)用程序?qū)?shù)據(jù)傳送、工作量分離以及應(yīng)用程序生存期均要求有保證。
4) WCF服務(wù)
WCF是使用托管代碼建立和運(yùn)行面向服務(wù)的應(yīng)用程序的統(tǒng)一架構(gòu),是開發(fā)者可以建立一個(gè)跨平臺(tái)(可與在J2EE 服務(wù)器構(gòu)建、非 Windows 系統(tǒng)上運(yùn)行的應(yīng)用程序通信)、安全、可信賴、事務(wù)性的解決方案,能與目前已有的分布式系統(tǒng)兼容。它是微軟分布式應(yīng)用程序開發(fā)的集大成者,整合了.Net 平臺(tái)下所有和分布式系統(tǒng)有關(guān)的技術(shù)。
以通信范圍而言,WCF可以跨進(jìn)程(同一機(jī)器上不同的應(yīng)用程序之間的通信)、跨子網(wǎng)、企業(yè)網(wǎng)(局域網(wǎng)內(nèi)不同的機(jī)器之間的通信)甚至于Internet(互聯(lián)網(wǎng)中不同的機(jī)器之間的通信)。從宿主程序而言,可以是ASP.NET,EXE , WPF(Windows Presentation Foundation), Windows Forms, NT Service, COM+.
2.3 分布式數(shù)據(jù)庫系統(tǒng)
分布式數(shù)據(jù)庫系統(tǒng)由分布于多個(gè)計(jì)算機(jī)結(jié)點(diǎn)上的若干個(gè)數(shù)據(jù)庫系統(tǒng)組成,它提供有效的存取手段來操縱這些結(jié)點(diǎn)上的子數(shù)據(jù)庫。分布式數(shù)據(jù)庫在使用上可視為一個(gè)完整的數(shù)據(jù)庫,而實(shí)際上它是分布在地理分散的各個(gè)結(jié)點(diǎn)上。分布式數(shù)據(jù)庫系統(tǒng)適合于單位分散的部門,允許各個(gè)部門將其常用的數(shù)據(jù)存儲(chǔ)在本地,實(shí)施就地存放本地使用,從而提高響應(yīng)速度,降低通信費(fèi)用。它有以下優(yōu)點(diǎn):
1) 解決組織機(jī)構(gòu)分散而數(shù)據(jù)需要相互聯(lián)系的問題。比如銀行系統(tǒng),總行與各分行處于不同的城市或城市中的各個(gè)地區(qū),在業(yè)務(wù)上它們需要處理各自的數(shù)據(jù),也需要彼此之間的交換和處理,這就需要分布式的系統(tǒng)。
2) 均衡負(fù)載。負(fù)載在各處理機(jī)間分擔(dān),可避免臨界瓶頸。
3) 可靠性高。數(shù)據(jù)分布在不同場(chǎng)地,且存有多個(gè)副本,即使個(gè)別場(chǎng)地發(fā)生故障,不致引起整個(gè)系統(tǒng)的癱瘓。
4) 可擴(kuò)充性好。當(dāng)需要增加新的相對(duì)自主的組織單位時(shí),可在對(duì)當(dāng)前機(jī)構(gòu)影響最小的情況下進(jìn)行擴(kuò)充。
5) 提高系統(tǒng)性能系統(tǒng)??梢愿鶕?jù)距離選擇離用戶最近的數(shù)據(jù)副本進(jìn)行操作,減少通信代價(jià),改善整個(gè)系統(tǒng)的性能。
分布式數(shù)據(jù)庫系統(tǒng)雖然有諸多優(yōu)點(diǎn),但它同時(shí)也帶來了許多新問題。如:數(shù)據(jù)一致性問題、更新同步以及查詢分解等的復(fù)雜性、數(shù)據(jù)遠(yuǎn)程傳遞的實(shí)現(xiàn)、通信開銷的降低等,這使得分布式數(shù)據(jù)庫系統(tǒng)的開發(fā)變得較為復(fù)雜。
3 總結(jié)
分布式應(yīng)用程序的開發(fā),要對(duì)應(yīng)用程序進(jìn)行分層,各層之間相互獨(dú)立,通過服務(wù)或接口來進(jìn)行調(diào)用,不僅便于開發(fā)的管理,也有利于集成其他平臺(tái)上的應(yīng)用程序,實(shí)現(xiàn)了功能模塊的復(fù)用、重用,提高了應(yīng)用程序的可擴(kuò)展性。在業(yè)務(wù)數(shù)據(jù)量多的情況下,還要考慮構(gòu)建分布式的數(shù)據(jù)庫系統(tǒng),這可以通過DBMS自動(dòng)管理的數(shù)據(jù)訂閱、分發(fā)技術(shù)實(shí)現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)同步,以達(dá)到數(shù)據(jù)共享的目的;也可以與一些分布式的計(jì)算技術(shù)結(jié)合起來,比如說.NET Remoting技術(shù)來解決各數(shù)據(jù)庫之間的通信問題,等等。
針對(duì)大型的網(wǎng)站應(yīng)用,分布式部署策略可以從以下幾個(gè)方面考慮:
1) 代理服務(wù)器實(shí)現(xiàn)請(qǐng)求的分離 。
2) 緩存的分布式部署,提高系統(tǒng)性能。
3) 拆分網(wǎng)站的對(duì)外功能,例如不同域名前、后綴,URL 重寫。
4) 面向服務(wù),每個(gè)服務(wù)分布到一臺(tái)服務(wù)器上 。
5) 數(shù)據(jù)庫的分布式集群部署。
6) 設(shè)立專門的應(yīng)用服務(wù)器。比如發(fā)送郵件通知的服務(wù)。
本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/niewq/archive/2010/03/12/5374646.aspx