什么是DevOps?

本文轉(zhuǎn)載自公眾號(hào)? 碼農(nóng)翻身

開(kāi)發(fā)和運(yùn)維的戰(zhàn)爭(zhēng)

五天前,張大胖負(fù)責(zé)的開(kāi)發(fā)團(tuán)隊(duì)向運(yùn)維部門交付了一批新代碼,這是一次用戶期待已久的重要升級(jí),部署進(jìn)行得非常順利,大家都很高興。?

可是今天生產(chǎn)環(huán)境的CPU持續(xù)接近100%,有好幾臺(tái)服務(wù)器都down機(jī)了, 運(yùn)維老大勃然大怒:“已經(jīng)是第三次了! 張大胖,你們開(kāi)發(fā)團(tuán)隊(duì)怎么搞的? 新代碼一上線CPU就100%!” ?

張大胖自然也不甘示弱:“我們?cè)跍y(cè)試環(huán)境測(cè)試得非常充分,用戶壓力比生產(chǎn)環(huán)境大多了,代碼堅(jiān)如磐石,肯定是你們配置錯(cuò)了什么東西!”?

“不可能,我們是嚴(yán)格按照你們要求的步驟來(lái)部署的,肯定是你們代碼的問(wèn)題!”?

“那測(cè)試環(huán)境怎么就沒(méi)有問(wèn)題?”

?...... ?

兩位主管吵了好久,也沒(méi)有什么好的解決方案,大家又熬了一個(gè)通宵,把代碼回滾到上個(gè)版本,燒香拜佛,希望不要再出問(wèn)題。?

經(jīng)過(guò)這一番折騰,今年年底的獎(jiǎng)金估計(jì)是懸了!?

張大胖覺(jué)得極為郁悶, 心緒難平,黑著臉來(lái)到茶水間倒了一杯咖啡,坐在那里一邊喝一遍感慨這運(yùn)維部門簡(jiǎn)直是太難合作了!?

看看他們新招的這些人,完全不懂業(yè)務(wù),他們?yōu)榱艘疤颖茇?zé)任”,經(jīng)常說(shuō):“我不懂業(yè)務(wù),這次上線的內(nèi)容,你要把每一步都寫得清清楚楚,我只管執(zhí)行,不問(wèn)為什么,出了問(wèn)題可不是我的責(zé)任。”你說(shuō)氣人不氣人! 難道他就想當(dāng)個(gè)機(jī)器人嗎??

還有,他們運(yùn)維團(tuán)隊(duì)每個(gè)人側(cè)重不同,有人負(fù)責(zé)數(shù)據(jù)庫(kù)腳本執(zhí)行,有人負(fù)責(zé)Web服務(wù)器,有人負(fù)責(zé)SSO , 我的天,每次上線前都得把一堆人拉過(guò)來(lái)開(kāi)好幾次會(huì),讓他們熟悉操作步驟。 這個(gè)人部署了一次,好不容易熟悉了,下一次又換了一個(gè)人,還美其名曰這是人力資源池,能提高效率,但是新人又需要從頭兒學(xué)習(xí),這怎么可能不出錯(cuò)?! 唉......

張大胖的回憶

喝了兩杯咖啡以后,張大胖稍微平靜了一下,仔細(xì)想想,本質(zhì)原因還是軟件本身太復(fù)雜了,不但開(kāi)發(fā)復(fù)雜,部署也超級(jí)復(fù)雜,每次部署就把人扒掉一層皮。?

張大胖不由地想起來(lái)這些年來(lái)自己經(jīng)歷過(guò)的軟件開(kāi)發(fā)和部署流程。?

大學(xué)時(shí)候,跟著老師做一些小項(xiàng)目,開(kāi)發(fā)、測(cè)試都是一個(gè)人搞定,部署到用戶那里也是自己做,幾乎沒(méi)出過(guò)岔子。?

畢業(yè)后進(jìn)入一個(gè)小公司,做的是C/S架構(gòu)的系統(tǒng),有了開(kāi)發(fā)團(tuán)隊(duì)、測(cè)試團(tuán)隊(duì)之分,開(kāi)發(fā)團(tuán)隊(duì)把代碼寫完,交給測(cè)試團(tuán)隊(duì)測(cè)試,通過(guò)以后就可以到客戶那里部署了。?

通常來(lái)說(shuō)實(shí)施人員也都是開(kāi)發(fā)或者測(cè)試的兄弟們兼任,自己也兼職干過(guò),拿著部署文檔和光盤,到客戶那里嚴(yán)格按照步驟把系統(tǒng)安裝到客戶的機(jī)器上,基本上沒(méi)啥大問(wèn)題,即使有了問(wèn)題,現(xiàn)場(chǎng)調(diào)試一下也都能解決,大不了把開(kāi)發(fā)的兄弟們叫過(guò)來(lái)一起熬夜。

再后來(lái)互聯(lián)網(wǎng)浪潮來(lái)臨,自己也跳槽到這家互聯(lián)網(wǎng)公司,專門做一個(gè)網(wǎng)上約車的系統(tǒng),給用戶提供約車服務(wù),根本不用到客戶那里去安裝軟件,公司獨(dú)立地運(yùn)行、維護(hù)好這個(gè)系統(tǒng)就萬(wàn)事大吉。?

