- DevOps 精要:業(yè)務(wù)視角
- (俄)奧列格·斯克倫尼科
- 4357字
- 2020-06-10 15:23:14
1.1 起源
一般認(rèn)為,DevOps的出現(xiàn)源于兩個(gè)因素:敏捷軟件方法的廣泛采用以及IT基礎(chǔ)設(shè)施即程序代碼的管理方式。我們分別來(lái)看一看。
1.1.1 敏捷軟件開(kāi)發(fā)方法
在20世紀(jì)末期,主流的軟件開(kāi)發(fā)方法是圖1.3所示的所謂“瀑布模型”:順序式執(zhí)行預(yù)定義的階段,每個(gè)階段花很長(zhǎng)時(shí)間,并以達(dá)成先前協(xié)商好的結(jié)果作為結(jié)束;很多時(shí)候,只有在前一個(gè)階段已經(jīng)完整且正式完工時(shí),才能轉(zhuǎn)移到下一個(gè)階段。這個(gè)模型的另一個(gè)顯著特征是,每個(gè)階段所涉及的人員職能有專(zhuān)業(yè)化的分工:分析師、架構(gòu)師、開(kāi)發(fā)人員和測(cè)試人員等。
當(dāng)開(kāi)發(fā)的是功能可預(yù)先定義、對(duì)快速產(chǎn)品交付沒(méi)有或很少有要求的大型信息系統(tǒng)時(shí),這個(gè)模型能夠確保我們創(chuàng)建高質(zhì)量產(chǎn)品并進(jìn)行有效與精細(xì)的成本控制。
然而,在20世紀(jì)90年代末期,隨著互聯(lián)網(wǎng)技術(shù)與Web編程的快速發(fā)展,瀑布模型的消極作用開(kāi)始顯現(xiàn),影響到信息系統(tǒng)客戶(hù)(內(nèi)部或外部業(yè)務(wù))與提供者(內(nèi)部或外部軟件開(kāi)發(fā)者)之間的交互和理解。事實(shí)上,對(duì)業(yè)務(wù)客戶(hù)的市場(chǎng)機(jī)會(huì)不斷涌現(xiàn),這要求團(tuán)隊(duì)能夠快速發(fā)布(最多在幾個(gè)月之內(nèi))新產(chǎn)品到市場(chǎng)上。然而,從項(xiàng)目啟動(dòng)到第一個(gè)可運(yùn)行原型的典型開(kāi)發(fā)閉環(huán),可能要花6到18個(gè)月時(shí)間;而在大型企業(yè)中,甚至需要2到3年。此外,隨著很多在之前并不為人知曉但有潛在前景的市場(chǎng)機(jī)會(huì)涌現(xiàn),客戶(hù)的需求在開(kāi)發(fā)過(guò)程中很可能會(huì)發(fā)生變化,這樣一來(lái),要有效應(yīng)對(duì)市場(chǎng)機(jī)會(huì)而不延誤截止日期,且同時(shí)還不降低產(chǎn)品質(zhì)量,就變得極為困難,如圖1.4所示。

圖1.3 瀑布軟件開(kāi)發(fā)模型示例

