火箭還是飛機(jī)?——DevOps的兩種模式

一、背景

在當(dāng)下的軟件應(yīng)用開發(fā)領(lǐng)域中,越來越多的敏捷化企業(yè)希望自己的軟件開發(fā)過程能以超音速、甚至于星際穿梭的速度,來快速響應(yīng)各種變化,但同時還要保證安全性。DevOps流水線無疑為這一目標(biāo)提供了最佳實踐。

但是,要完全滿足這樣的需求,我們應(yīng)該如何去建立合適的DevOps流水線呢?有沒有一種很好的方式,能夠幫助我們?nèi)ダ斫釪evOps流水線當(dāng)中CI/CD過程,以及容器技術(shù),如Docker和Kubernetes,在其中的角色和影響呢?

其實,DevOps流水線的建設(shè)可以類比為兩種模式:火箭式或飛機(jī)式。從眾多客戶的應(yīng)用實踐來看,要想運行一個完善的、可靠的DevOps流水線,火箭式的建設(shè)是遠(yuǎn)遠(yuǎn)不夠的,實際遇到的困難要大得多。

二、火箭發(fā)射模式

我們通常把DevOps流水線理解為一個簡單的、從左到右的線性過程:編寫代碼、提交、構(gòu)建、測試、部署,以及作為產(chǎn)品發(fā)布。創(chuàng)建出來的軟件在流水線當(dāng)中就像被裝船運送一樣,有著清晰定義的去向。

在這種模式下,創(chuàng)建一個應(yīng)用程序就像發(fā)射登陸火星的火箭一樣。在允許登陸任務(wù)繼續(xù)進(jìn)行之前,必須要計劃、審批、測試,以及驗證所有的工作。為了準(zhǔn)備發(fā)射,所有團(tuán)隊必須緊密地協(xié)同工作。我們只有一次機(jī)會去發(fā)射這個火箭,而且火箭一旦發(fā)射,就再沒有機(jī)會進(jìn)行修改和更新。從發(fā)射臺到最終到達(dá)火星,火箭的功能是固定的、不可修改的。

火箭發(fā)射是一次性的。每一次測試都需要創(chuàng)建一個新的火箭,而這會帶來一些未知的風(fēng)險。新的火箭需要在確認(rèn)所有系統(tǒng)都準(zhǔn)備好了之后才能發(fā)射,以完成承擔(dān)的任務(wù)。

這是一個清晰的、經(jīng)典的工程模型。但是,這不是DevOps應(yīng)有的工作方式。


三、航班運行模式

上述火箭模式中比較好的DevOps實踐是在創(chuàng)建和運行服務(wù)時,開發(fā)和運維團(tuán)隊在研發(fā)生命周期的各個階段都緊密地合作。

然而,DevOps并不是像高風(fēng)險火箭發(fā)射那樣簡單的從左到右的線性過程。相反,它是一個頻繁觸發(fā)且不會終止的循環(huán)過程,而且每一次觸發(fā)都會引入一些新的的風(fēng)險。所以,DevOps更像是現(xiàn)代的航空系統(tǒng)。在任何時間,全球的航空公司都頻繁地,事實上是連續(xù)地,發(fā)送著航班,運載著上百萬對其充滿信任的旅客。


