虛擬化技術(shù)如何改善軟件開發(fā)?
也許正是VMware公司的工作站(Workstation)產(chǎn)品,讓虛擬化技術(shù)走上了迅速成名的道路。該產(chǎn)品允許各個(gè)用戶可以運(yùn)行多個(gè)操作系統(tǒng)、操作系統(tǒng)版本或?qū)嵗愃贫鄠€(gè)應(yīng)用程序窗口),而不是只有每次運(yùn)行一個(gè)操作系統(tǒng)的多重啟動(dòng)環(huán)境。但在許多公司,虛擬化技術(shù)卻是這樣出現(xiàn)的:開發(fā)人員首先悄悄使用這項(xiàng)技術(shù)來(lái)進(jìn)行測(cè)試和開發(fā),然后再把虛擬化工具介紹給IT主管。
盡管如今虛擬化在推動(dòng)許多生產(chǎn)環(huán)境,比如服務(wù)器和桌面基礎(chǔ)架構(gòu),并充當(dāng)一種資源提供工具,虛擬化也被越來(lái)越多的軟件開發(fā)人員所使用。首先,他們使用虛擬化工具,便于提供用于開發(fā)和測(cè)試的一系列目標(biāo)環(huán)境(比如不同的操作系統(tǒng)、操作系統(tǒng)版本和瀏覽器),并且便于迅速而輕松地提供/重新提供配置實(shí)例。
下面介紹如今的一些開發(fā)人員在如何使用虛擬化、為什么使用虛擬化,以及他們對(duì)目前的虛擬化技術(shù)存著什么樣的問(wèn)題。
提供多種測(cè)試環(huán)境
高級(jí)軟件架構(gòu)師Mark Friedman效力于微軟的開發(fā)部門,該部門有3000多名員工在開發(fā)Visual Studio和.NET框架。Friedman本人主要開發(fā)隨微軟Visual Studio Team System這套開發(fā)工具交付的性能工具。Friedman還是計(jì)算機(jī)測(cè)量組織(Computer Measurement Group)的董事,他說(shuō):"我所在部門大約三分之二的人從事開發(fā)和測(cè)試工作――這些開發(fā)和測(cè)試人員大多數(shù)在使用系統(tǒng)虛擬化(通過(guò)微軟的Hyper-V技術(shù)),作為他們主要的生產(chǎn)力工具之一。"
虛擬化技術(shù)的一個(gè)主要優(yōu)勢(shì)在于,它能夠分離不穩(wěn)定的環(huán)境,這是任何開發(fā)人員都希望在應(yīng)用程序設(shè)計(jì)的早期階段所具備的功能。Friedman表示,隨著微軟工具的不斷開發(fā),測(cè)試早期版本可能會(huì)使開發(fā)人員的整個(gè)計(jì)算環(huán)境不穩(wěn)定。
他說(shuō):"這是無(wú)法改變的本質(zhì)。除了最簡(jiǎn)單的桌面應(yīng)用程序外,幾乎任何應(yīng)用程序都會(huì)導(dǎo)致系統(tǒng)崩潰。我經(jīng)常告訴我的開發(fā)人員,如果他們沒有經(jīng)常導(dǎo)致系統(tǒng)崩潰,說(shuō)明他們的嘗試還不夠積極。我們喜歡虛擬化技術(shù),因?yàn)樗芄?jié)省時(shí)間,讓我們的開發(fā)人員可以花更多時(shí)間用在有挑戰(zhàn)性的工作上,而不是用在準(zhǔn)備測(cè)試環(huán)境那些單調(diào)而極其耗費(fèi)時(shí)間的方面上。"
與其他虛擬化工具一樣,微軟的Hyper-V可以讓用戶對(duì)系統(tǒng)"拍取快照",保留"最近一個(gè)已知的完好版本"。Friedman說(shuō):"我們創(chuàng)建了回滾機(jī)制(rollback),那樣我們?cè)趲追昼娭畠?nèi)就能把系統(tǒng)恢復(fù)到之前的那個(gè)完好狀態(tài)。另一種方法就是,不得不重新創(chuàng)建系統(tǒng)鏡像或者重新構(gòu)建環(huán)境,但這需要好幾個(gè)小時(shí)。而虛擬化技術(shù)大大節(jié)省了時(shí)間。"
Friedman的小組還在質(zhì)量保證(QA)測(cè)試當(dāng)中全面利用了虛擬化技術(shù)和虛擬機(jī)鏡像。他說(shuō):"一旦通過(guò)了開發(fā)人員的單元測(cè)試,我們就會(huì)談?wù)摐y(cè)試矩陣――比如在什么版本的操作系統(tǒng)上運(yùn)行測(cè)試矩陣。然后,我們需要針對(duì)32位版本或64位版本進(jìn)行測(cè)試。使用虛擬機(jī)鏡像是維持一系列測(cè)試環(huán)境的最快速、最省錢、最靈活的一種方法。在我們的質(zhì)量保證實(shí)驗(yàn)室,我們一直在這么做;我們進(jìn)行了許多自動(dòng)化測(cè)試,以便把這些鏡像作為虛擬機(jī)來(lái)保存,并且用測(cè)試套件對(duì)它們進(jìn)行測(cè)試。這種方法很實(shí)用;我們節(jié)省了許多時(shí)間,多得讓人難以置信。"
拍取快照、然后在幾分鐘之內(nèi)恢復(fù)工作鏡像的功能特別重要,不必為重建系統(tǒng)等上數(shù)小時(shí)。Friedman說(shuō):"你在查找軟件錯(cuò)誤時(shí),僅僅為了重現(xiàn)軟件錯(cuò)誤,常常得花上一兩天時(shí)間來(lái)建立環(huán)境,所以你一次又一次地花時(shí)間來(lái)重建系統(tǒng)――這浪費(fèi)了時(shí)間;從而導(dǎo)致工作效率降低。"
比方說(shuō),某個(gè)軟件錯(cuò)誤導(dǎo)致系統(tǒng)崩潰時(shí),開發(fā)人員就得回過(guò)頭去,找出系統(tǒng)崩潰的那個(gè)地方。Friedman說(shuō):"人們最初設(shè)置的斷點(diǎn)常常離進(jìn)程太遠(yuǎn),于是系統(tǒng)再次崩潰。因?yàn)殚_發(fā)人員在一天內(nèi)很容易導(dǎo)致系統(tǒng)崩潰好幾次,趁開發(fā)人員對(duì)問(wèn)題很清楚的時(shí)候,能夠迅速恢復(fù),然后重新運(yùn)行調(diào)試過(guò)程,這大有幫助。如果你在調(diào)試一個(gè)復(fù)雜的軟件錯(cuò)誤,能保持在這種狀態(tài)下再好不過(guò)了。"
開發(fā)人員表示,虛擬化技術(shù)非常有助于迭代測(cè)試。Adam Moskowitz是生產(chǎn)及銷售一系列節(jié)能型計(jì)算機(jī)的SiCortex公司的高級(jí)軟件工程師,他說(shuō):"我們有許多測(cè)試系統(tǒng)供我們的開發(fā)人員使用――每個(gè)測(cè)試系統(tǒng)都需要各自的x86控制系統(tǒng)。我們使用虛擬化技術(shù)來(lái)創(chuàng)建虛擬機(jī),然后虛擬機(jī)'連接到'外部集群板,而不是購(gòu)置許多PC,哪怕是最便宜的PC。"
SiCortex的開發(fā)部門使用免費(fèi)版本的VMware Server,運(yùn)行在功能較強(qiáng)大的機(jī)架服務(wù)器上(配備雙核或四核x86處理器、4GB內(nèi)存和300GB硬盤),這些服務(wù)器可以運(yùn)行四至八個(gè)充當(dāng)控制系統(tǒng)的虛擬機(jī)。Moskowitz說(shuō):"因?yàn)榭刂葡到y(tǒng)上的負(fù)載非常小,這種辦法的效果非常好,資本開支也比較低。我們大約25名工程師中有一半以上的人在使用這些虛擬化系統(tǒng)。"
Moskowitz表示,控制系統(tǒng)虛擬化的一個(gè)主要好處就是易于測(cè)試。他說(shuō):"想要一個(gè)實(shí)驗(yàn)系統(tǒng)?你只要克隆一個(gè)標(biāo)準(zhǔn)的虛擬機(jī),就可以使用了。虛擬化工具有價(jià)值的另一個(gè)原因就是易于配置;開發(fā)人員只要用最新軟件構(gòu)建一個(gè)虛擬機(jī)――只要構(gòu)建一次;以后你想要多少個(gè)虛擬機(jī),就可以克隆多少個(gè)。"
Mike Brescia在一家記錄及恢復(fù)實(shí)時(shí)環(huán)境數(shù)據(jù)的公司工作;他說(shuō):"除了把系統(tǒng)作為虛擬設(shè)備來(lái)提供外,我們公司的開發(fā)人員還使用虛擬化技術(shù),在比較少的硬件設(shè)備上搭建不同的測(cè)試環(huán)境,比如Windows和Linux環(huán)境。"Brescia表示,克隆一個(gè)干凈的計(jì)算機(jī)系統(tǒng)用于測(cè)試要比拷貝磁盤鏡像、使用Clonezilla克隆工具簡(jiǎn)單得多。他補(bǔ)充說(shuō):"運(yùn)行虛擬機(jī)不需要拆掉、清除整個(gè)系統(tǒng);我們只需要小心,別往主機(jī)機(jī)器上裝入過(guò)多的資源。"
設(shè)計(jì)和營(yíng)銷公司Eli Kirk的高級(jí)Web開發(fā)人員Connor Boyack表示,該公司的15名Web開發(fā)人員必須兼顧許多Web瀏覽器和操作系統(tǒng)的需要。Boyack在Mac OS X Leopard操作系統(tǒng)上使用Parallels版本4,并且運(yùn)行各自安裝了Windows XP、OpenSUSE 11和Windows 7測(cè)試版等操作系統(tǒng)的虛擬機(jī)。Boyack說(shuō):"創(chuàng)建實(shí)用、而且外觀一致的網(wǎng)站需要進(jìn)行大量的瀏覽器測(cè)試;這樣一來(lái),虛擬化技術(shù)必不可少。虛擬化技術(shù)讓我可以使用多個(gè)操作系統(tǒng)和多個(gè)瀏覽器,讓它們可以無(wú)縫合作(前提是Windows XP運(yùn)行要順暢)。"
SmartLogic Solutions公司的開發(fā)人員Nick Gauthier也認(rèn)為,能夠同時(shí)測(cè)試許多不同場(chǎng)景、確保有一致的用戶體驗(yàn),這是一大優(yōu)勢(shì)。"另一個(gè)優(yōu)勢(shì)就是,如果用戶有抱怨,可以啟動(dòng)某個(gè)特定的版本和瀏覽器。我們?cè)贈(zèng)]有必要說(shuō)'哦,我不運(yùn)行這個(gè)瀏覽器,我用的是Linux操作系統(tǒng);'現(xiàn)在我們可以說(shuō)'稍等片刻;我發(fā)現(xiàn)問(wèn)題了,我馬上解決。'"
Eric Floer是開發(fā)及銷售遠(yuǎn)程備份設(shè)備的新興公司3X Systems的首席技術(shù)官,他說(shuō):"我們使用虛擬化技術(shù)測(cè)試平臺(tái)上的軟件以及我們支持的應(yīng)用程序(以便保證質(zhì)量);如果客戶出現(xiàn)了問(wèn)題需要支持,還可以用來(lái)重現(xiàn)客戶環(huán)境。虛擬化讓我們可以迅速構(gòu)建及拆掉環(huán)境,而且只要使用數(shù)量極少的物理硬件就可以做到。"對(duì)一家小規(guī)模的新興公司而言,這種使用極少資本開支就能測(cè)試許多平臺(tái)和環(huán)境的能力非常重要。另外,"虛擬化技術(shù)大大提高了我們產(chǎn)品的質(zhì)量和可靠性,"Floehr補(bǔ)充說(shuō)。
Aamoggemon軟件公司致力于為手持計(jì)算機(jī)開發(fā)程序,原先為Palm OS開發(fā)程序,現(xiàn)在還為Symbian OS Series 60和PocketPC開發(fā)程序。開發(fā)人員Tam Hanna說(shuō):"現(xiàn)在我使用虛擬化有好多原因;主要原因是,基于Cygwin/Elipse的開發(fā)系統(tǒng)很流行(針對(duì)J2ME的Eclipse、Palm的PODS和諾基亞的Carbide)。把這些開發(fā)系統(tǒng)全部安裝在一臺(tái)機(jī)器上會(huì)導(dǎo)致它們都出問(wèn)題。所以,我需要使用虛擬化技術(shù),以便能夠完成我的工作。此外,我想使用虛擬機(jī),確保所有機(jī)器上都有同樣的配置設(shè)置。"
MarkMail是一家搜索公共郵件列表歸檔的免費(fèi)服務(wù)機(jī)構(gòu)。MarkMail的開發(fā)人員John D. Mitchell(其正式頭銜是"狂熱的科學(xué)家")聲稱:"我們的團(tuán)隊(duì)在許多方面使用虛擬化技術(shù)。關(guān)鍵在于,對(duì)系統(tǒng)中的每一項(xiàng)服務(wù)進(jìn)行虛擬化處理給了我們很大的靈活性。在開發(fā)時(shí),我們對(duì)物理資源沒有太多的要求,那樣我們?cè)谏贁?shù)幾個(gè)硬件節(jié)點(diǎn)上就能運(yùn)行許多虛擬實(shí)例,包括數(shù)據(jù)庫(kù)。"
MarkMail用的是OpenVz,那樣開發(fā)人員沙盒中的鏡像與部署環(huán)境的完全一樣。Mitchell說(shuō):"有了虛擬化技術(shù),測(cè)試不同的環(huán)境和版本等方面就非常容易;我們總是可以拆掉一個(gè)實(shí)例,然后從干凈的檢查點(diǎn)重新創(chuàng)建一個(gè)實(shí)例。"據(jù)Mitchell聲稱,使用虛擬化技術(shù)可以減少所要購(gòu)買、租用及管理的硬件數(shù)量。"總的來(lái)說(shuō),我們使用的虛擬實(shí)例與硬件節(jié)點(diǎn)之比大約是3:1。"
虛擬化的局限
開發(fā)人員承認(rèn),開發(fā)過(guò)程中有許多方面是虛擬化技術(shù)無(wú)能為力的。
3X公司的Floehr強(qiáng)調(diào):"虛擬化無(wú)能為力的一個(gè)方面就是對(duì)我們的產(chǎn)品(基于網(wǎng)絡(luò)的備份設(shè)備)進(jìn)行壓力測(cè)試(stress testing)。盡管我們可以在虛擬化環(huán)境同時(shí)測(cè)試10個(gè)客戶機(jī),但那不是真正的壓力測(cè)試,因?yàn)?0個(gè)客戶機(jī)只使用4個(gè)物理CPU和兩塊網(wǎng)卡來(lái)測(cè)試;如果在實(shí)際環(huán)境有10個(gè)物理客戶機(jī),這些約束條件就不會(huì)存在。"
MarkMail的Mitchell補(bǔ)充說(shuō):"虛擬化確實(shí)會(huì)增加一些復(fù)雜性。它總是會(huì)增加一些延遲。但是更糟的是,如果改變底層的執(zhí)行環(huán)境――比如從開發(fā)環(huán)境到測(cè)試環(huán)境再到生產(chǎn)環(huán)境,就無(wú)法依賴虛擬機(jī)清楚地了解性能方面的特點(diǎn)。"
最后,Mirtchell強(qiáng)調(diào)"當(dāng)前一代的桌面虛擬化產(chǎn)品仍有太多令人頭疼的問(wèn)題、缺陷以及缺失的功能,"至少開發(fā)人員在用于軟件開發(fā)方面就遇到了這種情況。
微軟的Mark Friedman說(shuō):"如果進(jìn)行負(fù)載測(cè)試或規(guī)模擴(kuò)展,就得運(yùn)行在原始硬件和物理機(jī)器上。除非你準(zhǔn)備部署在虛擬機(jī)上,否則性能方面的特點(diǎn)完全不一樣。性能測(cè)量方面的情況也是這樣。"Friedman強(qiáng)調(diào),但隨著時(shí)間的推移,這個(gè)問(wèn)題有望得到解決。
Friedman表示,另外,虛擬化行業(yè)采用的半虛擬化方法改變了操作系統(tǒng)的一些底層方面,尤其是操作系統(tǒng)的驅(qū)動(dòng)程序。"所以,如果你依賴特定的驅(qū)動(dòng)程序或硬件環(huán)境,那就會(huì)受到影響。比方說(shuō),有一個(gè)虛擬網(wǎng)卡,有一個(gè)特定的驅(qū)動(dòng)程序。該驅(qū)動(dòng)程序'可識(shí)別虛擬化技術(shù)'。你就得明白,如果你需要針對(duì)一組本地驅(qū)動(dòng)程序進(jìn)行測(cè)試,在虛擬機(jī)里看不到驅(qū)動(dòng)程序。所以,這影響了從事驅(qū)動(dòng)程序開發(fā)的人員,但對(duì)Web開發(fā)人員沒有影響。"
Friedman還指出:"如果你有一個(gè)多層應(yīng)用程序需要幾臺(tái)機(jī)器,把這些機(jī)器整合成共享硬件意味著'你可以進(jìn)行的是功能測(cè)試,而不是性能測(cè)試。'"
盡管有這樣那樣的問(wèn)題,虛擬化技術(shù)已經(jīng)為開發(fā)人員帶來(lái)了切實(shí)的好處。微軟的Friedman說(shuō):"一旦我們的開發(fā)人員學(xué)會(huì)使用虛擬化技術(shù),這項(xiàng)技術(shù)就能提高他們的工作效率。虛擬化技術(shù)讓他們可以花更多的時(shí)間用在編碼、測(cè)試和調(diào)試上。它消除了用在構(gòu)建及準(zhǔn)備環(huán)境方面的大量時(shí)間和延遲,我們并不希望他們把大部分時(shí)間用在這方面上。"
【編輯推薦】