close

高技術高競爭的互聯網時代,對產品的交付時間逐步變短,而對交付質量的要求逐步提高,各種新創意、新產品層出不窮,市場允許的產品推出週期也越來越 短,傳統的軟件開發模型已經無法跟上當前的需求,高效、便捷、可迭代的產品開發模式也越來越為人們所關注,虛擬化技術正是體現這種開發模式最重要的工具。


從功能上講,虛擬化的優勢一是提高資源的利用率;二是提供多樣化的配置管理;三是提供快照的保存和恢復功能;四是提供產品動態擴展的能力,這些也都是互聯網產品開發模式所需要的重要特性。


通過一年前的項目經歷和目前應用虛擬化技術後的項目經歷的對比,來說說虛擬化技術如何在開發、測試、上線部署各個過程中的作用。


簡要介紹一下當時跟現在的開發條件。


一年前所在的項目組一共有6台開發機,2台測試機,6個開發人員和2個測試人員,機器由團隊公用,每個開發人員會被分配一個以自己名字命名的獨立賬號,開發人員使用這個賬號登錄系統並進行開發工作。相信這也是大部分公司的標準配置。


現在所在的項目組有10台開發測試機,在功能上沒有做特別的區分,一共有24名開發兼測試人員,沒有專門的測試人員。開發人員通過登錄屬於自己的虛擬機進行開發工作。


開發階段的作用


虛擬化在開發階段的作用有兩個關鍵點:


第一,快速的環境搭建
開發初始,需要一個資源分配的過程,而開發人員往往無法得到需要的靈活的硬件資源,一般可以得到的是一個賬號,和一個確定操作系統的機器,這有三個原因, 首先是硬件資源有限,無法保證每個開發人員能有一台獨立的開發機,只能採用公用機器,通過不同賬號進行隔離的方式;其次由於機器共同使用,多人同時開發, 所以無法依照自己的意願進行環境調整;第三是因為服務器進行操作系統變更的代價很高。如果開發確實需要定制的環境,需要變更操作系統,在我們以前的團隊 裡,需要提交單獨的變更單,經重重審核後到系統工程師,系統工程師到週五安排下週的操作,所以從提起申請到操作一般要經歷一周時間。即使進入實際操作階 段,系統重裝耗費的時間也很長,安裝系統的時間佔用在30分鐘左右,服務器系統重啟的時間在8-15分鐘,重新下載和配置軟件的時間在1小時-3小時不 等。總體說來,重建一次系統環境至少需要半天時間。


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


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


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

 

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


遷移到虛擬化的環境下,共享開發環境的問題也迎刃而解。由於虛擬機自身的獨立性,每台虛擬機都是一整套完整而隔離的系統,虛擬機之間有充分的隔離,開發人 員不用再擔心端口問題,系統參數問題等,用自己的機器自然對系統的一切變化均了然於心,當出現bug時,開發人員也可以把時間精力集中在程序功能的調試 上。


測試階段的作用
開發完成後進入到測試階段,虛擬化的重要性更加顯現,虛擬化在測試中的重要性體現在四個方面:


第一,靈活的環境選擇
測試人員首先需要有一套良好的測試環境。在以往的測試中,需要由測試人員提出環境申請,在測試機器上重裝系統,按照測試要求配置好系統參數。在物理機上操 作,一般1天左右,測試人員可以拿到自己需要的環境。但由於測試的多樣性,如果說開發階段一天時間準備好環境還能接受的話,對於測試來說這是非常難以容忍 的,因為測試更強調環境的多樣性。例如我們的產品需要同時提供對Windows環境,Linux環境的支持,以及對Windows和Linux的各個不同 的發行版的支持。這種情況下,每次產品測試都是一個痛苦的過程,系統工程師需要根據測試進度隨時重裝系統,以便提供出不同環境配置的機器,而測試則等待系 統工程師提供好環境後才能進行下一個環境的測試。


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


在我們當前的項目組裡,該問題已經不復存在。虛擬化系統裡早已創建好對應於多個不同操作系統的模板,例如CentOS 5.4,Ubuntu 10.04,Windows 2003 Server,Windows 2008 Server,Windows xp,Windows 7等等,在測試需要的時候可以由模板迅速生成對應的虛擬機,每個虛擬機的生成時間在1-5分鐘。同時,對應不同的應用和環境的組合,也單獨生成一個模板, 比如Windows 2003 server+IIS的模板,Windows xp + IE8的模板,需要時輕輕點擊生成虛擬機,一套可用環境就出現了。

 

第二,資源的按需分配
虛擬化情況下資源的按需分配是一大重要特性。如果物理資源足夠多,那麼可以在每台物理機上單獨部署一套環境,提供給開發人員使用,但這種方式佔用的資源極多,比如我們目前已經保存的鏡像環境就有56個,如果使用56台物理機搭建環境的話則是極大的資源浪費。


