雖然成熟的開發(fā)實(shí)踐并不會(huì)隨著跨平臺(tái)遷移而發(fā)生太多的變化,但是如果是使用Windows Azure,還是有一些實(shí)務(wù)技巧的。
在很多方面,成熟的開發(fā)實(shí)踐是可以實(shí)現(xiàn)跨編程語(yǔ)言、平臺(tái)和應(yīng)用程序而正常運(yùn)行的,但是在某些情況下有些技術(shù)是比其它技術(shù)更有用的。而為云計(jì)算開發(fā)應(yīng)用程序就是這樣的一個(gè)情況。
特別是當(dāng)為微軟公司的Windows Azure開發(fā)應(yīng)用程序時(shí),把以下三點(diǎn)謹(jǐn)記在心將是大有裨益的:使用專為平臺(tái)設(shè)計(jì)的工具、為分布式處理進(jìn)行設(shè)計(jì)以及為提升性能而制訂規(guī)劃。
使用Windows Azure的專用工具 微軟公司的旗艦開發(fā)工具Visual Studio中有一套針對(duì)Windows Azure開發(fā)工作的工具,這一點(diǎn)并不讓人感到驚奇。你可以通過Visual Studio安裝Windows Azure工具;具體的安裝步驟可能因版本而有所不同。當(dāng)你創(chuàng)建一個(gè)新項(xiàng)目時(shí),你將能夠選擇一個(gè)Windows Azure項(xiàng)目并為你的項(xiàng)目添加web和worker角色。Web角色是專為運(yùn)行微軟IIS實(shí)例而設(shè)計(jì)的;而worker角色則是針對(duì)禁用微軟IIS的Windows虛擬機(jī)的。一旦你已創(chuàng)建了你的角色,那么你就可以添加特定應(yīng)用程序的代碼了。
Visual Studio可允許你設(shè)置服務(wù)配置參數(shù),例如實(shí)例數(shù)、虛擬機(jī)容量、是使用HTTP還是HTTPS以及診斷報(bào)告水平等。通常情況下,在啟動(dòng)階段,它可以幫助用戶在本地進(jìn)行應(yīng)用程序代碼調(diào)試。與在Windows Azure中運(yùn)行應(yīng)用程序相比,在本地運(yùn)行你的應(yīng)用程序可能需要不同的配置設(shè)置,但Visual Studio可允許用戶使用多個(gè)配置文件。而你所需要做的,只是為每一個(gè)環(huán)境選擇一個(gè)合適的配置文件。
這個(gè)工具包還包括了Windows Azure Compute Emulator,這個(gè)工具可支持查看診斷日志和進(jìn)行存儲(chǔ)仿真。
如果Windows Azure工具中缺乏一個(gè)針對(duì)發(fā)布你的應(yīng)用程序至云計(jì)算的過程簡(jiǎn)化功能,那么這樣的一個(gè)工具將是不完整的。這個(gè)發(fā)布應(yīng)用程序至云計(jì)算的功能可允許你指定一個(gè)配置與環(huán)境(如生產(chǎn))以及一些先進(jìn)的功能,例如啟用剖析和IntelliTrace,后者是一個(gè)收集與程序運(yùn)行相關(guān)詳細(xì)事件信息的調(diào)試工具,它可允許開發(fā)人員查看程序在執(zhí)行過程中發(fā)生的狀態(tài)變化。
專為分布式處理進(jìn)行設(shè)計(jì) 當(dāng)開發(fā)和部署代碼時(shí),Visual Studio的Windows Azure工具是比較有用的。除此之外,用戶應(yīng)當(dāng)注意這些代碼是專為云計(jì)算環(huán)境而設(shè)計(jì)的,尤其是為一個(gè)分布式環(huán)境設(shè)計(jì)的。以下的小貼士可有助于防止出現(xiàn)將導(dǎo)致糟糕性能、漫長(zhǎng)調(diào)試以及運(yùn)行時(shí)分析的潛在問題。
專為云計(jì)算而設(shè)計(jì)的分布式應(yīng)用程序(或者其它的網(wǎng)絡(luò)應(yīng)用程序)的一個(gè)基本原則就是,不要在網(wǎng)絡(luò)服務(wù)器上存儲(chǔ)應(yīng)用程序的狀態(tài)信息。確保在網(wǎng)絡(luò)服務(wù)器層不保存狀態(tài)信息可實(shí)現(xiàn)更具靈活性的應(yīng)用程序。你可以在一定數(shù)量的服務(wù)器前部署一個(gè)負(fù)載平衡器而無需中斷應(yīng)用程序的運(yùn)行。如果你計(jì)劃充分利用Windows Azure能夠改變所部屬服務(wù)器數(shù)量的功能,那么這一點(diǎn)是特別重要的。這一配置對(duì)于打補(bǔ)丁升級(jí)也是有所幫助的。我們可以在其它服務(wù)器繼續(xù)運(yùn)行時(shí)為一臺(tái)服務(wù)器打補(bǔ)丁升級(jí),這樣一來就能夠確保你的應(yīng)用程序的可用性。
即便是在分布式應(yīng)用程序的應(yīng)用中,也有可能存在嚴(yán)重影響性能的瓶頸問題。例如,你的應(yīng)用程序的多個(gè)實(shí)例有可能會(huì)同時(shí)向數(shù)據(jù)庫(kù)發(fā)出查詢請(qǐng)求。如果所有的調(diào)用請(qǐng)求是同步進(jìn)行的,那么就有可能消耗完一臺(tái)服務(wù)器中的所有可用線程。C#和VB兩種編程語(yǔ)言都支持異步調(diào)用,這一功能可以有助于減少出現(xiàn)阻塞資源風(fēng)險(xiǎn)的可能性。
為最佳性能進(jìn)行規(guī)劃 在云計(jì)算中維持足夠性能表現(xiàn)的關(guān)鍵就是,一方面擴(kuò)大你運(yùn)行的服務(wù)器數(shù)量,一方面分割你的數(shù)據(jù)和工作負(fù)載。諸如無狀態(tài)會(huì)話的設(shè)計(jì)功能就能夠幫助實(shí)現(xiàn)數(shù)據(jù)與工作負(fù)載的分割和運(yùn)行服務(wù)器數(shù)量的擴(kuò)容。完全杜絕(或者至少最大限度地減少)跨多個(gè)工作負(fù)載地使用全局?jǐn)?shù)據(jù)結(jié)構(gòu)將有助于降低在你的工作流程中出現(xiàn)瓶頸問題的風(fēng)險(xiǎn)。
如果你將把一個(gè)SQL服務(wù)器應(yīng)用程序遷往Windows Azure,那么你就應(yīng)當(dāng)評(píng)估如何最好地利用不同云計(jì)算存儲(chǔ)類型的優(yōu)勢(shì)。例如,在你的SQL服務(wù)器數(shù)據(jù)庫(kù)中存儲(chǔ)二進(jìn)制大對(duì)象(BLOB)數(shù)據(jù)結(jié)構(gòu)可能是有意義的,而在Windows Azure云計(jì)算中,BLOB存儲(chǔ)可以降低存儲(chǔ)成本且無需對(duì)代碼進(jìn)行顯著修改。如果你使用的是高度非歸一化的數(shù)據(jù)模型,且未利用SQL服務(wù)器的關(guān)系型運(yùn)行的優(yōu)勢(shì)(例如連接和過濾),那么表存儲(chǔ)有可能是你為你的應(yīng)用程序選擇的一個(gè)更經(jīng)濟(jì)的方法。