專訪金明:如何運(yùn)用DevOps保證項(xiàng)目可靠、高效實(shí)施
原創(chuàng)我們都知道現(xiàn)在中國互聯(lián)網(wǎng)的發(fā)展速度是非常迅猛的,可以說在世界上也達(dá)到了相當(dāng)?shù)囊?guī)模和比例。那么在軟件行業(yè)進(jìn)入互聯(lián)網(wǎng)時(shí)代后,在整個(gè)市場用戶對軟件產(chǎn)品以及服務(wù)的要求也跟著提高,這不僅需要開發(fā)和運(yùn)維人員快速實(shí)現(xiàn),而且要快速部署發(fā)布上線,并且必須保證業(yè)務(wù)可靠、高效運(yùn)行。那么如何去滿足這些要求,加強(qiáng)IT組織需要強(qiáng)有力的流程呢?
在2013年阿里巴巴集團(tuán)主辦的ADC•阿里技術(shù)嘉年華這一場專屬于<互聯(lián)網(wǎng)工程師>的“技術(shù)盛宴”,倡導(dǎo)<干貨分享>的大會(huì)上,51CTO記者有幸采訪到了ThoughtWorks的首席咨詢師 金明老師, 在針對以上的問題和DevOps與敏捷之間的一脈相承關(guān)系在實(shí)際項(xiàng)目操作中的典型問題以及DevOps人員角色部署等典型問題展開討論,以及給出解決對策。
金明,ThoughtWorks首席咨詢師,擁有多年企業(yè)應(yīng)用與互聯(lián)網(wǎng)應(yīng)用開發(fā)經(jīng)驗(yàn), 熱衷折騰新技術(shù),是敏捷和精益的堅(jiān)定追隨者。目前主要關(guān)注于持續(xù)交付、DevOps、敏捷實(shí)施、組織轉(zhuǎn)型以及虛擬化和云計(jì)算,同時(shí)積極參與開源軟件以及國內(nèi)外軟件開發(fā)者的大會(huì)與社區(qū)活動(dòng)。
以下為采訪實(shí)錄:
記者:敏捷的出現(xiàn)打破了用戶、開發(fā)和測試之間的隔閡,實(shí)現(xiàn)了團(tuán)隊(duì)的協(xié)作。DevOps的出現(xiàn)和敏捷之間有著什么樣的關(guān)系?
金明:我覺得這個(gè)是一脈相承的,我們傳統(tǒng)意義上來講,傳統(tǒng)模型帶來的是開發(fā)及測試的部門壁壘。隨著我們通過像敏捷,像Scrum這樣的敏捷方法,在加強(qiáng)開發(fā)團(tuán)隊(duì)和測試團(tuán)隊(duì)之間的溝通協(xié)作之后,其實(shí)我們不可避免地會(huì)面臨到開發(fā)部門和我們的運(yùn)維,以及發(fā)布運(yùn)營這樣的一個(gè)瓶頸。它會(huì)取代我們之前開發(fā)團(tuán)隊(duì)里面所遇到的障礙和瓶頸,我們新的要解決這樣的問題。所以DevOps我認(rèn)為,它從時(shí)間上來看,大概是零七年左右在國外開始流行。從它的思想和實(shí)踐上來看,也是隨著敏捷的實(shí)踐項(xiàng)目繼續(xù)集成、自動(dòng)化部署這樣的一些實(shí)踐成熟。它慢慢地流行起來。
記者:他們之間人員的部署情況,開發(fā)人員跟運(yùn)維人員之間,人員角色和職責(zé)這塊相關(guān)事情如何去部署?
金明:傳統(tǒng)的意義上講,我們開發(fā)團(tuán)隊(duì),開發(fā)完了之后往往是打包扔給發(fā)布部門,或者說是運(yùn)維部門,隨著我們對于發(fā)布的要求越來越高。我們其實(shí)是要求,就是說生產(chǎn)環(huán)境的運(yùn)維部門和發(fā)布團(tuán)隊(duì),跟開發(fā)部門坐到一起,雙方角色互補(bǔ),開發(fā)人員去學(xué)習(xí)運(yùn)維的知識(shí)和工具。運(yùn)維去提供我生產(chǎn)環(huán)境部署的約束和要求,雙方融合形成一個(gè)比較一體化的DevOps這樣的團(tuán)隊(duì)。
記者:目前在云計(jì)算上也提供了一些相關(guān)的部署,這樣是不是能夠很方便地推進(jìn)DevOps?
金明:是,因?yàn)閭鹘y(tǒng)的,我們之前是說,在虛擬化和云計(jì)算出來之前,往往我們的部署和生產(chǎn)運(yùn)維,而且都是在實(shí)體機(jī)上面,實(shí)體機(jī)上面的成本基數(shù)很高的。在虛擬化技術(shù)出來之后,我一個(gè)普通的運(yùn)維人員,輸入命令就可以得到幾臺(tái)這樣的虛擬機(jī)。當(dāng)這樣的工具出來之后,我可以再輸入命令就會(huì)拿到一個(gè)完全一樣的環(huán)境出來。所以我們來講,隨著虛擬化和云計(jì)算技術(shù),以及周邊的管理,像自動(dòng)化創(chuàng)建工具這樣的成熟后,DevOps就傳統(tǒng)的運(yùn)維技能會(huì)變得越來越大眾化,可以被我們開發(fā)人員所接受、所擁抱,再用到環(huán)境里面去。
記者:很多開發(fā)者都認(rèn)為,迭代項(xiàng)目管理方法Scrum是敏捷開發(fā)的代名詞,DevOps您認(rèn)為用什么來做它的代名詞比較合適?
金明:我覺得目前不足以說,就是還不足以說出現(xiàn)像Scrum的這樣的一個(gè)方法論里面比較典型的方法,我就說方法。因?yàn)镈evOps還是以工程實(shí)踐為主,管理實(shí)踐這塊,像Scrum成體系的還比較少。目前各大工具是正在慢慢演化的過程里面,我們看到的剛才講虛擬機(jī)配置和我們來講部署,各自有各自的工具來做。目前還沒有看到說,從底向下,整個(gè)打通的DevOps的方法論。
記者:開發(fā)人員和運(yùn)維人員認(rèn)識(shí)的方法,以及各自所處的角色,都存在根本性的差別。如何通過DevOps來解決他們之間的一些開發(fā)部署的問題。
金明:那我就舉個(gè)例子,像我們之前在國外的項(xiàng)目上面,之前他們開發(fā)和運(yùn)維是分開的兩個(gè)部門,項(xiàng)目之間通過一個(gè)發(fā)布包,做出一個(gè)FTP這樣的去溝通。其他團(tuán)隊(duì)把包放在FTP上面,然后運(yùn)維從FTP上取下包去部署。這個(gè)導(dǎo)致的問題就是,很多生產(chǎn)環(huán)境下面的環(huán)境配置,這樣的一些軟件要求,跟開發(fā)的時(shí)候不一樣。我們現(xiàn)在做事的方式是,就是說從發(fā)布團(tuán)隊(duì)和運(yùn)維團(tuán)隊(duì)里面,它會(huì)變成一個(gè)池子,里面每個(gè)成員會(huì)變成具有DevOps能力的成員。DevOps成員是作為團(tuán)隊(duì)的一分子參與到開發(fā)團(tuán)隊(duì)的日常工作里面去,它的幾個(gè)主要工作職責(zé)會(huì)包括,第一,它會(huì)幫助團(tuán)隊(duì)把他們團(tuán)隊(duì)對環(huán)境的配置、對環(huán)境的要求,用一些工具把它變成代碼,變成自動(dòng)化的。
另外一個(gè)就是說,在生產(chǎn)環(huán)境下面會(huì)考慮到可用性、考慮到安全、考慮到運(yùn)維的要求。它會(huì)把這樣的約束條件灌輸給團(tuán)隊(duì),團(tuán)隊(duì)在設(shè)計(jì)系統(tǒng)的時(shí)候就考量這一塊的約束情況,這樣的時(shí)候?qū)嵤┚蜁?huì)更好一些。
記者:很多人都認(rèn)為DevOps是一個(gè)非常強(qiáng)大的方法論,它可以在眾多不同層面上產(chǎn)生共鳴。您認(rèn)為開發(fā)人員和運(yùn)維人員應(yīng)該如何去落實(shí)DevOps?需要具備哪些條件?
金明:在我們公司的話,DevOps也會(huì)變成是一種角色,就像我們開發(fā)測試一樣變成一個(gè)角色。很早的話跟團(tuán)隊(duì)一起來工作,然后考慮我們像環(huán)境自動(dòng)化、配置自動(dòng)化,以及我們部署自動(dòng)化這樣的事情,很早會(huì)作為團(tuán)隊(duì)的一份子參與到這里面去。
就相當(dāng)說,假如說一個(gè)傳統(tǒng)的團(tuán)隊(duì),我希望往DevOps這塊去轉(zhuǎn)型的時(shí)候,可能要一些這樣的先決條件。在整個(gè)過程可能要有些這樣的挑戰(zhàn)和問題要克服。的確是說,開發(fā)和運(yùn)維其實(shí)是兩種不同的技能,開發(fā)的頭腦里面就是我趕緊把代碼寫完,扔給運(yùn)維就好了。運(yùn)維的頭腦就想著,我這塊要是出了問題,那我就可能睡不著覺,每天晚上接到電話起來維護(hù)。
其實(shí)來講,兩邊對對方存在一些這樣的誤解,很大的原因就是,大家對于各自工作是不了解的,他不知道運(yùn)維需要做什么事情,我只看到運(yùn)維可能有這樣的一些報(bào)表,有這樣的投影,投在那里說系統(tǒng)實(shí)際是怎么樣,有沒有出現(xiàn)問題。運(yùn)維看到開發(fā)團(tuán)隊(duì)在那邊寫代碼,也不知道在做什么事情。要想在團(tuán)隊(duì)里面實(shí)施這樣的運(yùn)維,DevOps的話,其實(shí)我們覺得它從文化和技術(shù),或者是技能兩方面都要提供相應(yīng)的輔導(dǎo)。從文化層面上面來講,就要鼓勵(lì)我們的運(yùn)維和開發(fā)人員坐在一起,互相地分享。因?yàn)閳F(tuán)隊(duì)的目標(biāo)還是一致的,我把系統(tǒng)更快的部署到環(huán)境上去,讓它能夠穩(wěn)定安全地運(yùn)行。從文化上面來講,首先要讓大家理解這樣的一個(gè),大家是共同的目標(biāo),不是說勢如水火。
其次的話,要營造出雙方相互協(xié)作的一個(gè)情況、一個(gè)場景。就是文化上面,然后從場景和技巧上面來講,除了雙方對于各自技能的掌握和培訓(xùn)之外,我們發(fā)現(xiàn)還是有一些前提條件是比較滿足的,比如說我們來講企業(yè)集成。我們需要自動(dòng)化測試,只要我們能夠在團(tuán)隊(duì)內(nèi)部把企業(yè)集成和自動(dòng)化測試先做到一定程度的話,比如說我們可以有信心地拍胸脯說,我們這個(gè)軟件沒有太大的問題。在這樣的情況下面,我們再引入DevOps做這個(gè),從軟件交付的角度來講,會(huì)是比較好的一種方式。否則的話團(tuán)隊(duì)整天在修復(fù)缺陷,這時(shí)候我們的運(yùn)維和開發(fā)坐在一起可能沒有太多的意義,這是第一。
第二就是說,如果我們不是這么全局來看,我們是從局部優(yōu)化來看,我們可以看到運(yùn)維團(tuán)隊(duì)在系統(tǒng)配置、系統(tǒng)創(chuàng)建這一塊的技能。它也是非常必要的,因?yàn)槲覀儼l(fā)現(xiàn)開發(fā)團(tuán)隊(duì),不管是開發(fā)還是測試,它其實(shí)有一個(gè)很嚴(yán)重的問題,他們要想做調(diào)試、做測試的時(shí)候,環(huán)境是不夠的。可能這個(gè)環(huán)境做完一套測試之后,環(huán)境就被污染了、數(shù)據(jù)被污染、我的應(yīng)用包被污染。在追求環(huán)境的準(zhǔn)備和提供方面,其實(shí)我們的運(yùn)維是可以進(jìn)來,或者是我們的DevOps團(tuán)隊(duì)是可以形成的,然后去做一些相對來講沒有那么廣的事情,還是跟在這一塊上面。而這個(gè)前提條件就可能是我們這樣的一個(gè)架構(gòu)也好、技術(shù)也好,能夠比較好的支持我們DevOps去做基礎(chǔ)設(shè)施代碼的工作。
跳出這兩種方式,兩種場景下來看,如果在一個(gè)組織里面想去推DevOps的話,其實(shí)上層的支持是必不可少的。上層要有這樣的決心和魄力,我們來挑個(gè)項(xiàng)目,我們從點(diǎn)擊項(xiàng)目開始,我們試著哪一個(gè)運(yùn)維團(tuán)隊(duì)的成員跟開發(fā)團(tuán)隊(duì)坐在一起。然后看看如何在雙方的磨合過程里面,能夠取得一個(gè)比較平衡、比較優(yōu)秀的結(jié)果。其實(shí)也看到這樣的情況,有一些組織,尤其是互聯(lián)網(wǎng)組織,他們的CIO就會(huì)喜歡拉一個(gè)團(tuán)隊(duì)。從運(yùn)維里面拉一兩個(gè)人出來,那就專門做環(huán)境自動(dòng)化,就設(shè)計(jì)代碼這個(gè)工作,去幫助他的開發(fā)團(tuán)隊(duì)里面,去準(zhǔn)備測試環(huán)境的,一鍵式搭建,一鍵式配置的事情。
#p#
記者:在前些時(shí)間,IBM的一個(gè)技術(shù)峰會(huì)上面,我看到了很多人都在在討論著一個(gè)DevOps的主題,他們認(rèn)為DevOps已經(jīng)成為幫助企業(yè)實(shí)現(xiàn)移動(dòng)和云計(jì)算轉(zhuǎn)型的關(guān)鍵。你是怎么認(rèn)為的?
金明:這是一個(gè)非常大的概念和論斷,從大層面來講,我是基本贊同這樣的一個(gè)論斷的,為什么呢?隨著移動(dòng)應(yīng)用和云計(jì)算的興起,其實(shí)給我們開發(fā)帶來兩個(gè)大的變化。一個(gè)是開發(fā)這邊的復(fù)雜信息降低了,我們傳統(tǒng)意義上的互聯(lián)網(wǎng),比如做個(gè)網(wǎng)站,你前后端代碼可能是幾十萬行、幾百萬行代碼,出現(xiàn)移動(dòng)互聯(lián)網(wǎng)的應(yīng)用可能就是很少的一些代碼,輕量的這樣一個(gè)應(yīng)用。
從這樣的角度來看,在傳統(tǒng)意義上,如果說去對我的應(yīng)用做測試,去做集成,它所暴露出來的問題就不是整個(gè)移動(dòng)應(yīng)用去運(yùn)維業(yè)務(wù)上面的大問題。相反我如何能夠快速的開發(fā)出來,然后發(fā)布出去,然后積極反饋、修改,再快速發(fā)布出去。這個(gè)變成我們移動(dòng)應(yīng)用能否在互聯(lián)網(wǎng)業(yè)務(wù)上面取得門傳票的這樣一個(gè)很關(guān)鍵的點(diǎn)。從另外方面來看,從云計(jì)算來看,它虛擬化技術(shù)又給我們帶來背后的,基礎(chǔ)設(shè)施這一塊的輕量化。技術(shù)和應(yīng)用輕量化,加虛擬化和背后基礎(chǔ)設(shè)施的輕量化。這就迫使我們在如何融合雙方的節(jié)點(diǎn)上面,來提出更好、更先進(jìn)的工具和技術(shù),DevOps就來幫助我們解決這個(gè)問題。
記者:其實(shí)我知道目前大部分的互聯(lián)網(wǎng)行業(yè)企業(yè)都能夠適用DevOps這個(gè)方法論,或者說有開發(fā)部門、運(yùn)維部門這樣的一些企業(yè)。那么DevOps在傳統(tǒng)的企業(yè)它能用上嗎?
金明:這個(gè)問題,我想這樣來看,DevOps類似于我們敏捷方法,它其實(shí)也是跟思想原則和具體的實(shí)現(xiàn),DevOps它的本身的這樣一個(gè)思想和價(jià)值觀就是說,讓我們的開發(fā)和我們的運(yùn)維也好,或者說我們的實(shí)施也好,讓他們能夠更好地,雙方能夠消除各自領(lǐng)域的浪費(fèi)。從原則上來講,就會(huì)有一些像基礎(chǔ)設(shè)施代碼、配置自動(dòng)化等等這樣的一些原則。
我想對DevOps來講,不管是傳統(tǒng)行業(yè),還是互聯(lián)網(wǎng)行業(yè),或者是移動(dòng)應(yīng)用行業(yè)。其實(shí)它的原則和思想都是適用的,是通的。但是在具體上可能會(huì)有些差別。舉個(gè)例子,應(yīng)該是愛立信,愛立信之間有這樣的網(wǎng)絡(luò)設(shè)備,網(wǎng)絡(luò)設(shè)備整個(gè)的需要開發(fā),上到板子上面,部署到機(jī)房里面去測試。之前的話會(huì)出現(xiàn)一個(gè)問題,它在實(shí)驗(yàn)室的板子上面燒的程序是可以工作,大概到生產(chǎn)上的板子,實(shí)際上的板子,它也是不能工作的。于是他們針對這個(gè)問題,也是做了DevOps相關(guān)的這樣一些活動(dòng),把生產(chǎn)環(huán)節(jié)和實(shí)施上面的,這樣的一些問題和要求,提早地告訴給開發(fā)團(tuán)隊(duì)。讓開發(fā)團(tuán)隊(duì)在他們的實(shí)驗(yàn)室里面,就按照生產(chǎn)環(huán)境準(zhǔn)備相應(yīng)的板子和規(guī)格。在開發(fā)的時(shí)候,就按照跟生產(chǎn)環(huán)境幾乎一致的板子來驗(yàn)證他們實(shí)際是否是一樣的,這也是DevOps良好的一個(gè)使用場景。
如果存在多套不同的環(huán)境也好,或者是碰到不同階段,比如說我們開發(fā)調(diào)試構(gòu)建,跟我們今后的運(yùn)維,或者說實(shí)施,這樣的階段其實(shí)他們都會(huì)這樣的優(yōu)化和改進(jìn)的空間,雙方的一個(gè)融合,就是DevOps這樣的一個(gè)空間和土壤。
記者:之前我也了解過,在ThoughtWorks公司里面的一些項(xiàng)目也用到了DevOps持續(xù)交付。在這個(gè)過程當(dāng)中,你們公司在實(shí)施的過程當(dāng)中,你們遇到一些什么樣的問題?
金明:這其實(shí)是一個(gè)現(xiàn)在很多人會(huì)關(guān)心的問題。就是說DevOps雖然給我們承諾,或者是許諾這么良好的一個(gè)愿景,在具體過程會(huì)有些什么問題?在我們做的時(shí)候也是遇到一些相對的問題?現(xiàn)在我講講最主要的幾個(gè)大的問題。
在我們傳統(tǒng)的像軟件架構(gòu)的設(shè)計(jì)和它對于這樣的配置,環(huán)境配置、像數(shù)據(jù)這樣的一些管理的工作,并沒有達(dá)到一個(gè)比較成熟和穩(wěn)定的地步。導(dǎo)致的問題是什么?比如說我們曾經(jīng)遇到這樣的一個(gè)項(xiàng)目,這樣的一個(gè)系統(tǒng)。這個(gè)系統(tǒng)包括十幾個(gè)這樣的不同系統(tǒng)組成,不同的系統(tǒng)使用的技術(shù)又不一樣。有些系統(tǒng),甚至是沒有人能知道他上面的配置信息什么樣子,因?yàn)檫@個(gè)已經(jīng)太早了,用了比較早的語言來寫的。所以這塊信息的丟失,其實(shí)對于我們DevOps來講,就會(huì)導(dǎo)致走很多的彎路,很多這樣的一個(gè)嘗試。但是其實(shí)正是因?yàn)镈evOps,反而才能解決我們之前像這樣配置信息丟失,架構(gòu)不合理,分成和我們的模塊不合理,這樣的情況。所以這也算是DevOps給我們帶來反向的一個(gè)優(yōu)勢,讓我們很好地審視我們之前的交流設(shè)計(jì)、我們的發(fā)布、我們的環(huán)境配置是否是經(jīng)過仔細(xì)考量和設(shè)計(jì)過的。
記者:你能闡述一下你對DevOps前景的發(fā)展是怎么樣的?
金明:我覺得會(huì)是一個(gè)比較廣闊的空間,因?yàn)檫@塊是涉及到三個(gè)大背景的考量,第一個(gè)大背景是市場的不確定性,導(dǎo)致IT對于業(yè)務(wù)的響應(yīng),要求是越來越快。第二個(gè)是像現(xiàn)在公有云的技術(shù),對于我們企業(yè)內(nèi)部基礎(chǔ)設(shè)施,乃至私有數(shù)據(jù)中心的要求。第三個(gè)就是我本身應(yīng)用系統(tǒng)越來越簡化的大背景。在這幾個(gè)背景下面來看,其實(shí)我們就發(fā)現(xiàn),我們的企業(yè)里面,不管是什么企業(yè),企業(yè)里面這樣的運(yùn)維團(tuán)隊(duì)和開發(fā)團(tuán)隊(duì)會(huì)面臨到交付周期越來越短,對于基礎(chǔ)設(shè)施這塊響應(yīng)的能力越來越高。我的系統(tǒng)越來越簡化,越來越傾向的這樣一個(gè)背景。
從這幾點(diǎn)出發(fā),或者到另外一個(gè)社區(qū)里面,DevOps工具也是越來越成熟,像我們以前做日志管理、做事件管理的工具,現(xiàn)在慢慢都由開源的成熟工具出來。其實(shí)從另外一方面也是加強(qiáng)了DevOps的能力,所以從雙方幾個(gè)大勢來看,我認(rèn)為DevOps未來會(huì)在傳統(tǒng)企業(yè)、互聯(lián)網(wǎng)企業(yè)里面占據(jù)更多的比重。