軟件工程方法論DevOps給開(kāi)發(fā)者世界帶來(lái)了什么?

軟件開(kāi)發(fā)一直以來(lái)都是一項(xiàng)復(fù)雜的工作,自從有人將其與項(xiàng)目管理相結(jié)合,軟件工程應(yīng)運(yùn)而生。上世紀(jì)七八十年代的軟件危機(jī)讓人們意識(shí)到軟件工程領(lǐng)域的風(fēng)險(xiǎn)與挑戰(zhàn),《人月神話》一書(shū)更是以“沒(méi)有銀彈”的論斷直言沒(méi)有任何一項(xiàng)技術(shù)或方法可使軟件工程的生產(chǎn)力在十年內(nèi)提高十倍。如今時(shí)過(guò)境遷,軟件工程領(lǐng)域的新方法、新工具層出不窮,最初的“銀彈”一說(shuō)早已不再適用,而打破這一瓶頸的當(dāng)下最為業(yè)界關(guān)注的方法論,莫過(guò)于DevOps。
● 什么是DevOps
DevOps是一種重視“軟件開(kāi)發(fā)人員(Dev)”和“運(yùn)維技術(shù)人員(Ops)”之間溝通合作的文化、運(yùn)動(dòng)或慣例,是軟件開(kāi)發(fā)領(lǐng)域最近十年來(lái)興起且當(dāng)下普遍成熟運(yùn)用的方法論。它和傳統(tǒng)的瀑布模型、螺旋模型等理念不同,其核心是“敏捷”,結(jié)果是自動(dòng)化。DevOps是敏捷開(kāi)發(fā)的延伸,通過(guò)“軟件交付”和“架構(gòu)變更”的流程自動(dòng)化,使構(gòu)建、測(cè)試、發(fā)布軟件能夠更快捷、頻繁并且可靠。
傳統(tǒng)的軟件開(kāi)發(fā)組織結(jié)構(gòu)中開(kāi)發(fā)、運(yùn)維和質(zhì)量保障部門之間相互獨(dú)立、各司其職。隨著需求膨脹和響應(yīng)迭代頻率的加劇,行業(yè)對(duì)敏捷開(kāi)發(fā)的要求更高,不僅交付快捷頻繁,而且質(zhì)量可靠,這對(duì)傳統(tǒng)的組織結(jié)構(gòu)變革提出了要求。DevOps在流程重塑上為部門間溝通與協(xié)作架起了橋梁,圍繞敏捷開(kāi)發(fā)應(yīng)對(duì)現(xiàn)實(shí)需求實(shí)現(xiàn)軟件成品的持續(xù)集成、持續(xù)交付和持續(xù)部署,這也就是CI/CD管道,構(gòu)成了DevOps的主干。

● DevOps的起源與發(fā)展歷程
業(yè)界一般認(rèn)為DevOps之父是來(lái)自比利時(shí)的帕特里克?德布瓦。2007年,對(duì)IT組織結(jié)構(gòu)頗有興趣的帕特里克在從事大型數(shù)據(jù)中心遷移工作中意識(shí)到,開(kāi)發(fā)團(tuán)隊(duì)和運(yùn)維團(tuán)隊(duì)之間的信息鴻溝和組織沖突往往造成IT項(xiàng)目的結(jié)果令人沮喪,作為一名敏捷開(kāi)發(fā)的簇?fù)碚?,他此后為改變這種狀況而努力。
2008年6月,舊金山第一屆Velocity大會(huì)的交流中誕生了一個(gè)名為The Agile Admin的博客。同年8月多倫多敏捷大會(huì)上帕特里克與另一名敏捷開(kāi)發(fā)者安德魯?謝弗進(jìn)行了漫長(zhǎng)的討論,DevOps萌芽開(kāi)始生發(fā)。
2009年6月圣荷西第二屆Velocity大會(huì)是一個(gè)重要轉(zhuǎn)折點(diǎn),會(huì)上一個(gè)名為“10+ Deploys Per Day: Dev and Ops Cooperation at Flickr”的演講引起了帕特里克的共鳴,使之下定決心在自己老家比利時(shí)舉辦一個(gè)類似Velocity的大會(huì)。同年10月帕特里克在比利時(shí)根特舉辦“社區(qū)版Velocity大會(huì)”DevOpsDays,來(lái)自世界各地的敏捷開(kāi)發(fā)者、運(yùn)維工程師、IT愛(ài)好者蜂擁而至,大會(huì)出乎意料地成功,DevOps這個(gè)名詞也正式誕生。
2010年The Agile Admin博客發(fā)表“What is DevOps”一文詳細(xì)定義了DevOps的概念與體系,越來(lái)越多的IT從業(yè)者認(rèn)識(shí)到DevOps的理念和意義。同年在德國(guó)漢堡第二屆DevOpsDays大會(huì)上,后來(lái)《持續(xù)交付》一書(shū)的作者杰茲?漢布爾發(fā)表了關(guān)于“持續(xù)交付”的重要演講。由于持續(xù)交付(CD)是持續(xù)集成(CI)的延伸,這與2008年敏捷大會(huì)的觀點(diǎn)一致,因而CI/CD成為了DevOps的核心理念之一,而非另成一系。此后,發(fā)展成型的DevOps作為一個(gè)軟件工程領(lǐng)域新的方法論逐漸被行業(yè)所運(yùn)用,軟件開(kāi)發(fā)敏捷與質(zhì)量齊頭并進(jìn)的時(shí)代加速到來(lái)了。

