前言
在#DevOps的前世今生# 1. DevOps編年史一文中,通過(guò)追溯 DevOps 活動(dòng)產(chǎn)生的歷史起源,我們發(fā)現(xiàn)了 DevOps 是敏捷思想從軟件開(kāi)發(fā)端(Dev)到系統(tǒng)維護(hù)端(Ops)的延伸。無(wú)論是 DevOpsDays 的創(chuàng)始人 Patrick Debois,還是同時(shí)期的 The Agile Admin。都想通過(guò)敏捷來(lái)改進(jìn)傳統(tǒng)的系統(tǒng)維護(hù)工作以及軟件開(kāi)發(fā)部門(mén)和系統(tǒng)維護(hù)部門(mén)的合作關(guān)系。但是,DevOps 的矛盾從何而來(lái)?這還要從 Dev 和 Ops 的起源開(kāi)始講起。
上古時(shí)代——抱著計(jì)算機(jī)使用手冊(cè),自開(kāi)發(fā)自運(yùn)維
歷史要追溯到剛剛出現(xiàn)計(jì)算機(jī)的時(shí)期。當(dāng)時(shí),軟件開(kāi)發(fā)還是少數(shù)人通過(guò)高學(xué)歷才能夠掌握的技能,那個(gè)時(shí)候只有“程序”(Program),但沒(méi)有“軟件”(Software),所以那個(gè)時(shí)候編寫(xiě)程序的人員被稱(chēng)為“程序員”(Programmer)?;镜膶W(xué)習(xí)材料還只是計(jì)算機(jī)設(shè)備廠商附送的使用手冊(cè)。所以,只能先購(gòu)買(mǎi)設(shè)備,再自己培養(yǎng)人才。

最先購(gòu)買(mǎi)計(jì)算機(jī)的是科研單位,軍隊(duì),政府以及少數(shù)大型企業(yè)。同時(shí)組建了新的部門(mén),成立了信息技術(shù)部(IT Department),或者叫信息化辦公室(IT Office)。在中國(guó)的有些單位里干脆直接叫“電腦部”。他們一個(gè)科室,一個(gè)辦公室主任,外加兩三個(gè)科級(jí)干部和幾個(gè)科員,專(zhuān)門(mén)管理這些電腦的使用情況,并且學(xué)習(xí)軟件編程技術(shù),用程序來(lái)解決其它各部門(mén)的。
這是最初的IT運(yùn)維雛形,在這個(gè)時(shí)期是沒(méi)有 Dev 和 Ops 之分的,他們統(tǒng)稱(chēng)為 Programmer。由于開(kāi)發(fā)和運(yùn)維都由同樣的人包攬,自己維護(hù)自己開(kāi)發(fā)的程序,也可以被看做是原始的 DevOps。這個(gè)時(shí)期的計(jì)算機(jī)系統(tǒng)和問(wèn)題較簡(jiǎn)單,開(kāi)發(fā)和維護(hù)并不復(fù)雜,無(wú)需進(jìn)行專(zhuān)業(yè)區(qū)分。
桌面通用軟件時(shí)代——軟件成為了一門(mén)生意,出現(xiàn)了專(zhuān)業(yè)的軟件開(kāi)發(fā)工程師(Dev)。
隨著計(jì)算機(jī)的成本不斷下降,尤其是以IBM PC為代表微型計(jì)算機(jī)( MicroComputer )開(kāi)始普及。企業(yè)也開(kāi)始大規(guī)模使用計(jì)算機(jī)進(jìn)行辦公。由于軟件開(kāi)發(fā)人員數(shù)量仍然很少,加之需求很旺盛,專(zhuān)業(yè)的軟件開(kāi)發(fā)人員成本依然高昂。
最開(kāi)始的時(shí)候,軟件僅僅通過(guò)磁盤(pán)拷貝進(jìn)行流傳,某些介紹計(jì)算機(jī)或者軟件的雜志開(kāi)了先河。程序員通過(guò)磁盤(pán)向雜志社投稿,雜志社通過(guò)變賣(mài)雜志和軟件獲利。由于軟件的邊際生產(chǎn)成本幾乎是0,所以漸漸有人把銷(xiāo)售軟件變成了一門(mén)生意。隨著軟件的擴(kuò)展,當(dāng)初為個(gè)人目的(Personal Purpose)所編寫(xiě)的軟件漸漸的開(kāi)始走通用化的路線(xiàn),慢慢形成了軟件產(chǎn)品。接著有了專(zhuān)門(mén)從事軟件開(kāi)發(fā)的公司,并逐漸成為一個(gè)產(chǎn)業(yè)。并且有了軟件開(kāi)發(fā)工程師(Developer,簡(jiǎn)稱(chēng)Dev)這個(gè)職業(yè)。

