我的一位朋友正在為一個即將啟動的編程項(xiàng)目而費(fèi)腦筋:要在保證項(xiàng)目順利完成的同時提高性能。他問我:“我該如何挑選技術(shù)呢?”這位朋友時斷時續(xù)地編寫過代碼,但他還沒有做過任何實(shí)質(zhì)性的項(xiàng)目。他從未專注于任何特定的技術(shù),他對這個項(xiàng)目不知如何下手。雖然他基于以前的經(jīng)驗(yàn)傾向于部署到Linux,但這還不是最終決定。
在這兒,我將自己給他提的建議分享出來。我將不推薦任何具體的技術(shù),而是告訴你,我在對技術(shù)和體系結(jié)構(gòu)制定決策時的方法。
第1步:為應(yīng)用程序作松耦合設(shè)計(jì)
敏捷方法已經(jīng)變得非常流行,一些人認(rèn)為,這意味著你不要嘗試超越一兩個星期的時間表。但這在為應(yīng)用程序作松耦合設(shè)計(jì)準(zhǔn)備時極具價值。您所需要做的只是使用一個具有流程圖功能(例如Visio)的工具來提供一個高層次的邏輯概述。您不必陷入這樣的細(xì)節(jié):“驗(yàn)證這個字段至少包含五個字符”或數(shù)據(jù)布局。但你需要對應(yīng)用程序各組成部分所擔(dān)負(fù)的處理職責(zé)有一個總體思路。
這兒有圖中應(yīng)該包含的東西的一些例子:
- 任何重大的批處理任務(wù)。
- 數(shù)據(jù)存儲(文件,數(shù)據(jù)庫,“云”等)以及對之進(jìn)行檢索并提供給應(yīng)用程序其它部分的組件。
- 重要處理出現(xiàn)的地方(在數(shù)據(jù)庫中,在業(yè)務(wù)邏輯層,Web服務(wù),客戶端等)和它的作用。
第2步:確定資源的使用情況和特點(diǎn)
一旦邏輯概述圖完成了,我們可以用它來確定資源的使用情況。你需要注意的資源是CPU、內(nèi)存、硬盤空間和帶寬。你要向外部Web服務(wù)傳輸大量數(shù)據(jù)或者與之相反?這就需要注意應(yīng)用程序和服務(wù)之間的連接的帶寬資源。也許你的數(shù)據(jù)庫內(nèi)部要做密集的運(yùn)算 - 那就注意數(shù)據(jù)庫的CPU使用情況,如此等等。
第3步:判斷性能臨界區(qū)域
一旦你明白了要使用哪里的資源,也就發(fā)現(xiàn)了潛在的性能瓶頸。這些地方會對你的技術(shù)選擇有最大的影響。如果事實(shí)證明你存儲在數(shù)據(jù)庫中信息很少,你在數(shù)據(jù)庫方面就有更多選擇。也許你要在業(yè)務(wù)邏輯層執(zhí)行的令CPU沉重的算法,這其中就表明你需要支持高速運(yùn)算的語言和平臺。下面是我以前做的圖表,這會有助于您了解這會如何影響你的決策。
第4步:權(quán)衡需求規(guī)模
你可以從圖表中學(xué)到的另一件事是你的應(yīng)用程序的哪個地方需要權(quán)衡。例如,如果大部分處理需求是發(fā)生在應(yīng)用程序的客戶端,那么服務(wù)器架構(gòu)可以寬松得多。
您也將能明白自己需要何種規(guī)模。大多數(shù)數(shù)據(jù)庫有集群功能,所以如果你有選擇,這通常更容易,更好地把需要權(quán)衡的事情(特別是如果它們需要在請求之間共享狀態(tài))推進(jìn)到已經(jīng)擴(kuò)大規(guī)模的數(shù)據(jù)庫,或考慮具有內(nèi)置集群或縮放堆棧的更高級的技術(shù)。
結(jié)論
利用輕量級邏輯概圖來啟動應(yīng)用程序的發(fā)展過程,你會在正確的途徑上選擇適合自身需求的最佳技術(shù)。也存在很多非技術(shù)因素(如您的預(yù)算,特別是技術(shù)經(jīng)驗(yàn)等),但你需要從某個地方開始,這個決策過程將有助于你縮小選擇范圍,并提前看清問題所在。我很樂意你在下面的留言中,從而可以獲得與這類問題相關(guān)的經(jīng)驗(yàn)。
本文鏈接:http://m.95time.cn/tech/program/2010/8028.asp
出處:CSDN
責(zé)任編輯:bluehearts
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|