正是由於測試環境的機器有限,需要虛擬化做到真正的按需分配資源。虛擬機只有在運行時才會佔用CPU,內存,網絡資源,當虛擬機關機時,其消耗的僅僅是鏡像佔用的磁盤資源,目前我們每個初始鏡像的大小都在1G以內,56個鏡像佔用的空間都沒有超過50g。


同時,工程師在測試時也養成了良好的使用習慣,停止測試時關閉虛擬機,這樣現有的10台測試機可以發揮20,甚至40台機器的作用。


資源按需分配的另一點好處是測試人員可以輕鬆保留以往的測試環境,一年前我們隔壁的項目組有個約20台機器組成的集群,是為很久前的一款產品測試準備的,那款產品還在維護,所以這套測試環境大概每個月使用一次,但因為配置複雜,資源沒人敢回收利用,只能由其一直閒置。


而在用了虛擬化技術之後,我們對項目中對應於每個模塊發布版本的測試環境,都做了做一份備份,在測試完成後關閉虛擬機,製作鏡像保存。在需要的時候再由鏡像生成虛擬機進行測試。其代價僅僅是多佔用了一些磁盤空間。


第三,高效的快照回放功能
快照回放功能對於測試而言意義極其重大,實際上這也是最受測試工程師們歡迎的功能,沒有之一。其主要的應用場景有兩點:


第一是用於分支檢測的場景。產品從A點有兩個選擇方向A1和A2,測試工程師選擇路徑A1,當A1測試完成後需要回到A點進行A2的測試。在以前,我們是 通過先重新走到A,再進行下一步操作的。當路徑複雜之後,這是一項非常耗時的工作,而且因為兩次操作不可能完全一致(比如每步的操作延遲不同)可能會導致 無法真正走到A點,從而降低了測試的可靠性。


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


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


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


對於rd而言,有了一份保存bug後的環境,也可以放心的進行各種調試工作了。


第四,特殊環境的模擬
由於測試環境的硬件限制,在很多時候無法模擬出產品的真正應用場景,比如我們正在做的一個網絡模塊開發,需要測試三塊網卡情況下的應用場景,但是測試機只 有兩塊網卡,無法模擬出來。於是我們在Xen的同一個網橋上了裡創建3塊虛擬網卡,就很好的解決了這個應用場景面臨的問題。


另外,我們另一個項目需要進行集群化測試,同樣是由於測試環境的硬件限制,無法達到集群化的機器數量要求,於是我們在一台物理機上搭建多台虛擬機,解決了這個問題,最後這個項目是創建了20台虛擬機完成了測試。


最後來說說產品部署和運行階段,虛擬化的意義。


部署、上線階段
第一,增強產品預發布功能
在產品正式上線之前應該有一個預發布的過程,即將產品先在預發布環境上線,跑一段時間穩定後再上線生產環境。因此預發布環境需要模擬生產環境的系統架構,並要保證機器數量,由於硬件資源的限制,這個過程甚至經常被取消掉,從而增大了產品風險。
目前,基於虛擬機搭建了一套完整的預發布環境,跟生產環境做到了基本一致,在多次的產品上線過程中也現了很多問題,做到了防患於未然。


第二,產品服務能力的動態擴展
產品上線後一天的業務流量往往並不是一個正太分佈,而是較為極端,在早晨流量最低,在晚上流量突發很高。以往的業務上線時,一般都按照預計的最大流量上線 機器,當流量低時系統資源十分浪費,比如很多物理機器的CPU利用率都在1%以內。而當流量突然增大到預期之外時又非常難以應對,緊急上機器時間不夠,也 十分容易出錯。這是一個讓運維人員非常頭疼的問題。


我們線上也同樣應用的虛擬機,使用虛擬化技術很好的解決了這一問題。現在上線前,只需要準備好業務相關的鏡像即可,通過流量和性能監控,隨時觀察系統的負 載概況,在負載低時可以選擇關閉幾台業務虛擬機,當負載突發時立即通過鏡像創建更多的虛擬機提供服務,從而高效的解決了流量變化的問題。


總結
虛擬化技術在產品的整個上線流程中起到了重要的作用,是互聯網時代產品開發的有效工具,虛擬化技術的按需分配,快照功能,隔離功能,動態擴展能力等都將為產品開發提供極大的便利。

 

(摘自: 網頁設計 討論區)

 

參考文獻:
1.黃惇勝(1995)。台灣式KJ 法原理與技術-邁向21 世紀改造臺灣的思考武器。台北:中國生產力。
2.周家瑜(2003)。網站體驗對使用者信任、情感與行為意圖影響之研究。國立高雄第一科技大學行銷與流通管理系碩士論文,未出版。
3.李立行(2001)。消費者解讀體驗行銷廣告之研究:以Nike“Just Do It”為例。世新大學傳播研究所碩士論文,未出版。

 

資料來源:博客園

 

PIECE2巨群



arrow
arrow
    全站熱搜
    創作者介紹
    創作者 巨群資訊 的頭像
    巨群資訊

    巨群資訊

    巨群資訊 發表在 痞客邦 留言(0) 人氣()