在這個(gè)時(shí)期,開(kāi)發(fā)軟件仍然是很專(zhuān)業(yè)的事情,企業(yè)的IT部門(mén)要想開(kāi)發(fā)軟件的代價(jià)十分高昂。因此,大部分單位,組織和企業(yè)通過(guò)購(gòu)買(mǎi)的形式獲得軟件。IT部門(mén)逐漸成為了負(fù)責(zé)信息化采購(gòu)以及軟硬件基本操作培訓(xùn)的部門(mén)。此外,由于信息化發(fā)展加速,各行各業(yè)軟件層出不窮,加之軟件企業(yè)越來(lái)越多,IT部門(mén)不得不通過(guò)更廣泛的學(xué)習(xí)了解技術(shù)的變化。
企業(yè)級(jí)定制化軟件時(shí)代——企業(yè)級(jí)應(yīng)用的快速發(fā)展,出現(xiàn)了專(zhuān)業(yè)的系統(tǒng)維護(hù)工程師(Ops)。
隨之帶來(lái)的問(wèn)題是:無(wú)論企業(yè)買(mǎi)來(lái)多少軟件,企業(yè)的信息化需要仍然無(wú)法被滿(mǎn)足。一臺(tái)臺(tái)電腦成為了企業(yè)的信息孤島,解決了信息的分析和存儲(chǔ)問(wèn)題最多實(shí)現(xiàn)了無(wú)紙化辦公。沒(méi)有讓部門(mén)間的信息有效的流動(dòng)起來(lái)。大型企業(yè)最先發(fā)現(xiàn)這些問(wèn)題并且給出了最初的解決方案,使得企業(yè)級(jí)軟件開(kāi)發(fā)和系統(tǒng)集成(System Integration)慢慢成為了一個(gè)熱門(mén)的領(lǐng)域。
企業(yè)級(jí)軟件系統(tǒng)最大的特點(diǎn)是通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)解決了企業(yè)內(nèi)部的信息孤島。但這樣的系統(tǒng)無(wú)法在PC上運(yùn)行需要專(zhuān)業(yè)的工作站,服務(wù)器以及網(wǎng)絡(luò)設(shè)備。而這些設(shè)備的管理就理所當(dāng)然的成為了企業(yè)IT部門(mén)的職責(zé)。

