虛擬化——互聯(lián)網(wǎng)時代的產(chǎn)品開發(fā)加速器

0 評論 4361 瀏覽 1 收藏 18 分鐘

高技術(shù)高競爭的互聯(lián)網(wǎng)時代,對產(chǎn)品的交付時間逐步變短,而對交付質(zhì)量的要求逐步提高,各種新創(chuàng)意、新產(chǎn)品層出不窮,市場允許的產(chǎn)品推出周期也越來越短,傳統(tǒng)的軟件開發(fā)模型已經(jīng)無法跟上當(dāng)前的需求,高效、便捷、可迭代的產(chǎn)品開發(fā)模式也越來越為人們所關(guān)注,虛擬化技術(shù)正是體現(xiàn)這種開發(fā)模式最重要的工具。

從功能上講,虛擬化的優(yōu)勢一是提高資源的利用率;二是提供多樣化的配置管理;三是提供快照的保存和恢復(fù)功能;四是提供產(chǎn)品動態(tài)擴(kuò)展的能力,這些也都是互聯(lián)網(wǎng)產(chǎn)品開發(fā)模式所需要的重要特性。

我通過一年前的項(xiàng)目經(jīng)歷和目前應(yīng)用虛擬化技術(shù)后的項(xiàng)目經(jīng)歷的對比,來說說虛擬化技術(shù)如何在開發(fā)、測試、上線部署各個過程中的作用。

簡要介紹一下當(dāng)時跟現(xiàn)在的開發(fā)條件。

一年前我所在的項(xiàng)目組一共有6臺開發(fā)機(jī),2臺測試機(jī),6個開發(fā)人員和2個測試人員,機(jī)器由團(tuán)隊(duì)公用,每個開發(fā)人員會被分配一個以自己名字命名的獨(dú)立賬號,開發(fā)人員使用這個賬號登錄系統(tǒng)并進(jìn)行開發(fā)工作。相信這也是大部分公司的標(biāo)準(zhǔn)配置。

現(xiàn)在我所在的項(xiàng)目組有10臺開發(fā)測試機(jī),在功能上沒有做特別的區(qū)分,一共有24名開發(fā)兼測試人員,沒有專門的測試人員。開發(fā)人員通過登錄屬于自己的虛擬機(jī)進(jìn)行開發(fā)工作。

開發(fā)階段的作用

虛擬化在開發(fā)階段的作用有兩個關(guān)鍵點(diǎn):

第一,快速的環(huán)境搭建

開發(fā)初始,需要一個資源分配的過程,而開發(fā)人員往往無法得到需要的靈活的硬件資源,一般可以得到的是一個賬號,和一個確定操作系統(tǒng)的機(jī)器,這有三個原因,首先是硬件資源有限,無法保證每個開發(fā)人員能有一臺獨(dú)立的開發(fā)機(jī),只能采用公用機(jī)器,通過不同賬號進(jìn)行隔離的方式;其次由于機(jī)器共同使用,多人同時開發(fā),所以無法依照自己的意愿進(jìn)行環(huán)境調(diào)整;第三是因?yàn)榉?wù)器進(jìn)行操作系統(tǒng)變更的代價很高。如果開發(fā)確實(shí)需要定制的環(huán)境,需要變更操作系統(tǒng),在我們以前的團(tuán)隊(duì)里,需要提交單獨(dú)的變更單,經(jīng)重重審核后到系統(tǒng)工程師,系統(tǒng)工程師到周五安排下周的操作,所以從提起申請到操作一般要經(jīng)歷一周時間。即使進(jìn)入實(shí)際操作階段,系統(tǒng)重裝耗費(fèi)的時間也很長,安裝系統(tǒng)的時間占用在30分鐘左右,服務(wù)器系統(tǒng)重啟的時間在8-15分鐘,重新下載和配置軟件的時間在1小時-3小時不等??傮w說來,重建一次系統(tǒng)環(huán)境至少需要半天時間。

在這種情況下,開發(fā)人員在開發(fā)伊始就沒有得到期望的良好開發(fā)環(huán)境,只能在整個開發(fā)過程中帶著鐐銬跳舞。

再來看一下目前的狀況,我們應(yīng)用Xen虛擬化技術(shù),很好的解決了這些問題。開發(fā)人員在開發(fā)進(jìn)行之初,提交需要的環(huán)境配置列表,配置管理人員按照開發(fā)的請求,從鏡像庫里選擇對應(yīng)的虛擬機(jī)鏡像,再找一臺合適的物理機(jī)由該鏡像生成虛擬機(jī),交付給開發(fā)人員使用,雖然硬件資源依然有限,但由于虛擬機(jī)所占的物理資源較少,可以保障每個開發(fā)人員都擁有自己獨(dú)立操控的環(huán)境。而整個虛擬機(jī)的創(chuàng)建時間在1-5分鐘即可完成。

