我們來(lái)思考一個(gè)問(wèn)題,我們?yōu)槭裁匆P(guān)注DevOps,它能為我們帶來(lái)什么?
第一個(gè)原因是,DevOps已經(jīng)被證實(shí)能在IT和商業(yè)兩方面提升效率和質(zhì)量。
在Puppet實(shí)驗(yàn)室發(fā)布的DevOps調(diào)查研究報(bào)告中,指出使用了DevOps的團(tuán)隊(duì)和沒(méi)有使用DevOps團(tuán)隊(duì)對(duì)比,部署更改頻率提高30倍,交付周期縮短200倍。在問(wèn)題質(zhì)量方面,和其他組織相比,問(wèn)題故障減少了60倍,在問(wèn)題恢復(fù)上快了168倍。
第二個(gè)原因是,DevOps能讓你的日常工作變得更簡(jiǎn)單,讓你的工作節(jié)奏更加穩(wěn)定可持續(xù),讓你的工作變得更有價(jià)值。
DevOps的目標(biāo)簡(jiǎn)單來(lái)說(shuō)就是幫助產(chǎn)品研發(fā)團(tuán)隊(duì)可持續(xù)的又快又好的交付價(jià)值。
“可持續(xù)性”是指以比較穩(wěn)定的節(jié)奏長(zhǎng)期的持續(xù)進(jìn)行交付,比如經(jīng)常加班趕工就是不可持續(xù)的,團(tuán)隊(duì)的交付速率也不穩(wěn)定,波動(dòng)性越大,風(fēng)險(xiǎn)越高。
“快”是指研發(fā)效能提升,具備按時(shí)可預(yù)測(cè)交付的能力。
“好”是指研發(fā)質(zhì)量提升,減少缺陷和返工,降低成本,提升用戶體驗(yàn)。
“交付價(jià)值”是指通過(guò)持續(xù)的頻繁的迭代交付可用的產(chǎn)品,經(jīng)過(guò)市場(chǎng)和客戶的檢驗(yàn),持續(xù)的將問(wèn)題和建議反饋給產(chǎn)品開(kāi)發(fā)團(tuán)隊(duì),進(jìn)而對(duì)產(chǎn)品的功能的演進(jìn)方向調(diào)整,使最終交付的產(chǎn)品更符合用戶需求,最大化交付價(jià)值。
DevOps將給我們帶來(lái)哪些改變?
DevOps落地由于涉及的內(nèi)容非常多,所以不同的角色以不同的視角看,基本就是橫看成嶺側(cè)成峰,遠(yuǎn)近高低各不同。我們從不同角度和層面來(lái)看看DevOps將會(huì)帶來(lái)哪些改變?
從人員管理層面看:
從上圖可以看出,DevOps落地后,人員管理的組織結(jié)構(gòu)會(huì)有變化。目前大多數(shù)傳統(tǒng)IT企業(yè)的開(kāi)發(fā)和運(yùn)維部門(mén)的運(yùn)作模式是共享的運(yùn)維團(tuán)隊(duì),開(kāi)發(fā)完成后的交付物,交給運(yùn)維團(tuán)隊(duì)負(fù)責(zé)部署、發(fā)布和運(yùn)維。DevOps推薦的多功能團(tuán)隊(duì)類(lèi)似于圖中虛擬運(yùn)維組的形式,每個(gè)開(kāi)發(fā)團(tuán)隊(duì)都有自己的運(yùn)維人員(運(yùn)維人員少的也要有共享的運(yùn)維聯(lián)絡(luò)人)。這里的運(yùn)維人員指的是一種角色,有些團(tuán)隊(duì)也有全棧工程師,開(kāi)發(fā)測(cè)試兼運(yùn)維。對(duì)于中大型的公司,還經(jīng)常會(huì)有基礎(chǔ)設(shè)施運(yùn)維團(tuán)隊(duì),提供基礎(chǔ)設(shè)施即代碼等平臺(tái)化能力。未來(lái)隨著云原生服務(wù)的發(fā)展,運(yùn)維的角色會(huì)有更大的轉(zhuǎn)變(打破部門(mén)墻的最高境界,干掉運(yùn)維部門(mén),一切運(yùn)維服務(wù)都是云原生服務(wù))。
看完組織結(jié)構(gòu)的變化,再來(lái)看技術(shù)架構(gòu)的演進(jìn)。從技術(shù)架構(gòu)層面看(以Java Web應(yīng)用為例):
隨著IT技術(shù)的不斷發(fā)展,應(yīng)用系統(tǒng)的建設(shè)經(jīng)過(guò)單體應(yīng)用、SOA應(yīng)用、逐步走向微服務(wù)應(yīng)用。微服務(wù)的實(shí)施必然要具備需求管理、代碼版本管理、質(zhì)量管理、構(gòu)建管理、測(cè)試管理、部署管理、環(huán)境管理等全流程自動(dòng)化工具鏈,以及開(kāi)發(fā)部門(mén)與運(yùn)維部門(mén)的深度協(xié)作。因此,DevOps是微服務(wù)實(shí)施的充分必要條件。
從信息流轉(zhuǎn)層面看:
從信息流轉(zhuǎn)來(lái)看,DevOps包含了從需求管理到需求開(kāi)發(fā)、代碼管理、基礎(chǔ)設(shè)施管理、持續(xù)集成、自動(dòng)化測(cè)試、持續(xù)部署、持續(xù)發(fā)布和應(yīng)用運(yùn)維管理全流程。
從工具使用層面看:
DevOps落地,研發(fā)交付的每個(gè)過(guò)程都離不開(kāi)工具的支撐。傳統(tǒng)的方式,是自己搭建零散的弱整合工具系統(tǒng),比如我們用Gitlab來(lái)管理代碼,根據(jù)企業(yè)的實(shí)際情況尋找合適的分支管理方法;我們用Jenkins來(lái)做持續(xù)集成;使用selenium來(lái)做自動(dòng)化測(cè)試;使用ansible來(lái)自動(dòng)化部署;使用chef或者puppet來(lái)管理基礎(chǔ)環(huán)境等等。這種情況的問(wèn)題一是系統(tǒng)完全需要自己維護(hù),成本高,不穩(wěn)定;問(wèn)題二是子系統(tǒng)之間存在隱性墻,缺少數(shù)據(jù)共享/權(quán)限共享/系統(tǒng)交互等功能。目前大型金融以及互聯(lián)網(wǎng)企業(yè)普遍采用強(qiáng)整合的統(tǒng)一DevOps平臺(tái)。