DevOps和IaaS開啟云時代的開發(fā)和測試
背景
在軟件發(fā)展的幾十年歷程中,人們一直在孜孜不倦地追求用更快的速度交付更高質(zhì)量的軟件及服務(wù)。無論是不斷革新的軟件工程思想,還是持續(xù)優(yōu)化的編程語言及工具,亦或是紛紛出現(xiàn)的可復(fù)用開發(fā)、測試框架,無不大大提高了整個軟件開發(fā)及交付的效率。但是,與此同時,軟件系統(tǒng)復(fù)雜度急速上升,可靠性要求越來越高,這讓軟件快速交付依然非常具有挑戰(zhàn)。尤其是進入互聯(lián)網(wǎng)和云計算時代,市場競爭異常激烈,人們對于軟件交付的周期已經(jīng)從原來的以季度、年度為單位縮短到以天計算,以便在市場中快速試錯,找到真正的用戶需求。這些都給傳統(tǒng)的軟件開發(fā)、測試體系提出了巨大的挑戰(zhàn)。
最近幾年,公有IaaS云快速發(fā)展,人們已經(jīng)認(rèn)識到云計算帶來的強大敏捷性和低成本優(yōu)勢。在越來越多軟件及服務(wù)的生產(chǎn)環(huán)境直接部署和運行在IaaS云上的同時,企業(yè)級用戶也在積極嘗試?yán)肐aaS云服務(wù)來改進自己的軟件開發(fā)、測試體系。但是,由于發(fā)展路徑問題,國內(nèi)的公有云開發(fā)人員還是習(xí)慣于以包年包月的方式使用IaaS云服務(wù),并沒有充分發(fā)揮出云計算彈性、靈活和按需服務(wù)的優(yōu)勢。隨著國內(nèi)IaaS云開始普遍提供API,國內(nèi)的開發(fā)人員必定也會逐步體會到彈性云計算帶來的具體優(yōu)勢,并逐步適應(yīng)這種新模式。因此,使用云來加速開發(fā)測試也正離國內(nèi)開發(fā)者越來越近,并將會被廣泛接受。
傳統(tǒng)開發(fā)、測試中的挑戰(zhàn)
在軟件開發(fā)、測試中,一般需要經(jīng)過開發(fā)、測試,驗收和上線四個階段,同時也對應(yīng)有四個環(huán)境:開發(fā)環(huán)境,測試環(huán)境,驗收環(huán)境和生產(chǎn)環(huán)境,即所謂的DTAP。整個流程如下所示:
在這樣一個復(fù)雜且冗長的流程中,需要不斷地涉及到環(huán)境的準(zhǔn)備以及應(yīng)用程序的部署。而且涉及人員也非常多,包括開發(fā)、測試和運維。面對這些挑戰(zhàn),傳統(tǒng)的軟件開發(fā)測試體系中普遍存在一系列問題:
獲取基礎(chǔ)設(shè)施(硬件、軟件和網(wǎng)絡(luò)等)非常困難,而且基礎(chǔ)設(shè)施的交付周期也非常長。由于采購基礎(chǔ)設(shè)施多為一次性投入,成本還非常大,企業(yè)在做這樣決定都非常謹(jǐn)慎。除非是已經(jīng)被市場驗證的想法和產(chǎn)品,企業(yè)一般不太容易快速決定相關(guān)采購。即使決定采購,從下單到交付仍然是一個漫長的過程(常常以月為單位計算)。所以為了避免影響工程進度或者節(jié)省成本,經(jīng)常會看到多位開發(fā)測試人員(甚至多個產(chǎn)品團隊)共用一套開發(fā)或者測試環(huán)境,然后就會出現(xiàn)為協(xié)調(diào)使用基礎(chǔ)設(shè)施而郵件漫天飛的場景。更為糟糕的是很多好的想法和構(gòu)思因為冗長的基礎(chǔ)設(shè)置準(zhǔn)備過程而錯失市場機遇,甚至直接就胎死腹中。
部署和維護各種開發(fā)及測試環(huán)境令人頭痛。當(dāng)我們有了足夠的硬件資源來支持開發(fā)、測試后,另外一個問題又隨之而生。如何管理、部署這么多環(huán)境,如何讓這么多環(huán)境保持一致。例如,使用的Linux內(nèi)核是不是一個版本嗎?都裝了統(tǒng)一版本的Python嗎?大家在不同的環(huán)境上是用一致的代碼做測試嗎?這樣的問題必然會影響到整個團隊的開發(fā)效率,最后非常有可能的結(jié)果就是大家還是會回到只用一個公共開發(fā)測試環(huán)境(這樣又開始重新相互影響),亦或土豪公司會再招個專職的人員來維護這些環(huán)境(于是,這個人會成為新的單點,他/她一不在場時大家都傻眼了)。除了開發(fā)、測試環(huán)境之間的一致性維護工作外,保持開發(fā)及測試環(huán)境和生產(chǎn)環(huán)境的一致同樣具有挑戰(zhàn)。因為某個配置的不一致導(dǎo)致測試通過的代碼在生產(chǎn)環(huán)境不工作是常有的事情。因為某個新功能需要升級第三方依賴庫,在測試環(huán)境做了升級而生產(chǎn)環(huán)境卻忘了也隔三差五的來一次。于是窮盡各種細(xì)節(jié)的環(huán)境描述,部署文檔便塞滿了公司內(nèi)部的Wiki或者某個文檔管理平臺。當(dāng)然,這些文檔基本上是在完成的那一刻就已經(jīng)過時,讓后來的閱讀者只會越看越糊涂。
開發(fā)及測試環(huán)境無法完全復(fù)現(xiàn)生產(chǎn)環(huán)境的場景。在實際運營中,生產(chǎn)環(huán)境總是承受最嚴(yán)酷的考驗(大流量的請求,頻繁的攻擊等)。但是,由于成本和意識上的一些問題,大家在開發(fā)及測試環(huán)境中很難復(fù)現(xiàn)這些場景并進行預(yù)先的測試。而且很多問題(尤其是在分布式系統(tǒng)中)都是在規(guī)模到達一定程度后才會出現(xiàn),通常開發(fā)及測試環(huán)境都很難模擬出生產(chǎn)環(huán)境的規(guī)模。
人為的割裂IT、開發(fā)、測試和運維部門也是在傳統(tǒng)軟件開發(fā)、測試體系中經(jīng)常碰到的問題。這個直接導(dǎo)致流程的冗長和信息溝通的不暢,尤其是在系統(tǒng)非常復(fù)雜時,需要讓各個不同部門之間的人能對整個系統(tǒng)有一致理解是非常不容易的事情。
由于上面這些普遍存在的問題,軟件開發(fā)人員的生產(chǎn)效率受到極大影響。當(dāng)然,人們也在思想層面和實踐層面不斷改進這個流程,其中最近幾年盛行的DevOps思想得到了廣泛的認(rèn)同。個人認(rèn)為DevOps思想中最關(guān)鍵的點在于打破傳統(tǒng)軟件開發(fā)過程中的人為割裂和“殘酷無情”的推動自動化流程。前者意味著用統(tǒng)一的方式管理整個DATP流程和環(huán)境,而后者則是通過可復(fù)用的自動化工具和腳本把整個流程和環(huán)境部署、維護的知識固化下來,變成可直接操作的行動。
云計算帶來了新可能
由于前面所述的各種挑戰(zhàn)和問題,以及DevOps思想的廣泛認(rèn)同,越來越多的公司開始行動起來改進既有的開發(fā)、測試流程,各種打著DevOps標(biāo)簽的輔助工具也涌現(xiàn)出來。但是工程人員在獲取基礎(chǔ)設(shè)施方面的效率仍然無法令人滿意(這個問題尤其在創(chuàng)業(yè)公司和中小企業(yè)里面更為明顯)。幸好,云計算(尤其是公有IaaS云)的到來極大地改變了這個現(xiàn)狀。具體體現(xiàn)在下面幾個方面:
云計算提供了近乎無限量的基礎(chǔ)設(shè)施資源,而且你在任何時候都可以立馬獲得。筆者就親自經(jīng)歷過一個下午啟動2000臺云主機進行測試的真實場景。有多少公司可以一次批準(zhǔn)采購2000臺機器的預(yù)算,而且之前讓一個下午就立馬到位這么多服務(wù)器也基本是不可能的。另外,你獲取這些基礎(chǔ)設(shè)施資源的過程是完全“自助”式的,不需要依賴任何專門的IT或者網(wǎng)絡(luò)工程師。
云計算提供了全新的基礎(chǔ)設(shè)施資源成本模式,從原來的一次購買變成了按需付費。你只需要為自己具體使用的基礎(chǔ)設(shè)施資源量付費。在云計算時代,1000臺機器計算1個小時和讓1臺機器運行1000個小時的成本竟然是相等的。
云計算讓基礎(chǔ)設(shè)施資源“可編程”。在傳統(tǒng)IT時代,基礎(chǔ)設(shè)施資源總是顯得冰冷、生硬,程序員拿它無可奈何。你要組建一個虛擬網(wǎng)絡(luò)或者獲取個公網(wǎng)IP都得走申請流程,找運維人員。而且,絕大部分公司為了簡化管理成本或者安全考量,還會對基礎(chǔ)設(shè)施的使用制定一堆或合理,或不合理的規(guī)則制度,這都極大地限制了程序員的手腳。在云時代,絕大部分的公有或者私有IaaS云提供商都支持API(還沒有提供API的也都在加班加點的準(zhǔn)備API中)。程序員可以非常靈活的調(diào)用這些API,使用標(biāo)準(zhǔn)的基礎(chǔ)設(shè)施單元構(gòu)建自己應(yīng)用的基礎(chǔ)設(shè)施架構(gòu)。
在解決了軟件開發(fā)人員獲取基礎(chǔ)設(shè)施資源困難的同時,云計算還帶來了大量額外的好處。目前,主流的公有IaaS云服務(wù)商在提供基礎(chǔ)設(shè)施云服務(wù)的同時,還會提供如數(shù)據(jù)庫服務(wù),監(jiān)控服務(wù),隊列服務(wù),通知服務(wù)等一系列常見組件。這些服務(wù)同樣即插即用,按需付費。而且這些云服務(wù)都是由一流工程師開發(fā),富有經(jīng)驗的人員運維,經(jīng)過了嚴(yán)酷的實際生產(chǎn)環(huán)境考驗。開發(fā)人員完全可以信任他們。
云時代的開發(fā)和測試
前面討論了DevOps思想和IaaS平臺各自的優(yōu)勢,而這兩者恰恰又是可以很好結(jié)合來達到更好的效果。尤其是在幫助開發(fā)人員加速軟件開發(fā)測試效率,縮短交付周期上非常有用。這種加速主要體現(xiàn)在下面幾個方面:
1.利用IaaS平臺加速開發(fā)和測試人員獲取基礎(chǔ)設(shè)施的效率。在云時代,開發(fā)和測試人員可以在分鐘級別、以非常低的成本獲得想要的基礎(chǔ)設(shè)施,而且這些基礎(chǔ)設(shè)施還不需你投入人力、財力來維護。同時,由于基礎(chǔ)設(shè)施獲取的便捷性和低成本,它讓原來受限于基礎(chǔ)設(shè)施而無法并行的事情現(xiàn)在得以完全并行展開。例如,每個開發(fā)人員都可以獲得一個和生產(chǎn)環(huán)境完全一致的基礎(chǔ)設(shè)施并行開發(fā),開發(fā)和測試的工作也可以并行推進,各種不同想法也能并行得到快速驗證。
2.利用DevOps思想和可編程的IaaS資源融合軟件開發(fā)的各個階段,打破原來存在的人為割裂,加速整個流程的迭代速度。如前面所述,軟件開發(fā)過程中一般包括開發(fā)、測試、驗收和生產(chǎn)幾個階段,每個階段都可以有自己獨立的運行環(huán)境,而且每個階段甚至是由各自獨立的人員來負(fù)責(zé)。在云時代,所有的基礎(chǔ)設(shè)施和應(yīng)用程序的運行環(huán)境都可以通過自動化流程一體化管理,且所有的部署、交付工作都是自動化完成。因為是一體化管理,各個環(huán)境的不一致性就能得到很好的控制,可以極大地避免因為環(huán)境問題導(dǎo)致的開發(fā)流程受阻。如此同時,開發(fā)人員可以利用IaaS公有云提供的大量低成本資源更容易地在開發(fā)、測試和驗收環(huán)境中模擬出更多原來只能在生產(chǎn)環(huán)境中才能出現(xiàn)的場景,如大規(guī)模的流量壓力,大量用戶同時在線等。這樣可以更早發(fā)現(xiàn)系統(tǒng)的性能瓶頸,設(shè)計和實現(xiàn)的缺陷。
3.通過直接使用大量的通用云服務(wù)來減少工作量,加速軟件上線周期。毫無疑問,通過直接復(fù)用IaaS服務(wù)商提供的如數(shù)據(jù)庫服務(wù),監(jiān)控服務(wù)等也大大加速了開發(fā)和測試流程。當(dāng)然,要想在開發(fā)和測試中利用好這些通用云服務(wù),你最好要把自己的開發(fā)測試體系和云緊密聯(lián)系起來。
由于上面的這些明顯的優(yōu)勢,越來越多的開發(fā)團隊已經(jīng)開始用IaaS加DevOps的方式改進自己的開發(fā)測試體系。為了讓開發(fā)人員更容易地使用IaaS云服務(wù)支撐云環(huán)境下的開發(fā)測試,大量基于IaaS的DevOps工具也都把提升軟件開發(fā)及測試效率作為一個重要的設(shè)計目標(biāo)。
【文章來源:FIT2CLOUD微信號】