● DevOps給開(kāi)發(fā)者世界帶來(lái)了什么
現(xiàn)在的軟件和軟件工程領(lǐng)域,早已遠(yuǎn)離了刀耕火種的年代,擺在我們面前的是模塊化的高級(jí)編程語(yǔ)言、高度集成的環(huán)境,各種庫(kù)、各種框架,彈性計(jì)算帶來(lái)的流水線和自動(dòng)化工具,我們正處在一個(gè)“敏捷”的時(shí)代。
DevOps是這個(gè)時(shí)代的方法論產(chǎn)物,有了這個(gè)理念,開(kāi)發(fā)者世界在之后的十年里誕生了一批質(zhì)量?jī)?yōu)秀且普遍適用的生產(chǎn)力工具和成熟的解決方案,Docker、Kubernetes就是其中的典型案例。
Docker是虛擬化技術(shù)發(fā)展到一定階段衍伸出的容器技術(shù)。作為一款開(kāi)源的應(yīng)用容器引擎,Docker在操作系統(tǒng)層實(shí)現(xiàn)虛擬化,比虛擬機(jī)(硬件虛擬化)更具便捷性和高效性。加之容器多用于軟件應(yīng)用部署的標(biāo)準(zhǔn)化單元,可以不受硬件基礎(chǔ)設(shè)施和操作系統(tǒng)的局限,方便地部署到不同空間,因此它是DevOps自動(dòng)化部署絕佳的實(shí)現(xiàn)工具。
Kubernetes簡(jiǎn)稱k8s,提供了一個(gè)綜合的基于容器構(gòu)建分布式系統(tǒng)的基礎(chǔ)架構(gòu)環(huán)境,簡(jiǎn)單說(shuō),它是一個(gè)開(kāi)源的容器編排引擎。當(dāng)Docker還在茁壯成長(zhǎng)的時(shí)候,k8s迅速出世,為生產(chǎn)級(jí)大規(guī)模容器化支起了標(biāo)準(zhǔn)。如果說(shuō)Docker是集裝箱的話,k8s則是自動(dòng)化的碼頭。在k8s中可以創(chuàng)建多個(gè)容器,每個(gè)容器里運(yùn)行一個(gè)應(yīng)用實(shí)例,通過(guò)內(nèi)置負(fù)載均衡對(duì)規(guī)?;瘜?shí)例訪問(wèn)、管理,實(shí)現(xiàn)了從容器到容器云的飛躍。
DevOps所孕育的產(chǎn)物遠(yuǎn)不止此,除了容器化技術(shù)之外,還有測(cè)試、包管理、評(píng)估與分析工具等,全鏈整合開(kāi)發(fā)與運(yùn)維全職能,貫穿了CI/CD全過(guò)程,持續(xù)拉升著軟件工程行業(yè)的敏捷與自動(dòng)化能力水平。DevOps的時(shí)代同時(shí)也是云的時(shí)代,是分布式算力的時(shí)代。DevOps和云是相輔相成的,沒(méi)有云的彈性和按需分配,DevOps的理念就很難落地;DevOps的發(fā)展則加速了云技術(shù)的演化和豐富。
需求仍在持續(xù)膨脹的今天,DevOps以及與之伴生的生產(chǎn)力工具,無(wú)疑在軟件工程領(lǐng)域開(kāi)辟了高度自動(dòng)化的先河,這是好的一面;流水線的環(huán)境帶來(lái)了效率,但也讓許多開(kāi)發(fā)者變成了大機(jī)器的零部件,疲于滿足需求而減少顧及創(chuàng)新,這種趨向值得業(yè)界警覺(jué)。畢竟,高度文明變成空中樓閣,是技術(shù)進(jìn)程所不愿經(jīng)過(guò)之地。
文/陳徐毅 高級(jí)工程師,科技專欄作者,中國(guó)計(jì)算機(jī)學(xué)會(huì)會(huì)員
本文刊發(fā)于《創(chuàng)意世界》2022年第5期