由于擁有的是獨(dú)立的一臺虛擬機(jī),其資源跟其他的開發(fā)人員完全隔離,開發(fā)人員可以自主進(jìn)行系統(tǒng)配置。在需要的時候也可以隨時進(jìn)行重裝請求,重裝操作非常簡單,刪除虛擬機(jī),從鏡像庫生成一臺新的虛擬機(jī)即可,原先需要一周多提供的初始系統(tǒng)現(xiàn)在在1-5分鐘即可完成。

圖一:目前一個開發(fā)人員的的開發(fā)測試機(jī)

第二,獨(dú)立的運(yùn)行環(huán)境

在以前的配置下,由于系統(tǒng)被多人共用,或者已歷經(jīng)開發(fā)多個項(xiàng)目的時候,很多系統(tǒng)環(huán)境參數(shù)已經(jīng)經(jīng)過了多輪配置,導(dǎo)致整個開發(fā)環(huán)境暗流洶涌,隱藏著諸多沖突因素。同時,由于多個賬號同時使用,分屬于不同賬號的模塊之間也會產(chǎn)生沖突,最常見的如端口沖突,這往往通過開發(fā)人員之間協(xié)調(diào)好彼此模塊使用的端口號解決,但也不可避免的遺留下一些問題,比如我們遇到過一次故障,就是開發(fā)在提交產(chǎn)品時忘了修改內(nèi)部某個模塊的通信端口導(dǎo)致的。還有一次開發(fā)人員在程序出錯之后花費(fèi)了大量時間精力查找原因,最后悲催的發(fā)現(xiàn)是另一個開發(fā)人員在系統(tǒng)上做了某個工具庫的升級。此外,由于某個開發(fā)人員的程序問題把機(jī)器跑死從而導(dǎo)致其他程序無法運(yùn)行的問題更是家常便飯。

遷移到虛擬化的環(huán)境下,共享開發(fā)環(huán)境的問題也迎刃而解。由于虛擬機(jī)自身的獨(dú)立性,每臺虛擬機(jī)都是一整套完整而隔離的系統(tǒng),虛擬機(jī)之間有充分的隔離,開發(fā)人員不用再擔(dān)心端口問題,系統(tǒng)參數(shù)問題等,用自己的機(jī)器自然對系統(tǒng)的一切變化均了然于心,當(dāng)出現(xiàn)bug時,開發(fā)人員也可以把時間精力集中在程序功能的調(diào)試上。

測試階段的作用

開發(fā)完成后進(jìn)入到測試階段,虛擬化的重要性更加顯現(xiàn),虛擬化在測試中的重要性體現(xiàn)在四個方面:

第一,靈活的環(huán)境選擇

測試人員首先需要有一套良好的測試環(huán)境。在以往的測試中,需要由測試人員提出環(huán)境申請,在測試機(jī)器上重裝系統(tǒng),按照測試要求配置好系統(tǒng)參數(shù)。在物理機(jī)上操作,一般1天左右,測試人員可以拿到自己需要的環(huán)境。但由于測試的多樣性,如果說開發(fā)階段一天時間準(zhǔn)備好環(huán)境還能接受的話,對于測試來說這是非常難以容忍的,因?yàn)闇y試更強(qiáng)調(diào)環(huán)境的多樣性。例如我們的產(chǎn)品需要同時提供對Windows環(huán)境,Linux環(huán)境的支持,以及對Windows和Linux的各個不同的發(fā)行版的支持。這種情況下,每次產(chǎn)品測試都是一個痛苦的過程,系統(tǒng)工程師需要根據(jù)測試進(jìn)度隨時重裝系統(tǒng),以便提供出不同環(huán)境配置的機(jī)器,而測試則等待系統(tǒng)工程師提供好環(huán)境后才能進(jìn)行下一個環(huán)境的測試。

即使環(huán)境已經(jīng)提供,每個環(huán)境里還需要加上不同的應(yīng)用組合,比如前端產(chǎn)品需要測試對主流瀏覽器的支持情況,瀏覽器包括IE,firefox,chrome,safari,opera等等,對于每款瀏覽器還需要考慮不同版本,如IE6,IE7,IE8等。更可怕的是,同類型的很多瀏覽器不能同時裝在一個系統(tǒng)里,IE系列即是如此,這種情況導(dǎo)致了測試環(huán)境的變更極其頻繁,系統(tǒng)工程師往往不堪重負(fù),測試工程師則抱怨需要的系統(tǒng)環(huán)境遲遲不能提供。