但是這個(gè)網(wǎng)上約車的系統(tǒng)可比原來(lái)的單機(jī)軟件、C/S軟件要復(fù)雜得多,尤其是要面對(duì)海量用戶的高并發(fā)訪問(wèn),需要解決各種各樣的技術(shù)難題,挑戰(zhàn)巨大。 系統(tǒng)不但復(fù)雜,還需要以24*7的方式運(yùn)行, 靠開(kāi)發(fā)或測(cè)試的兼職人員已經(jīng)無(wú)法維護(hù)了。

公司專門設(shè)立了運(yùn)維(Operations)部門,負(fù)責(zé)系統(tǒng)的部署、日常維護(hù)、監(jiān)控。運(yùn)維人員的地位空前提高,當(dāng)然,對(duì)他們的技能的要求也空前提高。?

張大胖看過(guò)一個(gè)招聘的運(yùn)維的郵件:?

熟練使用Linux, unix, windows操作系統(tǒng);?

精通各種常用服務(wù)器軟件(tomcat, apache, nginx,redis,mysql...)的配置及優(yōu)化?

了解負(fù)載均衡和高可用的原理,如LVS,Keepalived等?

熟悉網(wǎng)絡(luò)原理,TCP/IP協(xié)議,掌握至少一種腳本語(yǔ)言。?

會(huì)使用各種配置管理和部署管理的工具。?

......?

總之,運(yùn)維的重要性已經(jīng)和開(kāi)發(fā)差不多了。?

開(kāi)發(fā)和運(yùn)維的鴻溝

為了加快交付速度,前兩年,自己帶領(lǐng)著開(kāi)發(fā)團(tuán)隊(duì)實(shí)施了敏捷轉(zhuǎn)型,成功地把原來(lái)的瀑布開(kāi)發(fā)方式轉(zhuǎn)換成了小步快跑,經(jīng)常交付的敏捷模式。??


(圖片來(lái)源:http://www.agilenutshell.com/scrum)?

通過(guò)敏捷軟件開(kāi)發(fā),把需求人員,開(kāi)發(fā)人員,測(cè)試人員拉到了一起,形成所謂“特性團(tuán)隊(duì)”,把需求拆分成一個(gè)個(gè)獨(dú)立的,對(duì)用戶有價(jià)值的故事,按優(yōu)先級(jí)排序以后再開(kāi)發(fā)、測(cè)試,甚至可以達(dá)到每?jī)芍芫湍芙桓稁讉€(gè)獨(dú)立需求的程度。

(碼農(nóng)翻身注,參見(jiàn)《白話敏捷軟件開(kāi)發(fā)》)

成功的敏捷轉(zhuǎn)型獲得了公司的極大認(rèn)可,還對(duì)外輸出了不少培訓(xùn)。?

雖然能頻繁地交付,但是卻不能頻繁地上線,原因很簡(jiǎn)單:搞運(yùn)維的家伙們總是希望系統(tǒng)穩(wěn)定、穩(wěn)定、再穩(wěn)定, 穩(wěn)定壓倒一切。所以他們從骨子里不想頻繁地上線,那不是給自己找麻煩嗎??

這恰恰和自己的敏捷軟件開(kāi)發(fā)相反,敏捷就是要擁抱變化啊 !


