提到 DevOps 這個(gè)詞,我相信很多人一定不會(huì)陌生。
作為一個(gè)熱門(mén)的概念,DevOps 近年來(lái)頻頻出現(xiàn)在各大技術(shù)社區(qū)和媒體的文章中,備受行業(yè)大咖的追捧,也吸引了很多吃瓜群眾的圍觀。
那么,DevOps 是什么呢?
有人說(shuō)它是一種方法,也有人說(shuō)它是一種工具,還有人說(shuō)它是一種思想。更有甚者,說(shuō)它是一種哲學(xué)。
越說(shuō)越玄乎,感覺(jué)都要封神啦!DevOps 這玩意真的有那么夸張嗎?它到底是干嘛用的?為什么行業(yè)里都會(huì)對(duì)它趨之如騖呢?
今天這篇文章,小棗君就和大家好好聊一聊這個(gè) DevOps。
DevOps 的起源
這個(gè)故事有點(diǎn)長(zhǎng),從頭開(kāi)始講起吧。
上個(gè)世紀(jì) 40 年代,世界上第一臺(tái)計(jì)算機(jī)誕生。從誕生之日起,它就離不開(kāi)程序(Program)的驅(qū)動(dòng)。而負(fù)責(zé)編寫(xiě)程序的人,就被稱為“程序員”(Programmer)。
程序員是計(jì)算機(jī)的駕馭者,也是極其稀缺的人才。那個(gè)時(shí)候,只有高學(xué)歷、名校出身的人,才有資格成為程序員,操控計(jì)算機(jī)。
隨著人類科技的不斷發(fā)展,PC 和 Internet 陸續(xù)問(wèn)世,我們進(jìn)入了全民擁抱信息化的時(shí)代。越來(lái)越多的企業(yè)開(kāi)始將計(jì)算機(jī)作為辦公用的工具,用以提升生產(chǎn)力。而普通個(gè)人用戶也開(kāi)始將計(jì)算機(jī)作為娛樂(lè)工具,用以改善生活品質(zhì)。
于是,計(jì)算機(jī)的程序,開(kāi)始變成了一門(mén)生意。程序,逐步演進(jìn)為“軟件(software)”,變成了最賺錢的產(chǎn)品之一。
在軟件產(chǎn)業(yè)里,程序員有了更專業(yè)的稱謂,叫做“軟件開(kāi)發(fā)工程師(Software Development Engineer)”,也就是我們常說(shuō)的“碼農(nóng)”。
我們知道,一個(gè)軟件從零開(kāi)始到最終交付,大概包括以下幾個(gè)階段:規(guī)劃、編碼、構(gòu)建、測(cè)試、發(fā)布、部署和維護(hù)。
最初,程序比較簡(jiǎn)單,工作量不大,程序員一個(gè)人可以完成所有階段的工作。
隨著軟件產(chǎn)業(yè)的日益發(fā)展壯大,軟件的規(guī)模也在逐漸變得龐大。軟件的復(fù)雜度不斷攀升。一個(gè)人已經(jīng) hold 不住了,就開(kāi)始出現(xiàn)了精細(xì)化分工。
碼農(nóng)的隊(duì)伍擴(kuò)大,工種增加。除了軟件開(kāi)發(fā)工程師之外,又有了軟件測(cè)試工程師,軟件運(yùn)維工程師。
分工之后,傳統(tǒng)的軟件開(kāi)發(fā)流程是這樣的:
軟件開(kāi)發(fā)人員花費(fèi)數(shù)周和數(shù)月編寫(xiě)代碼,然后將代碼交給 QA(質(zhì)量保障)團(tuán)隊(duì)進(jìn)行測(cè)試,然后將最終的發(fā)布版交給運(yùn)維團(tuán)隊(duì)去布署。所有的這三個(gè)階段,即開(kāi)發(fā),測(cè)試,布署。
早期所采用的軟件交付模型,稱之為“瀑布(Waterfall)模型”。
瀑布模型,簡(jiǎn)而言之,就是等一個(gè)階段所有工作完成之后,再進(jìn)入下一個(gè)階段。
這種模型適合條件比較理想化(用戶需求非常明確、開(kāi)發(fā)時(shí)間非常充足)的項(xiàng)目。大家按部就班,輪流執(zhí)行自己的職責(zé)即可。
但是,項(xiàng)目不可能是單向運(yùn)作的??蛻粢彩怯行枨蟮?。產(chǎn)品也是會(huì)有問(wèn)題的,需要改進(jìn)的。
隨著時(shí)間推移,用戶對(duì)系統(tǒng)的需求不斷增加,與此同時(shí),用戶給的時(shí)間周期卻越來(lái)越少。在這個(gè)情況下,大家發(fā)現(xiàn),笨重遲緩的瀑布式開(kāi)發(fā)已經(jīng)不合時(shí)宜了。
于是,軟件開(kāi)發(fā)團(tuán)隊(duì)引入了一個(gè)新的概念,那就是大名鼎鼎的——“敏捷開(kāi)發(fā)(Agile Development)”。
敏捷開(kāi)發(fā)在 2000 年左右開(kāi)始被世人所關(guān)注,是一種能應(yīng)對(duì)快速變化需求的軟件開(kāi)發(fā)能力。其實(shí)簡(jiǎn)單來(lái)說(shuō),就是把大項(xiàng)目變成小項(xiàng)目,把大時(shí)間點(diǎn)變成小時(shí)間點(diǎn),然后這樣:
敏捷開(kāi)發(fā)
有兩個(gè)詞經(jīng)常會(huì)伴隨著 DevOps 出現(xiàn),那就是 CI 和 CD。CI 是 ContinuousIntegration(持續(xù)集成),而 CD 對(duì)應(yīng)多個(gè)英文,Continuous Delivery(持續(xù)交付)或 Continuous Deployment(持續(xù)部署)。
美其名曰:“持續(xù)(Continuous)”,其實(shí)就是“加速——反復(fù)——加速——反復(fù)……”,這樣子。
畫(huà)個(gè)圖大家可能更明白一點(diǎn):
敏捷開(kāi)發(fā)大幅提高了開(kāi)發(fā)團(tuán)隊(duì)的工作效率,讓版本的更新速度變得更快。
很多人可能會(huì)覺(jué)得,“更新版本的速度快了,風(fēng)險(xiǎn)不是更大了嗎?”
其實(shí),事實(shí)并非如此。
敏捷開(kāi)發(fā)可以幫助更快地發(fā)現(xiàn)問(wèn)題,產(chǎn)品被更快地交付到用戶手中,團(tuán)隊(duì)可以更快地得到用戶的反饋,從而進(jìn)行更快地響應(yīng)。而且,DevOps 小步快跑的形式帶來(lái)的版本變化是比較小的,風(fēng)險(xiǎn)會(huì)更小(如下圖所示)。即使出現(xiàn)問(wèn)題,修復(fù)起來(lái)也會(huì)相對(duì)容易一些。
雖然敏捷開(kāi)發(fā)大幅提升了軟件開(kāi)發(fā)的效率和版本更新的速度,但是它的效果僅限于開(kāi)發(fā)環(huán)節(jié)。研發(fā)們發(fā)現(xiàn),運(yùn)維那邊,依舊是鐵板一塊,成為了新的瓶頸。
運(yùn)維工程師,和開(kāi)發(fā)工程師有著完全不同的思維邏輯。運(yùn)維團(tuán)隊(duì)的座右銘,很簡(jiǎn)單,就是“穩(wěn)定壓倒一切”。運(yùn)維的核心訴求,就是不出問(wèn)題。
什么情況下最容易出問(wèn)題?發(fā)生改變的時(shí)候最容易出問(wèn)題。所以說(shuō),運(yùn)維非常排斥“改變”。
于是乎,矛盾就在兩者之間集中爆發(fā)了。
這個(gè)時(shí)候,我們的 DevOps,隆重登場(chǎng)了。
DevOps 到底是什么
DevOps 這個(gè)詞,其實(shí)就是Development 和 Operations 兩個(gè)詞的組合。它的英文發(fā)音是 /de'v?ps/,類似于“迪沃普斯”。
DevOps 的維基百科定義是這樣的:
DevOps 是一組過(guò)程、方法與系統(tǒng)的統(tǒng)稱,用于促進(jìn)開(kāi)發(fā)、技術(shù)運(yùn)營(yíng)和質(zhì)量保障(QA)部門(mén)之間的溝通、協(xié)作與整合。
這個(gè)定位稍微有點(diǎn)抽象,但是并不難理解。反正它不是某一個(gè)特定軟件、工具或平臺(tái)的名字。
從目標(biāo)來(lái)看,DevOps 就是讓開(kāi)發(fā)人員和運(yùn)維人員更好地溝通合作,通過(guò)自動(dòng)化流程來(lái)使得軟件整體過(guò)程更加快捷和可靠。
破墻工具
很多人可能覺(jué)得,所謂DevOps,不就是 Dev+Ops 嘛,把兩個(gè)團(tuán)隊(duì)合并,或者將運(yùn)維劃歸開(kāi)發(fā),不就完事了嘛,簡(jiǎn)單粗暴。
注意,這個(gè)觀點(diǎn)是不對(duì)的。這也是DevOps這些年一直難以落地的主要原因。
想要將 DevOps 真正落地,首先第一點(diǎn),是思維轉(zhuǎn)變,也就是“洗腦”。不僅是運(yùn)維的要洗,開(kāi)發(fā)的也要洗。員工要洗,領(lǐng)導(dǎo)更要洗。
DevOps 并不僅僅是組織架構(gòu)變革,更是企業(yè)文化和思想觀念的變革。如果不能改變觀念,即使將員工放在一起,也不會(huì)產(chǎn)生火花。
除了洗腦之外,就是根據(jù) DevOps 思想重新梳理全流程的規(guī)范和標(biāo)準(zhǔn)。
在 DevOps 的流程下,運(yùn)維人員會(huì)在項(xiàng)目開(kāi)發(fā)期間就介入到開(kāi)發(fā)過(guò)程中,了解開(kāi)發(fā)人員使用的系統(tǒng)架構(gòu)和技術(shù)路線,從而制定適當(dāng)?shù)倪\(yùn)維方案。而開(kāi)發(fā)人員也會(huì)在運(yùn)維的初期參與到系統(tǒng)部署中,并提供系統(tǒng)部署的優(yōu)化建議。
DevOps 的實(shí)施,促進(jìn)開(kāi)發(fā)和運(yùn)維人員的溝通,增進(jìn)彼此的理(gan)解(qing)。
在思維和流程改變的同時(shí),想要充分落地 DevOps,當(dāng)然離不開(kāi)軟件和平臺(tái)的支持。
目前支持 DevOps 的軟件實(shí)在是太多了。限于篇幅,就不一一介紹了。話說(shuō)回來(lái),現(xiàn)在 DevOps 之所以被吹得天花亂墜,也有這些軟件和平臺(tái)的功勞,可以趁機(jī)賣錢啊。
DevOps 生態(tài)圈中令人眼花繚亂的工具
上述這些關(guān)鍵要素里面,技術(shù)(工具和平臺(tái))是最容易實(shí)現(xiàn)的,流程次之,思維轉(zhuǎn)變反而最困難。
換言之,DevOps 考驗(yàn)的不僅是一家企業(yè)的技術(shù),更是管理水平和企業(yè)文化。
對(duì)比前面所說(shuō)的瀑布式開(kāi)發(fā)和敏捷開(kāi)發(fā),我們可以明顯看出,DevOps 貫穿了軟件全生命周期,而不僅限于開(kāi)發(fā)階段。
下面這張圖,更明顯地說(shuō)明了 DevOps 所處的位置,還有它的價(jià)值:
DevOps 的發(fā)展現(xiàn)狀
DevOps 這個(gè)詞來(lái)源于 2009 年在比利時(shí)根特市舉辦的首屆 DevOpsDays 大會(huì),為了在 Twitter 上更方便的傳播,由 DevOpsDays 縮寫(xiě)為 DevOps。
目前,DevOps 處于高速增長(zhǎng)的階段。尤其是在大企業(yè)中,DevOps 受到了廣泛的歡迎。
根據(jù) 2018 年的調(diào)查發(fā)現(xiàn),74%的受訪者已經(jīng)接受了 DevOps,而前一年這一比例為 66%。
越大的企業(yè),越喜歡 DevOps。包括 Adobe、Amazon、Apple、Airbnb、Ebay、Etsy、Facebook、LinkedIn、Netflix、NASA、Starbucks、Walmart、Sony 等公司,都在采用 DevOps。
如今,DevOps 幾乎已經(jīng)成為了軟件工程的代名詞。
DevOps 迅猛發(fā)展,相關(guān)專業(yè)人才的薪資待遇也跟著水漲船高。
根據(jù)調(diào)研,DevOps 工程師在美國(guó)的平均年薪為 130000 美金,在中國(guó)平均年薪也在 40 萬(wàn) -50 萬(wàn)區(qū)間,能力強(qiáng)者年薪百萬(wàn)也是比比皆是。
數(shù)據(jù)來(lái)自招聘網(wǎng)站
薪資的猛漲,又帶動(dòng)了 IT 工程師們學(xué)習(xí)和認(rèn)證的熱潮。
DevOps 的認(rèn)證目前最受歡迎的就是 EXIN DevOps Master 和 EXIN DevOps Professional。這些認(rèn)證的培訓(xùn)費(fèi)用不低,但是仍然吸引了很多人踴躍報(bào)名。
EXIN DevOps 認(rèn)證體系
DevOps 與虛擬化、容器、微服務(wù)
這幾年云計(jì)算技術(shù)突飛猛進(jìn),大家應(yīng)該對(duì)虛擬化、容器、微服務(wù)這些概念并不陌生。當(dāng)我們提到這些概念的時(shí)候,也會(huì)偶爾提及 DevOps。
它們之間有什么聯(lián)系呢?
其實(shí)很簡(jiǎn)單。
大家可以設(shè)想一下,如果要對(duì)一項(xiàng)工作進(jìn)行精細(xì)化分工,我們是對(duì)一個(gè)大鐵疙瘩進(jìn)行加工方便?還是拆成一塊一塊進(jìn)行加工更加方便?
顯然是拆分之后會(huì)更加方便。
所謂“微服務(wù)”,就是將原來(lái)黑盒化的一個(gè)整體產(chǎn)品進(jìn)行拆分(解耦),從一個(gè)提供多種服務(wù)的整體,拆成各自提供不同服務(wù)的多個(gè)個(gè)體。如下圖所示:
單體式架構(gòu)(Monolithic)→ 微服務(wù)架構(gòu)(Microservices)
微服務(wù)架構(gòu)下,不同的工程師可以對(duì)各自負(fù)責(zé)的模塊進(jìn)行處理,例如開(kāi)發(fā)、測(cè)試、部署、迭代。
而虛擬化,其實(shí)就是一種敏捷的云計(jì)算服務(wù)。它從硬件上,將一個(gè)系統(tǒng)“劃分”為多個(gè)系統(tǒng),系統(tǒng)之間相互隔離,為微服務(wù)提供便利。
容器就更徹底了,不是劃分為不同的操作系統(tǒng),而是在操作系統(tǒng)上劃分為不同的“運(yùn)行環(huán)境”(Container),占用資源更少,部署速度更快。
明白了吧?虛擬化和容器,其實(shí)為DevOps提供了很好的前提條件。開(kāi)發(fā)環(huán)境和部署環(huán)境都可以更好地隔離了,減小了相互之間的影響。
這也是DevOps為什么 2009 年時(shí)不火,現(xiàn)在越來(lái)越火的一個(gè)主要原因之一。
DevOps 和通信
作為一名通信工程師,小棗君再說(shuō)說(shuō) DevOps 和通信的關(guān)系。
最開(kāi)始接觸 DevOps 的時(shí)候,我和很多人一樣,都以為這是一個(gè)純 IT 的概念,和我們通信沒(méi)有什么關(guān)系。
后來(lái),隨著對(duì) DevOps 的深入了解,我才發(fā)現(xiàn),這個(gè)理念和我們通信有密切的關(guān)系。甚至說(shuō),早在十多年我剛?cè)胄械臅r(shí)候,其實(shí)就已經(jīng)遇到了 DevOps 所面對(duì)的問(wèn)題。
那時(shí)候(2005 年左右)的電信業(yè),產(chǎn)品的穩(wěn)定性和可靠性是壓到一切的(其實(shí)現(xiàn)在也是)。所以,電信業(yè)的軟件版本,更新速度非常慢。對(duì)朗訊、愛(ài)立信這樣的傳統(tǒng)巨頭來(lái)說(shuō),通常大半年才出一個(gè)正式版本。這個(gè)版本經(jīng)過(guò)重重把關(guān)、精雕細(xì)琢,所以非常穩(wěn)定。
隨著 3G 的興起,全球運(yùn)營(yíng)商開(kāi)始對(duì)網(wǎng)絡(luò)進(jìn)行更新?lián)Q代。華為和中興開(kāi)始趁機(jī)切入國(guó)際運(yùn)營(yíng)商市場(chǎng),試圖從國(guó)際巨頭那邊分一杯羹。
除了價(jià)格之外,華為中興最大的殺手锏是什么?就是響應(yīng)速度。
那個(gè)時(shí)候,運(yùn)營(yíng)商客戶對(duì)電信設(shè)備軟硬件的需求非常多、非常頻繁。像印度這樣的地方,客戶尤其難纏,每天都會(huì)提出新的需求。
當(dāng)時(shí)幾家海外設(shè)備商的響應(yīng)速度是非常慢的,從不輕易同意接受需求。即使接受,也會(huì)答復(fù)半年甚至一年后實(shí)現(xiàn)??蛻袈?tīng)了直接就崩潰了。
而華為和中興則不同,兩家公司的售前市場(chǎng)人員對(duì)于客戶需求非常“大方”,基本上有求必應(yīng)。(當(dāng)時(shí)售后同事都會(huì)罵售前同事,可是仔細(xì)想來(lái),不答應(yīng)的話,根本沒(méi)有進(jìn)入市場(chǎng)的機(jī)會(huì)。)
當(dāng)時(shí)華為和中興的版本發(fā)布頻率,快到什么程度呢?最快的時(shí)候,三天一個(gè)版本。甚至,長(zhǎng)期都有大批研發(fā)人員駐扎在客戶辦公室,現(xiàn)場(chǎng)改版本,提交“熱補(bǔ)丁”。
那時(shí)候是 2006 年,DevOps 這個(gè)概念的影子都還沒(méi)有。研發(fā)那邊,好像也就是剛剛提出敏捷開(kāi)發(fā)。在沒(méi)有理論框架和工具平臺(tái)的支持下,純靠人力,實(shí)現(xiàn)了版本的飛速迭代。當(dāng)然,這其中的代價(jià)和風(fēng)險(xiǎn)也是很高的。
不僅是開(kāi)發(fā)人員很累很辛苦,項(xiàng)目里的工服(工程服務(wù))工程師,也就是技術(shù)支持工程師,本文里面的運(yùn)維工程師,更是苦不堪言。你想啊,以前幾個(gè)月升一次級(jí),現(xiàn)在幾天就要升一次級(jí),能不辛苦么?
但就是這樣的辛苦付出,才硬生生從傳統(tǒng)巨頭嘴里搶下來(lái)市場(chǎng)份額,最終一步一步做大做強(qiáng)。
后來(lái),才慢慢有了敏捷開(kāi)發(fā)的概念,現(xiàn)在更是有了 DevOps,各種工具啊平臺(tái)啊都有了,給版本快速迭代提供了很好的條件。
對(duì)通信行業(yè)的運(yùn)維來(lái)說(shuō),DevOps是機(jī)遇更是挑戰(zhàn)。
就像前面說(shuō)的容器、虛擬化。5G 核心網(wǎng)采用的 NFV 虛擬化技術(shù),讓網(wǎng)元功能隔離,就大大降低了核心網(wǎng)工程師的操作風(fēng)險(xiǎn)和難度。這是一個(gè)積極的變化。但是,DevOps對(duì)運(yùn)維工程師的能力要求,是大大提高了。。。
通信軟件是 IT 軟件的一個(gè)重要分支,和 DevOps 有很緊密的關(guān)系。建議通信工程師好好了解一下DevOps,升級(jí)一下自己的知識(shí)庫(kù),做好技能儲(chǔ)備。
最后的話
天下武功,唯快不破。
時(shí)代發(fā)展到現(xiàn)在,客戶的需求瞬息萬(wàn)變,市場(chǎng)的風(fēng)向也難以預(yù)測(cè)。作為企業(yè),想要生存下去,只有讓自己變得更快。作為員工,必須讓自己眼光更加長(zhǎng)遠(yuǎn),內(nèi)心更加包容。
好了,以上就是今天的內(nèi)容,謝謝大家的耐心閱讀!下期再見(jiàn)!