在我們當(dāng)前的項(xiàng)目組里,該問題已經(jīng)不復(fù)存在。虛擬化系統(tǒng)里早已創(chuàng)建好對應(yīng)于多個不同操作系統(tǒng)的模板,例如CentOS 5.4,Ubuntu 10.04,Windows 2003 Server,Windows 2008 Server,Windows xp,Windows 7等等,在測試需要的時候可以由模板迅速生成對應(yīng)的虛擬機(jī),每個虛擬機(jī)的生成時間在1-5分鐘。同時,對應(yīng)不同的應(yīng)用和環(huán)境的組合,也單獨(dú)生成一個模板,比如Windows 2003 server+IIS的模板,Windows xp + IE8的模板,需要時輕輕點(diǎn)擊生成虛擬機(jī),一套可用環(huán)境就出現(xiàn)了。模板的形式見圖二和圖三。

圖二:截取的Windows部分鏡像

圖三:截取的Linux部分鏡像

第二,資源的按需分配

虛擬化情況下資源的按需分配是一大重要特性。如果物理資源足夠多,那么可以在每臺物理機(jī)上單獨(dú)部署一套環(huán)境,提供給開發(fā)人員使用,但這種方式占用的資源極多,比如我們目前已經(jīng)保存的鏡像環(huán)境就有56個,如果使用56臺物理機(jī)搭建環(huán)境的話則是極大的資源浪費(fèi)。

正是由于測試環(huán)境的機(jī)器有限,需要虛擬化做到真正的按需分配資源。虛擬機(jī)只有在運(yùn)行時才會占用CPU,內(nèi)存,網(wǎng)絡(luò)資源,當(dāng)虛擬機(jī)關(guān)機(jī)時,其消耗的僅僅是鏡像占用的磁盤資源,目前我們每個初始鏡像的大小都在1G以內(nèi),56個鏡像占用的空間都沒有超過50g。

同時,工程師在測試時也養(yǎng)成了良好的使用習(xí)慣,停止測試時關(guān)閉虛擬機(jī),這樣現(xiàn)有的10臺測試機(jī)可以發(fā)揮20,甚至40臺機(jī)器的作用。

資源按需分配的另一點(diǎn)好處是測試人員可以輕松保留以往的測試環(huán)境,一年前我們隔壁的項(xiàng)目組有個約20臺機(jī)器組成的集群,是為很久前的一款產(chǎn)品測試準(zhǔn)備的,那款產(chǎn)品還在維護(hù),所以這套測試環(huán)境大概每個月使用一次,但因?yàn)榕渲脧?fù)雜,資源沒人敢回收利用,只能由其一直閑置。

而在用了虛擬化技術(shù)之后,我們對項(xiàng)目中對應(yīng)于每個模塊發(fā)布版本的測試環(huán)境,都做了做一份備份,在測試完成后關(guān)閉虛擬機(jī),制作鏡像保存。在需要的時候再由鏡像生成虛擬機(jī)進(jìn)行測試。其代價僅僅是多占用了一些磁盤空間。

第三,高效的快照回放功能

快照回放功能對于測試而言意義極其重大,實(shí)際上這也是最受測試工程師們歡迎的功能,沒有之一。其主要的應(yīng)用場景有兩點(diǎn):

第一是用于分支檢測的場景。產(chǎn)品從A點(diǎn)有兩個選擇方向A1和A2,測試工程師選擇路徑A1,當(dāng)A1測試完成后需要回到A點(diǎn)進(jìn)行A2的測試。在以前,我們是通過先重新走到A,再進(jìn)行下一步操作的。當(dāng)路徑復(fù)雜之后,這是一項(xiàng)非常耗時的工作,而且因?yàn)閮纱尾僮鞑豢赡芡耆恢拢ū热缑坎降牟僮餮舆t不同)可能會導(dǎo)致無法真正走到A點(diǎn),從而降低了測試的可靠性。

虛擬化快照是解決這個問題的最佳方案。從我們的實(shí)踐經(jīng)驗(yàn)來看,在面對分支選擇時,只需要在A點(diǎn)做一份快照,接下來便可以放心的進(jìn)行A1分支的檢測了。當(dāng)A1檢測完畢后,恢復(fù)虛擬機(jī)至A點(diǎn)快照的狀態(tài),接下類就可以順利的走A2分支了。整個過程非常流程,減少了通過操作恢復(fù)A狀態(tài)的工作,快照的創(chuàng)建和恢復(fù)都在1-2分鐘內(nèi),大大節(jié)省了測試時間,也提高了測試可靠性。

