DevOps(英文Development和Operations的組合)是一組過(guò)程、方法與系統(tǒng)的統(tǒng)稱,用于促進(jìn)軟件開(kāi)發(fā)、技術(shù)運(yùn)營(yíng)部門(mén)之間的溝通、協(xié)作與整合。它的出現(xiàn)是由于軟件行業(yè)日益清晰地認(rèn)識(shí)到:為了按時(shí)交付軟件產(chǎn)品和服務(wù),開(kāi)發(fā)和運(yùn)營(yíng)工作必須緊密合作。DevOps的方法提倡開(kāi)發(fā)與IT運(yùn)維部門(mén)之間高度協(xié)同,從而在提高生產(chǎn)環(huán)境的可靠性、穩(wěn)定性與彈性的同時(shí),又能完成高頻率軟件升級(jí)部署。
相對(duì)于瀑布式開(kāi)發(fā),敏捷開(kāi)發(fā)過(guò)程的一個(gè)基本原則就是以更快的頻率交付最小化可用的軟件。但是高頻率的版本發(fā)布對(duì)IT運(yùn)維來(lái)講卻是一場(chǎng)災(zāi)難。對(duì)于BOSS開(kāi)發(fā)的每個(gè)需求提出者來(lái)講,都希望自己提出的功能開(kāi)發(fā)馬上實(shí)現(xiàn),然而軟件開(kāi)發(fā)卻有自己的流程,例如需求了解、實(shí)施步驟分解、代碼開(kāi)發(fā)、功能測(cè)試等等一系列必不可少的工作。最后由于BOSS升級(jí)工作又包括了是否需要調(diào)整前臺(tái)業(yè)務(wù);是否需要調(diào)整生產(chǎn)數(shù)據(jù)庫(kù);是否需要前臺(tái)應(yīng)用程序升級(jí),每次升級(jí)都需要版本的重新部署,前臺(tái)的版本升級(jí)部署一次需要大約2個(gè)小時(shí)的時(shí)間,數(shù)據(jù)庫(kù)的調(diào)整也需要時(shí)間,當(dāng)數(shù)據(jù)庫(kù)表結(jié)構(gòu)改變和大批量的數(shù)據(jù)增刪改時(shí)還會(huì)影響數(shù)據(jù)同步,影響報(bào)表的統(tǒng)計(jì)查詢,因此IT運(yùn)維的困難制約了敏捷開(kāi)發(fā)的實(shí)施。如何解決兩者之間的矛盾呢?DevOps是目前普遍認(rèn)為的一種行之有效的方法。DevOps要求開(kāi)發(fā)與IT運(yùn)維高度協(xié)同,IT運(yùn)維部門(mén)應(yīng)充分的參與到需求的開(kāi)發(fā)中來(lái),及時(shí)調(diào)整IT支撐系統(tǒng)的架構(gòu),來(lái)適應(yīng)軟件開(kāi)發(fā)的不斷發(fā)展。這里面需要注意的問(wèn)題有幾個(gè)。第一點(diǎn)要求需求開(kāi)發(fā)對(duì)于需要的IT支撐能力與IT部門(mén)要在全局部署上達(dá)成一致。例如BOSS系統(tǒng)中每個(gè)月的權(quán)責(zé)出賬、銷(xiāo)賬,需要計(jì)算全省2000萬(wàn)客戶每個(gè)產(chǎn)品產(chǎn)生的賬單,需求開(kāi)發(fā)按照系統(tǒng)目前的計(jì)算能力無(wú)法在12個(gè)小時(shí)之內(nèi)計(jì)算完畢,研發(fā)就會(huì)采用分批計(jì)算的方式來(lái)實(shí)現(xiàn),但是分批計(jì)算方式會(huì)導(dǎo)致出賬后業(yè)務(wù)操作重新計(jì)算權(quán)責(zé)的問(wèn)題,并且更改了權(quán)責(zé)實(shí)現(xiàn)的方式。如果采用新的內(nèi)存數(shù)據(jù)庫(kù)技術(shù)或者找出導(dǎo)致計(jì)算IO的瓶頸,在硬件或系統(tǒng)軟件方面做一下優(yōu)化和替代,則不需要更改原業(yè)務(wù)設(shè)計(jì)達(dá)到系統(tǒng)要求。這是一個(gè)很好的需要DevOps的例子。當(dāng)研發(fā)部門(mén)缺乏與IT部門(mén)的溝通會(huì)導(dǎo)致類(lèi)似很多復(fù)雜的開(kāi)發(fā)。另外還有一個(gè)很重要的問(wèn)題是需要打造一種文化來(lái)促進(jìn)DevOps:持續(xù)不斷的探索精神,勇于承擔(dān)風(fēng)險(xiǎn)的精神以及從成功和失敗中學(xué)習(xí)的能力。探索精神與勇?lián)L(fēng)險(xiǎn)精神可以確保項(xiàng)目的持續(xù)改進(jìn),但也意味著項(xiàng)目到達(dá)了之前未曾到過(guò)的危險(xiǎn)區(qū)域,因此這也迫使我們?nèi)W(xué)習(xí),去掌握那些新技術(shù),從而使我們離開(kāi)危險(xiǎn)區(qū)域。
如果可以按照DevOps的方式來(lái)開(kāi)發(fā)項(xiàng)目,可以達(dá)到縮短開(kāi)發(fā)周期和更高的部署頻率;提高軟件開(kāi)發(fā)的質(zhì)量并提高組織的有效性。下一步在BOSS系統(tǒng)的軟件開(kāi)發(fā)中我們要積極探討這種模式在系統(tǒng)內(nèi)的應(yīng)用。