隨著軟硬件技術(shù)的發(fā)展,特別企業(yè)級(jí)應(yīng)用開(kāi)發(fā)的經(jīng)驗(yàn)不斷積累,設(shè)備的采購(gòu)成本和軟件的開(kāi)發(fā)成本進(jìn)一步降低。大型IT廠商開(kāi)始瞄準(zhǔn)企業(yè)級(jí)應(yīng)用市場(chǎng),尤其是IBM,Oracle和EMC推出了相應(yīng)的產(chǎn)品。使得軟件定制開(kāi)發(fā)的成本不斷下降。加之隨著開(kāi)發(fā)人員越來(lái)越多,開(kāi)發(fā)成本逐漸降低,于是出現(xiàn)了企業(yè)定制化軟件開(kāi)發(fā),出現(xiàn)了MIS和ERP這樣的應(yīng)用以及J2EE這樣的企業(yè)級(jí)軟件開(kāi)發(fā)框架。
在這個(gè)過(guò)程中,IT運(yùn)維的概念逐漸產(chǎn)生,維基百科上是這樣定義IT運(yùn)維(IT Operations)的:
IT Operations is responsible for the smooth functioning of the infrastructure and operational environments that support application deployment to internal and external customers, including the network infrastructure; server and device management; computer operations; IT infrastructure library (ITIL) management; and help desk services for an organization.
翻譯成中文就是:
IT運(yùn)維的責(zé)任是要為內(nèi)部和外部客戶(hù)的應(yīng)用部署提供平滑的基礎(chǔ)設(shè)施和操作環(huán)境,包括網(wǎng)絡(luò)基礎(chǔ)設(shè)施,服務(wù)器和設(shè)備管理,計(jì)算機(jī)操作,ITIL管理,甚至作為組織的IT幫助中心。
對(duì)于企業(yè)的IT部門(mén)來(lái)說(shuō),工作就不僅僅是維護(hù)計(jì)算機(jī)和網(wǎng)絡(luò)這些設(shè)備了。還要包括運(yùn)行在上面的軟件系統(tǒng),尤其是定制化的企業(yè)級(jí)軟件產(chǎn)品。因此在定制化企業(yè)級(jí)軟件交付從乙方交付給甲方的時(shí)候就需要一系列的技術(shù)審查以確保質(zhì)量,這就使得原本不需要關(guān)心軟件是如何開(kāi)發(fā)的企業(yè)IT部門(mén)提出了更高的要求。他們必須提升專(zhuān)業(yè)水準(zhǔn)以應(yīng)對(duì)這樣的變化。同時(shí)需要重新思考整個(gè)IT部門(mén)的服務(wù)管理和設(shè)計(jì)。隨著IT部門(mén)知識(shí)和服務(wù)專(zhuān)業(yè)度的提升,促生出了了ITIL(Information Technology Infrastructure Library,信息技術(shù)基礎(chǔ)設(shè)施庫(kù))這樣的最佳實(shí)踐庫(kù),也使“系統(tǒng)維護(hù)工程師”(Ops)更加專(zhuān)業(yè)化。
在這個(gè)時(shí)期,Dev和Ops的矛盾,主要是由Dev所代表的乙方和Ops所代表的甲方在定制化軟件產(chǎn)品交付質(zhì)量上的矛盾。
敏捷軟件開(kāi)發(fā)時(shí)代——應(yīng)對(duì)頻繁變更的挑戰(zhàn)
隨著企業(yè)級(jí)軟件開(kāi)發(fā)日趨完善和成熟,形成了以RUP(Rational Unified Process,Rational 統(tǒng)一軟件開(kāi)發(fā)過(guò)程)為代表的方法論。RUP描述了如何有效地利用商業(yè)的可靠的方法開(kāi)發(fā)和部署軟件,是一種重量級(jí)過(guò)程(也被稱(chēng)作厚方法學(xué)),因此特別適用于大型軟件團(tuán)隊(duì)開(kāi)發(fā)大型項(xiàng)目。
后來(lái),互聯(lián)網(wǎng)企業(yè)的繁榮著實(shí)閃瞎了世界的眼睛。沒(méi)有人想到原本用來(lái)進(jìn)行國(guó)防和科研的廣域網(wǎng)居然可以帶來(lái)這么大的商業(yè)價(jià)值?;ヂ?lián)網(wǎng)創(chuàng)業(yè)公司的成功不斷的顛覆了很多人習(xí)以為常的事情,特別是IT產(chǎn)業(yè)。
首先,相較于最多萬(wàn)人的用戶(hù)訪問(wèn)規(guī)模,來(lái)自互聯(lián)網(wǎng)的千萬(wàn)級(jí)甚至是億級(jí)的訪問(wèn)規(guī)模是企業(yè)級(jí)應(yīng)用不曾遇到過(guò)的。這對(duì)軟件開(kāi)發(fā),主機(jī)管理,網(wǎng)絡(luò)架構(gòu)都帶來(lái)了很大的挑戰(zhàn)。
其次,企業(yè)級(jí)應(yīng)用和互聯(lián)網(wǎng)應(yīng)用面對(duì)的問(wèn)題是不一樣的。根據(jù)“康威定理”:設(shè)計(jì)系統(tǒng)的組織,其產(chǎn)生的設(shè)計(jì)和架構(gòu)等價(jià)于組織間的溝通結(jié)構(gòu)。相較于有著清晰的等級(jí)和部門(mén)分工的組織來(lái)說(shuō),互聯(lián)網(wǎng)產(chǎn)品的溝通結(jié)構(gòu)更加復(fù)雜。
此外,互聯(lián)網(wǎng)應(yīng)用由互聯(lián)網(wǎng)企業(yè)自開(kāi)發(fā)自維護(hù)。雖然從表面上看沒(méi)有了甲方和乙方的對(duì)立。但開(kāi)發(fā)和運(yùn)維相互分離的工作流程和考核方式卻沿用了下來(lái),職責(zé)上的對(duì)立依然存在:
Dev的工作是給應(yīng)用系統(tǒng)增加新的功能/修復(fù)軟件的Bug,這一系列價(jià)值的產(chǎn)生是通過(guò)應(yīng)用系統(tǒng)變更實(shí)現(xiàn)的。一般的組織會(huì)用代碼/功能的貢獻(xiàn)數(shù)量作為KPI作為考核的依據(jù),以激勵(lì)Dev的工作產(chǎn)出。
Ops的工作則是讓?xiě)?yīng)用系統(tǒng)保持穩(wěn)定和高性能,即最大化縮短宕機(jī)時(shí)間并能夠提升應(yīng)用系統(tǒng)的性能,并以這兩者作為Ops的KPI的考核指標(biāo)。以激勵(lì)Ops通過(guò)維護(hù)工作使應(yīng)用系統(tǒng)能夠按照預(yù)期穩(wěn)定的產(chǎn)出價(jià)值。
而市場(chǎng)環(huán)境的瞬息萬(wàn)變和資本的集中化使得互聯(lián)網(wǎng)軟件產(chǎn)品的生存狀態(tài)十分脆弱:
一方面,快速變化的市場(chǎng)難以預(yù)測(cè)。因此,基于經(jīng)驗(yàn)的重量級(jí)軟件開(kāi)發(fā)方法不再適用。取而代之的是強(qiáng)調(diào)適應(yīng)性,擁抱變化的敏捷方法?;ヂ?lián)網(wǎng)軟件必須通過(guò)頻繁增加/修改功能來(lái)提升自身對(duì)市場(chǎng)的適應(yīng)程度。
另一方面,互聯(lián)網(wǎng)軟件的變更給帶來(lái)的風(fēng)險(xiǎn)和損失都是難以度量的。因此,互聯(lián)網(wǎng)軟件有更加嚴(yán)格的交付標(biāo)準(zhǔn),需要做更多的質(zhì)量保證。而基于經(jīng)驗(yàn)的系統(tǒng)運(yùn)維實(shí)踐并沒(méi)有給出足夠的方法以應(yīng)對(duì)這種挑戰(zhàn)。
因此,在這個(gè)時(shí)期,Dev和Ops的矛盾主要是面向適應(yīng)性的敏捷軟件交付和面向經(jīng)驗(yàn)性的傳統(tǒng)運(yùn)維之間的矛盾。
那么,如果將敏捷的文化和原則引入運(yùn)維,會(huì)如何?
請(qǐng)期待下一篇:#DevOps的前世今生# 3. DevOps的文化和原則
感謝ThoughtWorks總監(jiān)咨詢(xún)師史凱對(duì)本文的改進(jìn)意見(jiàn)和建議。
參考資源:
https://en.wikipedia.org/wiki/Information_technology_operations
https://en.wikipedia.org/wiki/Software_developer
https://en.wikipedia.org/wiki/Management_information_system
https://en.wikipedia.org/wiki/Enterprise_resource_planning
https://en.wikipedia.org/wiki/Rational_Unified_Process
http://agilemanifesto.org/iso/zhchs/manifesto.html
https://theagileadmin.com/what-is-devops/
http://www.jedi.be/blog/2009/12/22/charting-out-devops-ideas/
http://itrevolution.com/the-convergence-of-devops/
http://joehertvik.com/operations-management/
https://zh.wikipedia.org/wiki/IBM-Rational%E7%BB%9F%E4%B8%80%E8%BF%87%E7%A8%8B
https://zh.wikipedia.org/wiki/%E6%95%8F%E6%8D%B7%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91