圖1.4 經(jīng)典項(xiàng)目管理約束金字塔
因此,這就造成了客戶(hù)與提供者之間的緊張關(guān)系,這種緊張關(guān)系存在于核心業(yè)務(wù)與軟件開(kāi)發(fā)者之間。創(chuàng)新性的開(kāi)發(fā)方法是應(yīng)對(duì)這個(gè)挑戰(zhàn)的答案。Ken Schwaber(肯·施瓦伯)出版了幾本關(guān)于Scrum的書(shū)。Kent Beck(肯特·貝克)出版了《極限編程》
。不過(guò),這些新想法的應(yīng)用效果差強(qiáng)人意,主要因?yàn)樗魂P(guān)注于軟件開(kāi)發(fā)周期的其中一個(gè)階段——即實(shí)際開(kāi)發(fā)階段,而所遇到的問(wèn)題往往涉及更大的范圍。端到端的軟件開(kāi)發(fā)周期需要簡(jiǎn)化和加速。
2001年,Schwaber(施瓦伯)、Beck(貝克)與其他15位專(zhuān)家聯(lián)合發(fā)起一場(chǎng)聚會(huì),共同討論當(dāng)前的問(wèn)題并嘗試找出解決方案。這次聚會(huì)的成果就是著名的《敏捷宣言》,用以彌補(bǔ)業(yè)務(wù)與軟件開(kāi)發(fā)之間的空白。敏捷宣言的其中一位作者羅伯特·馬丁(Robert C. Martin)如此解釋道:
“當(dāng)使用正確的準(zhǔn)則及正確的最簡(jiǎn)過(guò)程的時(shí)候,開(kāi)發(fā)者與業(yè)務(wù)方之間的信任就能自然浮現(xiàn)并發(fā)展起來(lái)。業(yè)務(wù)方會(huì)開(kāi)始信任開(kāi)發(fā)者,而不再認(rèn)為他/她們是慵懶、討厭的生物,開(kāi)發(fā)者也會(huì)開(kāi)始關(guān)注業(yè)務(wù),并意識(shí)到他/她們是理性與理智的人,而不是從其他星球來(lái)的物種。”
敏捷宣言
我們一直在實(shí)踐中探尋更好的軟件開(kāi)發(fā)方法,在身體力行的同時(shí)也幫助他人。
由此,我們建立了如下價(jià)值觀:
個(gè)體和交互 優(yōu)先于 流程和工具
可工作的軟件 優(yōu)先于 面面俱到的文檔
客戶(hù)協(xié)作 優(yōu)先于 合同談判
響應(yīng)變化 優(yōu)先于 遵循計(jì)劃
也就是說(shuō),盡管右項(xiàng)有其價(jià)值,我們更重視左項(xiàng)的價(jià)值。
我們遵循以下原則。
1.我們最重要的目標(biāo),是通過(guò)持續(xù)不斷地及早交付有價(jià)值的軟件使客戶(hù)滿(mǎn)意。
2.欣然面對(duì)需求變化,即使在開(kāi)發(fā)后期也一樣。為了客戶(hù)的競(jìng)爭(zhēng)優(yōu)勢(shì),敏捷過(guò)程掌控變化
3.經(jīng)常地交付可工作的軟件,相隔幾星期或一兩個(gè)月,傾向于采取較短的周期。
4.業(yè)務(wù)人員和開(kāi)發(fā)人員必須相互合作,項(xiàng)目中的每一天都不例外。
5.激發(fā)個(gè)體的斗志,以他們?yōu)楹诵拇罱?xiàng)目。提供所需的環(huán)境和支援,輔以信任,從而達(dá)成目標(biāo)。
6.不論團(tuán)隊(duì)內(nèi)外,傳遞信息效果最好效率也最高的方式是面對(duì)面的交流。
7.可工作的軟件是進(jìn)度的首要度量。
8.敏捷過(guò)程倡導(dǎo)可持續(xù)開(kāi)發(fā)。責(zé)任人、開(kāi)發(fā)人員和用戶(hù)要能夠共同維持其步調(diào)穩(wěn)定延續(xù)。
9.堅(jiān)持不懈地追求技術(shù)卓越和良好設(shè)計(jì),敏捷能力由此增強(qiáng)。
10.以簡(jiǎn)潔為本,它是極力減少不必要工作量的藝術(shù)。
11.最好的架構(gòu)、需求和設(shè)計(jì)出自自組織團(tuán)隊(duì)。
12.團(tuán)隊(duì)定期地反思如何能提高成效,并依次調(diào)整自身的舉止表現(xiàn)。
隨后,編程人員和項(xiàng)目管理者社區(qū)發(fā)展并采納了敏捷方法,極大地加速與重構(gòu)了軟件開(kāi)發(fā)。
敏捷開(kāi)發(fā)的關(guān)鍵元素有客戶(hù)與開(kāi)發(fā)者之間更緊密的交互、批量大小的降低、以短間隔(周期)交付的產(chǎn)品以及團(tuán)隊(duì)的有限規(guī)模。
使用敏捷方法,軟件開(kāi)發(fā)團(tuán)隊(duì)每隔2到4周發(fā)布一個(gè)新的可行產(chǎn)品。最終用戶(hù)可以更近距離地參與到開(kāi)發(fā)過(guò)程當(dāng)中,確保快速的反饋,并由此激發(fā)更快速的變更。
但是在許多公司,棄用瀑布模型轉(zhuǎn)向敏捷開(kāi)發(fā)的實(shí)際效果卻小于預(yù)期。從這些公司中觀察到的敏捷收益缺失,通常與瀑布的優(yōu)勢(shì)或者敏捷的劣勢(shì)無(wú)關(guān)。事實(shí)上,問(wèn)題的根源在于代碼開(kāi)發(fā)僅僅是一個(gè)很長(zhǎng)的價(jià)值鏈中間的一環(huán)。
實(shí)際上,在開(kāi)發(fā)之前還有不少的環(huán)節(jié),比如致力于識(shí)別業(yè)務(wù)需求并對(duì)這些需求進(jìn)行闡釋、分析和排序等。
此外,在開(kāi)發(fā)之后應(yīng)用需要快速部署到生產(chǎn)環(huán)境,以便客戶(hù)能收到向自己承諾的所有收益,并提供反饋給開(kāi)發(fā)人員。然而,對(duì)于成立于2010年之前的IT組織,IT基礎(chǔ)設(shè)施幾乎都是基于多年前采購(gòu)的剛性、昂貴的硬件,它們獲取IT預(yù)算很難,新采購(gòu)的預(yù)算流程也相當(dāng)長(zhǎng)。
還有,在大量的組織中,基礎(chǔ)設(shè)施處在相當(dāng)脆弱的狀態(tài)中。造成這種脆弱性的一個(gè)因素,是IT解決方案極其復(fù)雜,在基礎(chǔ)設(shè)施中可能有成千上萬(wàn)個(gè)相互連接的組件。另一個(gè)因素可能是缺乏IT系統(tǒng)文檔以及這些文檔的迅速過(guò)時(shí),人員的流失又持續(xù)加劇了知識(shí)的遺失。
在許多組織中,觸碰IT基礎(chǔ)設(shè)施是相當(dāng)不安全的。變更對(duì)IT運(yùn)維部門(mén)來(lái)說(shuō),是一個(gè)最大的“夢(mèng)魘”,而不斷到來(lái)的變更“洪流”,真的可能招致災(zāi)難性的后果。
這樣一來(lái),就降低了使用敏捷方法可能獲得的積極收益,先進(jìn)的軟件開(kāi)發(fā)方法由于IT運(yùn)維側(cè)的阻礙而停滯不前。
為了處理IT基礎(chǔ)設(shè)施的脆弱性,有些組織使用規(guī)范化與自動(dòng)化的變更管理流程,以規(guī)范變更流以及最小化與變更實(shí)施相關(guān)聯(lián)的風(fēng)險(xiǎn)。
1.1.2 管理基礎(chǔ)設(shè)施即代碼
在基礎(chǔ)設(shè)施即代碼的管理方式涌現(xiàn)之前,有兩種技術(shù)已經(jīng)發(fā)展起來(lái):虛擬化和云計(jì)算。
軟件和硬件環(huán)境虛擬化的歷史始于很久以前,可以追溯到1964年IBM CP-40操作系統(tǒng)的發(fā)展。經(jīng)過(guò)多年的持續(xù)發(fā)展,虛擬化技術(shù)取得了可觀的進(jìn)步。大型機(jī)上的首個(gè)可商業(yè)化應(yīng)用的系統(tǒng)出現(xiàn)在20世紀(jì)70年代,那些基于Intel x86架構(gòu)的更通用的機(jī)器所用的系統(tǒng),出現(xiàn)在20世紀(jì)80年代
。圖1.5顯示了從1964年到2008年與虛擬化有關(guān)的關(guān)鍵事件數(shù)量,如果我們能看得更遠(yuǎn),這個(gè)圖上的數(shù)據(jù)在近年來(lái)并沒(méi)有停歇。