?(開(kāi)發(fā)要求變化,運(yùn)維要求穩(wěn)定,圖片創(chuàng)意來(lái)自 http://dev2ops.org,老劉做了重畫)?

想通了這個(gè)本質(zhì)矛盾,張大胖就明白自己是搞不定這個(gè)問(wèn)題了,必須上層出面解決。?

張大胖立刻去找CTO Bill,希望他能出點(diǎn)好主意。 ?

Dev + Operations = DevOps

讓張大胖沒(méi)想到的是, 運(yùn)維主管老李已經(jīng)在Bill辦公室里了,張大胖心說(shuō)不好,這小子也許惡人先告狀了。?

Bill 一看到愁眉哭臉的張大胖,讓他先坐下,聽(tīng)老李把開(kāi)發(fā)和運(yùn)維之間的“矛盾”和“戰(zhàn)爭(zhēng)”講完。?

老李嘮嘮叨叨,說(shuō)的問(wèn)題和自己思考的也差不多。?

Bill笑著說(shuō):“大胖,軟件的開(kāi)發(fā)流程基本上就是需求->開(kāi)發(fā)->測(cè)試->部署, 現(xiàn)在你的團(tuán)隊(duì)已經(jīng)把需求、開(kāi)發(fā)、測(cè)試給‘團(tuán)結(jié)’到一起了, 看來(lái)你又要‘團(tuán)結(jié)’一個(gè)新的小伙伴了!”?

“難道是老李的運(yùn)維部門?”?

“沒(méi)錯(cuò)?!?

“那是不可能的, 我們的目標(biāo)都完全不同,一個(gè)要變化,一個(gè)要穩(wěn)定,怎么可能在一起玩?” 大胖非常詫異。

“不,以后我們要強(qiáng)調(diào)業(yè)務(wù)目標(biāo),以用戶的價(jià)值為唯一的評(píng)判標(biāo)準(zhǔn),團(tuán)隊(duì)的考核評(píng)價(jià)機(jī)制也要改變,個(gè)體和團(tuán)隊(duì)的成功都要放在整個(gè)開(kāi)發(fā)-運(yùn)維生命周期內(nèi)來(lái)進(jìn)行評(píng)價(jià),開(kāi)發(fā)完成了很多用戶需求不一定是成功,運(yùn)維保障系統(tǒng)不down機(jī)也不一定是成功!只有用戶想要的功能被及時(shí)實(shí)現(xiàn)了,被成功部署了,被穩(wěn)定使用了才算成功。 ” CTO總是很擅長(zhǎng)用MBA的詞匯來(lái)講話。?

“就是說(shuō)要求我們運(yùn)維和開(kāi)發(fā)緊密合作嘍?”?老李接著問(wèn)道。?

“是啊,現(xiàn)在有個(gè)熱詞叫做DevOps,就是把敏捷開(kāi)發(fā)部門和運(yùn)維部門之間的圍墻打通,形成閉環(huán)?!?/p>


?“難道我們要再增加一個(gè)部門,叫DevOps部門? 招聘DevOps工程師?”?

“不不,如果再增加一個(gè)這樣的部門,豈不是又增加了一堵墻? 我們本來(lái)是要打破開(kāi)發(fā)和運(yùn)維團(tuán)隊(duì)之間的隔閡啊。其實(shí)運(yùn)維部門的工作目標(biāo)不僅僅是讓我們的網(wǎng)上約車系統(tǒng)更加穩(wěn)定和高效,更需要支持業(yè)務(wù)的快速演化——這一點(diǎn)是和你們敏捷軟件開(kāi)發(fā)的目標(biāo)是一致的啊?!?/p>

?"但我們也不能頻繁部署?。靠焖俸头€(wěn)定的矛盾還是解決不了。"老李嘆了口氣。

?"我知道張大胖的團(tuán)隊(duì)正在實(shí)施微服務(wù)的改造,將來(lái)再部署的話就不是以一個(gè)巨無(wú)霸應(yīng)用為單位了,而是以一個(gè)個(gè)微服務(wù)為單位,那樣就簡(jiǎn)單得多,頻繁部署是有可能的,并且出了錯(cuò)回滾也便捷得多,肯地不用你們熬夜了!" ?

張大胖和老李都點(diǎn)頭認(rèn)同。?

?“那具體該怎么做?”?

?“首先是觀念的改變,以后你們不能互相推卸責(zé)任,互相指責(zé),而要共同擔(dān)責(zé)了!一個(gè)項(xiàng)目的開(kāi)發(fā)、部署、維護(hù),是你們雙方的事情,雙方都要對(duì)業(yè)務(wù)負(fù)責(zé),出了什么問(wèn)題,你們要通力合作,共同解決。這一點(diǎn)你們回去后要給組員多`洗洗腦`。”

?張大胖心想,我們剛剛通力合作回滾了代碼。

?“還有,”,Bill看了一眼老李, “運(yùn)維人員也要了解業(yè)務(wù),Code變化帶來(lái)的影響要告知運(yùn)維人員。你們開(kāi)發(fā)人員工作的開(kāi)發(fā)/測(cè)試環(huán)境要盡可能地和生產(chǎn)環(huán)境一致?!?

“運(yùn)維部門所要求的詳細(xì)安裝步驟實(shí)在是太煩人了!” 張大胖抱怨。

Bill說(shuō)道:“我們先設(shè)定一個(gè)短期目標(biāo),把部署工作完全自動(dòng)化起來(lái)。部署的腳本由老李的運(yùn)維部門主導(dǎo),有問(wèn)題大胖來(lái)輔助, 將來(lái)這個(gè)部署腳本要在所有的環(huán)境都用起來(lái)!”

?張大胖和老李再次點(diǎn)頭。?

Bill又說(shuō)道:“最后一點(diǎn)就是度量,例如失敗部署的百分比,用戶開(kāi)的ticket數(shù)目,故障恢復(fù)的平均時(shí)間等等,這些老李應(yīng)該比我清楚。我們會(huì)用這些度量指標(biāo)去衡量DevOps做得到底怎么樣, 最重要的是我們無(wú)論用了什么工具、方法,如果最后沒(méi)有減少需求從提出到上線,交付給用戶使用的時(shí)間,那都是失敗。我要求你們兩個(gè)想盡一切辦法,去減少這個(gè)時(shí)間,不是一次、兩次,而是持續(xù)、穩(wěn)定地交付給用戶?!?/p>

張大胖說(shuō):“這DevOps聽(tīng)起來(lái)不錯(cuò),但實(shí)施起來(lái)估計(jì)難度不小?。 ?/p>

Bill說(shuō)道:“我們先選定一個(gè)產(chǎn)品作為試點(diǎn),然后再擴(kuò)大推廣吧!”

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容