第二是故障現(xiàn)場保留。以往測試人員在發(fā)現(xiàn)產(chǎn)品bug后,會進(jìn)入一個兩難的境地,該bug很可能無法每次都順利復(fù)現(xiàn),那么如果繼續(xù)測試會破壞現(xiàn)場環(huán)境;如果保留現(xiàn)場叫RD來查找原因,可能臨時找不到RD,而且RD定位問題本身也需要時間,這種情況下環(huán)境被占用了,進(jìn)一步的測試工作就被耽誤了。

利用虛擬化快照技術(shù),測試人員只需要在此時進(jìn)行一次快照,保存完整的虛擬機(jī)環(huán)境,可以在RD有空時恢復(fù)這個快照給RD看,或者直接將虛擬機(jī)鏡像丟給RD,RD從此鏡像生成虛擬機(jī),進(jìn)行debug工作,原先的測試工作也可以順利的走下去了。

對于rd而言,有了一份保存bug后的環(huán)境,也可以放心的進(jìn)行各種調(diào)試工作了。

第四,特殊環(huán)境的模擬

由于測試環(huán)境的硬件限制,在很多時候無法模擬出產(chǎn)品的真正應(yīng)用場景,比如我們正在做的一個網(wǎng)絡(luò)模塊開發(fā),需要測試三塊網(wǎng)卡情況下的應(yīng)用場景,但是測試機(jī)只有兩塊網(wǎng)卡,無法模擬出來。于是我們在Xen的同一個網(wǎng)橋上了里創(chuàng)建3塊虛擬網(wǎng)卡,就很好的解決了這個應(yīng)用場景面臨的問題。

另外,我們另一個項(xiàng)目需要進(jìn)行集群化測試,同樣是由于測試環(huán)境的硬件限制,無法達(dá)到集群化的機(jī)器數(shù)量要求,于是我們在一臺物理機(jī)上搭建多臺虛擬機(jī),解決了這個問題,最后這個項(xiàng)目是創(chuàng)建了20臺虛擬機(jī)完成了測試。

最后來說說產(chǎn)品部署和運(yùn)行階段,虛擬化的意義。

部署、上線階段

第一,增強(qiáng)產(chǎn)品預(yù)發(fā)布功能

在產(chǎn)品正式上線之前應(yīng)該有一個預(yù)發(fā)布的過程,即將產(chǎn)品先在預(yù)發(fā)布環(huán)境上線,跑一段時間穩(wěn)定后再上線生產(chǎn)環(huán)境。因此預(yù)發(fā)布環(huán)境需要模擬生產(chǎn)環(huán)境的系統(tǒng)架構(gòu),并要保證機(jī)器數(shù)量,由于硬件資源的限制,這個過程甚至經(jīng)常被取消掉,從而增大了產(chǎn)品風(fēng)險。

目前我們團(tuán)隊(duì),基于虛擬機(jī)搭建了一套完整的預(yù)發(fā)布環(huán)境,跟生產(chǎn)環(huán)境做到了基本一致,在多次的產(chǎn)品上線過程中也現(xiàn)了很多問題,做到了防患于未然。

第二,產(chǎn)品服務(wù)能力的動態(tài)擴(kuò)展

產(chǎn)品上線后一天的業(yè)務(wù)流量往往并不是一個正太分布,而是較為極端,在早晨流量最低,在晚上流量突發(fā)很高。以往的業(yè)務(wù)上線時,一般都按照預(yù)計的最大流量上線機(jī)器,當(dāng)流量低時系統(tǒng)資源十分浪費(fèi),比如很多物理機(jī)器的CPU利用率都在1%以內(nèi)。而當(dāng)流量突然增大到預(yù)期之外時又非常難以應(yīng)對,緊急上機(jī)器時間不夠,也十分容易出錯。這是一個讓運(yùn)維人員非常頭疼的問題。

我們線上也同樣應(yīng)用的虛擬機(jī),使用虛擬化技術(shù)很好的解決了這一問題?,F(xiàn)在上線前,只需要準(zhǔn)備好業(yè)務(wù)相關(guān)的鏡像即可,通過流量和性能監(jiān)控,隨時觀察系統(tǒng)的負(fù)載概況,在負(fù)載低時可以選擇關(guān)閉幾臺業(yè)務(wù)虛擬機(jī),當(dāng)負(fù)載突發(fā)時立即通過鏡像創(chuàng)建更多的虛擬機(jī)提供服務(wù),從而高效的解決了流量變化的問題。

總結(jié)

虛擬化技術(shù)在產(chǎn)品的整個上線流程中起到了重要的作用,是互聯(lián)網(wǎng)時代產(chǎn)品開發(fā)的有效工具,虛擬化技術(shù)的按需分配,快照功能,隔離功能,動態(tài)擴(kuò)展能力等都將為產(chǎn)品開發(fā)提供極大的便利。

本文來自:http://www.infoq.com/cn/articles/dh-virtualization-product-development-accelerator

 

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!