圖1.5 關(guān)鍵虛擬化事件的時(shí)間分布
虛擬化不僅使更有效地使用昂貴而強(qiáng)大的硬件成為可能,還在提供有用功能的可執(zhí)行代碼與背后的系統(tǒng)軟件之間引入了一個(gè)額外的抽象層。這在分離“應(yīng)用工程師”和“系統(tǒng)工程師”的能力與職責(zé)的方向上邁出了重要的一步,也為這些概念建立了更廣泛的認(rèn)知。
云計(jì)算技術(shù)的發(fā)展更快。到了20世紀(jì)90年代中期,電信公司給它們的客戶(hù)提供了廣域網(wǎng)(WAN)服務(wù),通過(guò)直接布線將每個(gè)客戶(hù)的相關(guān)端點(diǎn)連接起來(lái)。但是,隨著專(zhuān)用虛擬網(wǎng)絡(luò)技術(shù)(VPN,虛擬專(zhuān)用網(wǎng))的涌現(xiàn),通過(guò)同一個(gè)數(shù)據(jù)傳輸信道來(lái)發(fā)送不同客戶(hù)的數(shù)據(jù)包,并提供必要層級(jí)的安全性、私密性與服務(wù)質(zhì)量,都成為可能。在那個(gè)時(shí)候,云服務(wù)供應(yīng)商開(kāi)始使用云的符號(hào)來(lái)標(biāo)識(shí)客戶(hù)專(zhuān)用網(wǎng)絡(luò)和共享網(wǎng)絡(luò)之間的邊界及各自職責(zé)的分離。
有了長(zhǎng)距離傳輸數(shù)據(jù)的新能力,客戶(hù)開(kāi)始使用這種技術(shù),不僅是在遠(yuǎn)程系統(tǒng)之間交換信息,也可以在多個(gè)網(wǎng)絡(luò)結(jié)點(diǎn)之間分布計(jì)算負(fù)載。隨后,讓這個(gè)交互過(guò)程變得簡(jiǎn)單與廉價(jià)的技術(shù)也出現(xiàn)了。小型的去服務(wù)供應(yīng)商邁出了最初的步伐,但真正重大的變化出現(xiàn)在2006年,在這一年亞馬遜推出了ECC(可伸縮的計(jì)算云)。很快,在2008年,微軟發(fā)布了它的服務(wù)Azure,谷歌也推出了Google App Engine,之后升級(jí)為Google Cloud Platform。當(dāng)然,這些并不是出租云計(jì)算能力僅有的例子,但它們最有影響力。
虛擬化與云技術(shù)已經(jīng)顯著改變了計(jì)算領(lǐng)域的格局。商業(yè)提供者提供的資源已經(jīng)成為負(fù)擔(dān)得起且可靠的選擇,同時(shí)也保證了必要級(jí)別的安全性。客戶(hù)對(duì)云的態(tài)度及應(yīng)用,也從“有人正在某個(gè)地方控制著我的硬件”,轉(zhuǎn)變?yōu)椤拔疫h(yuǎn)程管理著我的基礎(chǔ)設(shè)施”。
美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)協(xié)會(huì)識(shí)別了云計(jì)算的5個(gè)本質(zhì)特征。
1.按需自服務(wù)。消費(fèi)者可以視需要單方面配置計(jì)算能力,如服務(wù)器時(shí)間和網(wǎng)絡(luò)存儲(chǔ),這通過(guò)自動(dòng)化的方式實(shí)現(xiàn),無(wú)需與各個(gè)服務(wù)供應(yīng)商進(jìn)行人工的交互。
2.寬泛的網(wǎng)絡(luò)接入。通過(guò)網(wǎng)絡(luò)提供能力,并通過(guò)可促進(jìn)異構(gòu)廋/胖客戶(hù)平臺(tái)使用的標(biāo)準(zhǔn)機(jī)制來(lái)接入。
3.資源的池化。供應(yīng)商的計(jì)算資源被池化,使用多租戶(hù)模式服務(wù)于多個(gè)客戶(hù),基于客戶(hù)需求來(lái)動(dòng)態(tài)分配或重分配不同的物理或虛擬資源。
4.快速的伸縮性。能力可以被可伸縮地配置和釋放,有些情況下可自動(dòng)進(jìn)行,以快速匹配需求而向外或向內(nèi)擴(kuò)展。對(duì)消費(fèi)者而言,可配置的能力通常看起來(lái)是無(wú)限的,并且可以在任何時(shí)間以任何數(shù)量進(jìn)行分配。
5.可度量的服務(wù)。云系統(tǒng)利用適合相應(yīng)服務(wù)類(lèi)型的某種抽象度的度量功能,自動(dòng)控制及優(yōu)化資源使用。
遠(yuǎn)程管理基礎(chǔ)設(shè)施意味著什么?讓我們回憶UNIX系統(tǒng)的關(guān)鍵范式之一:系統(tǒng)所有必要的動(dòng)作,都應(yīng)該能夠通過(guò)命令行(所以使用腳本)來(lái)訪問(wèn)。圖形化的用戶(hù)界面很美,但它不是必需的。
現(xiàn)在,我們結(jié)合虛擬的云技術(shù)和命令行界面來(lái)處理所有任務(wù)。結(jié)果是,IT專(zhuān)業(yè)人士能夠使用文本命令創(chuàng)建其所需要的IT基礎(chǔ)設(shè)施組件,包括服務(wù)器、存儲(chǔ)系統(tǒng)、網(wǎng)絡(luò)組件以及它們之間的所有接口、設(shè)置和配置。自動(dòng)化程度得以大幅提升,因而變更實(shí)施的速度也大幅提升。之前,基于內(nèi)部硬件來(lái)部署一個(gè)IT基礎(chǔ)設(shè)施,需要以下流程。
● 申請(qǐng)與審批預(yù)算(幾周或幾個(gè)月)。
● 等待下一個(gè)采購(gòu)周期(幾個(gè)月)。
● 給供應(yīng)商下訂單及支付(幾天)。
● 等待交付(幾周或幾個(gè)月)。
● 接收、安裝、配置及準(zhǔn)備使用(幾天或幾周)。
今天,創(chuàng)建類(lèi)似的IT基礎(chǔ)設(shè)施,可能只需要走兩個(gè)流程:
● 運(yùn)行一個(gè)腳本,等它執(zhí)行完畢(幾分鐘,很少會(huì)是幾小時(shí));
● 在月末與云提供商結(jié)賬。
也就是說(shuō),只需要程序代碼,就可以創(chuàng)建出所需的基礎(chǔ)設(shè)施。不光只是創(chuàng)建,還可以把基礎(chǔ)設(shè)施視同代碼進(jìn)行管理:進(jìn)行版本控制、變更追蹤、調(diào)試、重用之前版本等。在第3章中,我們會(huì)再次展開(kāi)討論。
結(jié)束這部分之前,我們也承認(rèn),有些相對(duì)老舊的技術(shù)已經(jīng)獲得了第二次生命。例如,操作系統(tǒng)層面的虛擬化,在20世紀(jì)80年代的許多UNIX系統(tǒng)上就已經(jīng)做到了。然而嚴(yán)格來(lái)說(shuō),這項(xiàng)技術(shù)的商業(yè)化成功,即通常被稱(chēng)為容器化的技術(shù),到21世紀(jì)前10年的后半段才出現(xiàn),這與前面描述的事件相吻合。當(dāng)初的chroot機(jī)制在功能和能力上頗受制約,而如今在容器之間隔離文件系統(tǒng)、分配磁盤(pán)空間、限制可用RAM/處理器時(shí)間或I/O帶寬等,都已然成為可能。
1.1.3 這是必然的
“有人說(shuō)這是必然的,當(dāng)你聽(tīng)到有人這樣說(shuō)時(shí),很可能有大批企業(yè)正在為實(shí)現(xiàn)它而努力。”
——理查德·斯托曼(Richard Stallman),2008年云計(jì)算大會(huì)
通過(guò)對(duì)DevOps起源的回溯,我們可以得出以下的結(jié)論。
首先,由于與業(yè)務(wù)客戶(hù)交互的新方式的涌現(xiàn)以及敏捷開(kāi)發(fā)技術(shù)的充分應(yīng)用,對(duì)新的IT管理方法的需求變得愈加迫切。
其次,隨著新的基礎(chǔ)設(shè)施管理技術(shù)的涌現(xiàn),用不一樣的方式來(lái)組織IT工作,也成為了可能。
用現(xiàn)實(shí)的視角來(lái)看待前面理查德·斯托曼(R. Stallman)的話(雖然看起來(lái)他對(duì)云計(jì)算似乎有些誤解),我們可以斷定,遲早會(huì)出現(xiàn)某種類(lèi)似DevOps的東西。
- Java面向?qū)ο笏枷肱c程序設(shè)計(jì)
- Java完全自學(xué)教程
- JIRA 7 Administration Cookbook(Second Edition)
- Instant QlikView 11 Application Development
- Learning Firefox OS Application Development
- Visual Basic程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)(第二版)
- Visual Basic程序設(shè)計(jì)
- PHP編程基礎(chǔ)與實(shí)踐教程
- Test-Driven JavaScript Development
- Geospatial Development By Example with Python
- Python機(jī)器學(xué)習(xí)算法與應(yīng)用
- Python語(yǔ)言科研繪圖與學(xué)術(shù)圖表繪制從入門(mén)到精通
- 多模態(tài)數(shù)據(jù)分析:AGI時(shí)代的數(shù)據(jù)分析方法與實(shí)踐
- Python Machine Learning Cookbook
- MySQL數(shù)據(jù)庫(kù)應(yīng)用實(shí)戰(zhàn)教程(慕課版)