航空公司管理其飛機(jī)和航線的流程,和DevOps流水線保證應(yīng)用發(fā)布時效性和可靠性的方法是十分相像的。和軟件企業(yè)一樣,航空公司一樣要緊跟技術(shù)的發(fā)展、快速響應(yīng)安全問題,以及適應(yīng)客戶需求的變化,同時還要保證整個系統(tǒng)不中斷地運行。在日常運營中,航空公司持續(xù)對每架飛機(jī)進(jìn)行檢查(測試)、維護(hù)(打補(bǔ)?。约鞍才胚\營時間。這個過程和DevOps中應(yīng)用的持續(xù)集成、更新和交付過程非常類似的。

和火箭發(fā)射的一次性不同,飛機(jī)能夠反復(fù)地執(zhí)行起飛和下降,最終執(zhí)行航線任務(wù)的和最初通過測試飛行的都是同一架飛機(jī),這充分表明了兩種模式的差異性。那么,怎樣才能保證DevOps流水線運轉(zhuǎn)得更像是一個航空公司,而不是一名火箭兵呢?

四、起飛前的清理工作

火箭和飛機(jī)都是由許多資源組成的產(chǎn)品,不同的生產(chǎn)部門分別負(fù)責(zé)結(jié)構(gòu)、機(jī)械和控制系統(tǒng)等各個部分,而且是由不同的供應(yīng)商提供大部分的組件,從最基本的如門鎖、座椅、地毯等,直到復(fù)雜的如導(dǎo)航系統(tǒng)等。

類似的,每一個軟件應(yīng)用也是由組織內(nèi)的多個團(tuán)隊共同創(chuàng)建的,而且應(yīng)用運行的大部分代碼,例如操作系統(tǒng)和語言框架等,都是以企業(yè)外部的遠(yuǎn)程倉庫為來源的。

開發(fā)人員可以控制將自己開發(fā)代碼的哪些部分加入構(gòu)建。但是,對于從公共倉庫下載的外部依賴包,如npm或maven等,又該如何控制呢?那些包可能會不定期的進(jìn)行修改,而這是你無法控制的。

如果你的DevOps流水線像發(fā)射火箭一樣,那么針對測試或發(fā)布的每次新構(gòu)建,都會成為偷渡者潛入火箭的機(jī)會。如果無法做到持續(xù)監(jiān)控,那些計劃之外的東西就可能進(jìn)入新的構(gòu)建,從而導(dǎo)致每次構(gòu)建都不能獲得完全相同的結(jié)果。

五、前往跑道

Docker鏡像就像是飛行器,不管是火箭還是飛機(jī),通過構(gòu)建而成,并封裝了應(yīng)用要執(zhí)行的所有功能。從發(fā)射到著陸,Docker鏡像的能力保持不變。

Docker引擎,結(jié)合鏡像倉庫,把鏡像轉(zhuǎn)換為容器,就像把這些飛行器推送到發(fā)射平臺。而像Kubernetes這樣的編排工具就進(jìn)一步把這些容器發(fā)射到航線上去。

Docker引擎,結(jié)合鏡像倉庫,把鏡像轉(zhuǎn)換為容器,就像把這些飛行器推送到發(fā)射平臺。而像Kubernetes這樣的編排工具就進(jìn)一步把這些容器發(fā)射到航線上去。

如果像處理火箭一樣,每次發(fā)射一個新的,那在開發(fā)、測試,或發(fā)布階段構(gòu)建的每個Docker鏡像,都有可能和前一個有一些不同。


而如果像飛機(jī)一樣處理,就意味著對發(fā)射到空中的內(nèi)容有更大的確定性。航空公司不會為每次起飛都制造一架新的飛機(jī)。他們只是測試飛機(jī),然后在航線上可靠地運行飛機(jī),直到飛機(jī)需要更換為止。

構(gòu)建一個Docker鏡像,然后在測試到發(fā)布的流水線上進(jìn)行升級,而不是重新構(gòu)建,能夠確保這個鏡像帶上航線的都能每次、準(zhǔn)時、安全地飛翔。


六、地面控制

正如上述分析的,真正的DevOps流水線不是簡單的從左到右的線性過程,而是設(shè)計、分解和重構(gòu)的復(fù)雜、迭代、網(wǎng)絡(luò)化的過程。

為了使DevOps流水線運轉(zhuǎn)得更像是航空公司,Artifactory可以作為地勤人員,來保證一切都按計劃、平穩(wěn)地運行。Artifactory使得開發(fā)人員能夠控制從代碼構(gòu)建而來的Docker鏡像,并通過總是在航線中運行同一架飛機(jī)來保證可靠性和速度。

首先,Artifactory解決了一個開發(fā)人員面對的關(guān)鍵挑戰(zhàn),那就是利用如npm或maven這樣的外部依賴,也能進(jìn)行持久、確定的構(gòu)建。利用Artifactory,開發(fā)人員能夠維護(hù)外部倉庫的本地緩存,從而保證外部代碼的變化在沒有確認(rèn)可用之前不會被引入到構(gòu)建當(dāng)中。而且,保證外部依賴的本地訪問,也能幫助加速構(gòu)建,提升生產(chǎn)力。

利用Artifactory作為Docker鏡像中心,可以使得DevOps流水線中從測試到發(fā)布的各個階段之間升級實不可變的構(gòu)建產(chǎn)出變得更加容易,而不需要每次都重新構(gòu)建。同樣可以根據(jù)需要,利用Artifactory為每次構(gòu)建存儲的詳盡信息,來創(chuàng)建新的確定性的構(gòu)建。

飛機(jī)飛行需要燃料,而航空公司,就像所有現(xiàn)代化企業(yè)一樣,基于數(shù)據(jù)進(jìn)行運維。航空公司對他們的飛機(jī)、客戶和工作人員了解得越多,就越能幫助他們最大限度地提高投資回報率。

?Artifactory作為Kubernetes的Docker鏡像中心,可以提供簡化、安全實施運維工作所需的數(shù)據(jù)。除了容器、鏡像的列表之外,Artifactory還可以可視化地展示容器里都有什么,以及這些內(nèi)容是如何進(jìn)入容器的。

如果再增加利用JFrog Xray對鏡像進(jìn)行掃描,就可以獲得更多有關(guān)鏡像當(dāng)中代碼真實安全性的信息,進(jìn)一步保護(hù)企業(yè)和應(yīng)用。

七、翱翔天空

不僅僅像本文說的,真正的DevOps流水線就像是現(xiàn)代化的航空公司,DevOps已成為大多數(shù)航空公司自身運營的關(guān)鍵實踐。聯(lián)合航空公司、西南航空公司、阿拉斯加航空公司和捷藍(lán)航空公司就是眾多航空公司的代表,它們已經(jīng)為DevOps和CI/CD做了大量的投資,在網(wǎng)絡(luò)和移動平臺上為其客戶提供購票、值機(jī)、登機(jī)等各種服務(wù)。這些航空公司很多都引入了Artifactory,獲得了在全球范圍發(fā)展DevOps的巨大收益。

正如這些高風(fēng)險企業(yè)所展示的,僅僅將Docker容器推上跑道,對于真正的DevOps是不夠的,需要利用Artifactory為CI/CD提供的支持,來確保它們在天空中安全地飛翔。



更多技術(shù)分享請關(guān)注????? JFrog杰蛙在線課堂

1月2日在線課堂:《版本控制管理與最佳實踐》

課堂收益:

1. 如何使用版本控制系統(tǒng)

2. 各種分支模型有什么優(yōu)缺點,什么樣的分支模型更適用于您的環(huán)境

3. 版本控制應(yīng)該遵循的一些標(biāo)準(zhǔn)


報名鏈接:https://www.bagevent.com/event/6309332

抽獎活動:

課堂結(jié)束前五分鐘,進(jìn)行抽獎活動

第一名:小愛音箱

第二名:JFrog杰蛙新版T恤

第三名:JFrog杰蛙新版T恤

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

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

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