為什么傳統(tǒng)開發(fā)模式存在問題?
在信息化企業(yè)的這條路上,我們已經(jīng)走得很遠(yuǎn)了,從少數(shù)單機(jī)到集群的規(guī)模壯大;軟件生態(tài)也不斷豐富完善,從底層系統(tǒng)到上層的業(yè)務(wù)分析,ERP ,數(shù)據(jù)庫等自研定或是第三方應(yīng)用。正式因?yàn)橛辛诉@些IT 基礎(chǔ),云計(jì)算也開始生根發(fā)芽。
越來越多的社會(huì)業(yè)務(wù)依賴著IT 技術(shù),IT 技術(shù)工作者們也越來越期望自己的產(chǎn)品可以更快地響應(yīng)社會(huì)不斷變化的需求。首個(gè)軟件公司的誕生已經(jīng)過去了七十年,技術(shù)日新月異,業(yè)務(wù)發(fā)展迅速的公司也逐漸發(fā)現(xiàn)傳統(tǒng)開發(fā)模式已經(jīng)不再適用了。市場(chǎng)機(jī)遇不斷擴(kuò)大,企業(yè)業(yè)務(wù)需求相應(yīng)增加;而業(yè)務(wù)需求落地的速度超過研發(fā)所能承受的工作量。另外,由于發(fā)布產(chǎn)品越來越多,對(duì)應(yīng)的測(cè)試工作也相應(yīng)地越來越多,如何滿足海量的開發(fā)測(cè)試需求,如何實(shí)現(xiàn)產(chǎn)品的快速迭代,快速發(fā)布,正在成為企業(yè)越來越強(qiáng)烈的訴求。
不少企業(yè)嘗試通過擴(kuò)充研發(fā)人員的方式加快產(chǎn)品落地速度,但是人員增多并不意味著開發(fā)時(shí)間的縮短;但是IT 技術(shù)的研發(fā)實(shí)現(xiàn)能力卻不能跟上步伐,如何加快產(chǎn)品落地速度為企業(yè)爭(zhēng)取先機(jī)成為重大課題
那么,為什么傳統(tǒng)開發(fā)模式存在能力瓶頸呢?
1. 開發(fā)工具不統(tǒng)一,安裝耗時(shí):傳統(tǒng)開發(fā)模式下,以Java 為例,一般人都是用Eclipse 或者M(jìn)yEclipse 這樣的IDE 工具,這類工具通過自帶的各種插件,能夠完成開發(fā)工具與執(zhí)行環(huán)境的結(jié)合,但是如何保證你的插件一定能起作用,如果遇到問題怎么解決,這樣的問題往往導(dǎo)致一個(gè)開發(fā)人員一整天都在搭建開發(fā)環(huán)境。
2. 沒有統(tǒng)一的開發(fā),測(cè)試平臺(tái):無論是開發(fā)環(huán)境(Dev ),還是集成環(huán)境(Staging ),亦或是生產(chǎn)環(huán)境(Production ),都需要能夠快速部署環(huán)境。傳統(tǒng)開發(fā)模式很容易出現(xiàn)的問題是需要花費(fèi)大量時(shí)間統(tǒng)一各個(gè)環(huán)境的差異點(diǎn)。差異點(diǎn)包括基礎(chǔ)環(huán)境差異和開發(fā)程序環(huán)境差異,基礎(chǔ)環(huán)境差異指示是安裝測(cè)試程序之前整個(gè)環(huán)境情況不明確,可能出現(xiàn)操作系統(tǒng)版本不一致,開發(fā) 依賴庫版本不一致(例如JDK 版本),也可能會(huì)出現(xiàn)一個(gè)環(huán)境運(yùn)行不了程序,但是又找不出原因這種情況。而對(duì)于開發(fā)程序環(huán)境差異,傳統(tǒng)開發(fā)模式多使用腳本方式執(zhí)行安裝,部署過程,但是腳本的維護(hù)本身就是一個(gè)問題
3. 項(xiàng)目管理流程無法快速執(zhí)行:無論傳統(tǒng)開發(fā)模式,還是迭代開發(fā)模式,亦或是基于云端的開發(fā)模式,都需要嚴(yán)格執(zhí)行項(xiàng)目質(zhì)量管理流程,即需要對(duì)代碼進(jìn)行審核,單元測(cè)試,集成測(cè)試,系統(tǒng)測(cè)試,然后才能進(jìn)行產(chǎn)品發(fā)布,上線,這一套套流程,在傳統(tǒng)開發(fā)模式下,首先需要提交代碼到SVN 這樣的代碼資源庫軟件,然后由Leader 進(jìn)行代碼審核,再開始個(gè)人開發(fā)環(huán)境上的單元測(cè)試,即便單元測(cè)試,集成測(cè)試通過,也未必意味著部署到測(cè)試環(huán)境一定沒有問題,一整條線上有太多的不可控因素,任何一點(diǎn)都可以拖慢開發(fā)團(tuán)隊(duì)的迭代速度。而代碼審核,分析,多依靠人工進(jìn)行,無法進(jìn)行真正的智能分析。
4. 無法并行,協(xié)同開發(fā):傳統(tǒng)開發(fā)模式下,我們需要將代碼提交到SVN ,如果出現(xiàn)了代碼沖突,還需要手動(dòng)逐行校對(duì),如果開發(fā)人員遍布全球,存在時(shí)差,那開發(fā)進(jìn)度就會(huì)延期,這種方式下確實(shí)很難做到并行,協(xié)同開發(fā)。
為什么DevOps 備受關(guān)注?
回顧開發(fā)模式的發(fā)展歷史,大致分為瀑布開發(fā),敏捷開發(fā)和DevOps 三個(gè)階段。
DevOps 就是想方設(shè)法避免從開發(fā)到交付過程中可能發(fā)生的沖突,同時(shí)讓大家用更聰明更有效的方式去工作。它是一種框架,包含了很多優(yōu)秀想法和原則,它鼓勵(lì)開發(fā)部門和運(yùn)維部門通力合作,提高產(chǎn)品實(shí)現(xiàn)的速度。在DevOps 環(huán)境中,開發(fā)人員和系統(tǒng)管理員會(huì)構(gòu)建一些關(guān)系,流程和工具,從而更好的與客戶互動(dòng),最終提供更好的服務(wù)。
真正想要實(shí)現(xiàn)的DevOps ,需要開發(fā)平臺(tái)提供能力,促進(jìn)軟件開發(fā)向前發(fā)展和提升,而不僅僅是擁有思維。效率的本質(zhì)是聚焦創(chuàng)造性工作,即解放雙手,喚醒大腦。相關(guān)的曾經(jīng)撰文對(duì)的DevOps 工具鏈進(jìn)去了分類總結(jié),對(duì)DevOps 不是很熟悉的讀者可以移步DevOps 科普文“ DevOps 的前世今生 ”。
華為走過的路
最早期的軟件開發(fā)堪稱 “個(gè)人英雄主義時(shí)期”,但是隨著團(tuán)隊(duì)的擴(kuò)大,需要通過團(tuán)隊(duì)能力來承載團(tuán)隊(duì)研發(fā),于是華為引入CMM 聚焦于大團(tuán)隊(duì)如何通過更加完整的流程進(jìn)行軟件交付,彼時(shí)交付周期為三到六個(gè)月。
此后,與行業(yè)整體歷程相似,華為也走過了從最初IPD-CMM 到敏捷模式開發(fā)嘗試,再到DevOps 研發(fā)能力及工具鏈建設(shè),相應(yīng)的研發(fā),測(cè)試工具一直在跟隨演進(jìn)。
華為在全球有16 個(gè)研發(fā)中心,近8 萬研發(fā)人員,對(duì)于這樣一個(gè)量級(jí)的軟件開發(fā)團(tuán)體,想成功DevOps 改革并非易事。在決定落地DevOps 平臺(tái)之時(shí),就希望實(shí)現(xiàn)代碼和作業(yè)上云,讓開發(fā)只做開發(fā)。2014 年,華為已經(jīng)開始研發(fā)一些DevOps 風(fēng)格的工具,現(xiàn)如今已經(jīng)實(shí)現(xiàn)了DevCloud 軟件開發(fā)運(yùn)平臺(tái),在云上實(shí)現(xiàn)了DevOps 的工具鏈,供開發(fā)者使用參考下面的DevOps 能力環(huán)來分析DevCloud :
華為希望的是將整個(gè)能力環(huán)的工作都放入到云端,開發(fā)者在完成代碼的編寫之后,不再關(guān)心后續(xù)環(huán)節(jié)的任何問題。換而言之,文中最早提到的開發(fā)模式的四大問題則直接由該平臺(tái)處理,不再耗費(fèi)人力逐一手動(dòng)處理瑣碎的代碼之外工作,從而提高產(chǎn)品的落地效率。
華為對(duì)此DevOps 云端平臺(tái)的功能劃分如下:
華為稱一切開發(fā)活動(dòng)都在云端,即DevCloud 負(fù)責(zé)軟件開發(fā)全生命周期的云服務(wù)。進(jìn)行DevOps 改革之后,千萬行代碼級(jí)產(chǎn)品的版本迭代周期從8 周縮短到3 周。
從華為提供的整體統(tǒng)計(jì)數(shù)字來看,以前華為每個(gè)月有超過一億行的代碼,編譯時(shí)間超過25 分鐘;后來通過軟件研發(fā)云將所有的編譯資源進(jìn)行了集中處理,將編譯時(shí)間從25 分鐘降到了7.5 分鐘,版本的編譯速度從94 分鐘升級(jí)到31 分鐘,研發(fā)環(huán)境的準(zhǔn)備時(shí)間也由月級(jí)降低到了小時(shí)級(jí),甚至分鐘級(jí)。
通過三個(gè)應(yīng)用場(chǎng)景看技術(shù)落地
應(yīng)用場(chǎng)景一:代碼檢查
技術(shù)層
缺陷自動(dòng)檢查:代碼缺陷模式庫融合華為優(yōu)秀代碼實(shí)踐與編程規(guī)范與業(yè)界通用的檢查規(guī)則,覆蓋常見的編碼風(fēng)格,架構(gòu),Web 安全等方面的問題。大規(guī)模分布式任務(wù)調(diào)度:基于并行智能任務(wù)調(diào)度算法,對(duì)檢查節(jié)點(diǎn)進(jìn)行自動(dòng)彈性伸縮,檢查任務(wù)根據(jù)檢查規(guī)則類型智能分片和并行執(zhí)行,支持大規(guī)模代碼倉庫的代碼檢查。業(yè)務(wù)層
代碼檢查任務(wù)由“代碼+ 檢查規(guī)則+ 檢查報(bào)表”構(gòu)成,即:檢查引擎從代碼倉庫(CodeHub )克隆代碼,從規(guī)則庫中獲取檢查規(guī)則,執(zhí)行生成檢查報(bào)表,保存到檢查任務(wù)實(shí)例對(duì)象表現(xiàn)層
華為將20+ 年的軟件開發(fā)經(jīng)驗(yàn)薈萃出一套完整的代碼檢查機(jī)制,可在線進(jìn)行多種語言的代碼靜態(tài)檢查,代碼安全檢查,質(zhì)量評(píng)分,代碼缺陷改進(jìn)趨勢(shì)分析,輔助管控代碼質(zhì)量。
提供華為典型檢查規(guī)則集,支持web 檢查,安全檢查,架構(gòu)檢查,編碼問題檢查等場(chǎng)景。支持Java ,JavaScript ,CSS ,HTML ,C ++ 等語言檢查,持續(xù)增加語言支持廣度。精確定位缺陷,針對(duì)每個(gè)代碼缺陷,提供詳細(xì)的缺陷影響說明,正確示例,錯(cuò)誤示例,修改建議。如果系統(tǒng)的檢查不滿足需求,SE 可通過定制規(guī)則集來實(shí)現(xiàn)挑選規(guī)則集;針對(duì)大量代碼缺陷,用戶可根據(jù)問題級(jí)別,問題分類,語言,文件目錄等進(jìn)行過濾,分級(jí)處理。應(yīng)用場(chǎng)景二:自動(dòng)化流水線
技術(shù)層
表現(xiàn)層
對(duì)于一切可以解放雙手的任務(wù)都會(huì)工具自動(dòng)化實(shí)現(xiàn)。一鍵式完成代碼下載/ 代碼檢查/ 編譯構(gòu)造/ 系統(tǒng)部署/ 產(chǎn)品發(fā)布整個(gè)交付流程。任務(wù)并行執(zhí)行,按需動(dòng)態(tài)分配資源,顯著提升資源利用效率及執(zhí)行效率。可實(shí)現(xiàn)單模塊或者單獨(dú)子系統(tǒng)的個(gè)人級(jí)交付,也可實(shí)現(xiàn)多模塊,多子系統(tǒng)的版本級(jí)交付可隨時(shí)查看流水線執(zhí)行進(jìn)度/ 結(jié)果/ 報(bào)告/ 日志。應(yīng)用場(chǎng)景三:部署環(huán)境標(biāo)準(zhǔn)化,部署過程自動(dòng)化
技術(shù)層
部署編排技術(shù)提供一定的服務(wù)編排能力,在playbooks 中可以編排有序的執(zhí)行過程,甚至于做到多組機(jī)器間,來回有序的執(zhí)行特別指定的步驟。并且可以同步或異步的發(fā)起任務(wù)。
用流水線同時(shí)集成編譯構(gòu)建,代碼檢查,部署,從代碼提交開始觸發(fā)操作,完成整個(gè)DevOps 的自動(dòng)化流程。流水線支持編排部署任務(wù)之間的依賴和順序,通過串行任務(wù)和并行任務(wù)以及子流水線來組合,調(diào)度各個(gè)任務(wù),從而實(shí)現(xiàn)高效部署。
大規(guī)模部署技術(shù)可能本身就支持多并發(fā)部署,缺省的并發(fā)任務(wù)數(shù)是5. 但是DevCloud 的部署采用python API 實(shí)現(xiàn),我們封裝了python 的任務(wù)以多線程方式運(yùn)行;同時(shí)采用了gunicorn 框架提供多進(jìn)程復(fù)用技術(shù),以最大限度的利用Ansibe 引擎的并行部署能力;對(duì)于超過200 以上并發(fā)的大規(guī)模部署,我們會(huì)采用橫向擴(kuò)展即增加AnsibleRest 的節(jié)點(diǎn)數(shù)來支持更多的并發(fā)部署; 此外,我們還提供部署任務(wù)排隊(duì)機(jī)制來保障峰值任務(wù)時(shí)系統(tǒng)仍然能夠正常運(yùn)行。
表現(xiàn)層
一鍵式自動(dòng)化部署,部署機(jī)器無需安裝代理,過程可視化,支持主流編程語言和技術(shù)框架,支持并行部署和流水線無縫集成支持Web 應(yīng)用程序和微服務(wù)部署,支持Tomcat ,Java ,Python ,NodeJS ,Go ,PHP ,Ruby 語言。通過流水線定制交付流程,支持并行和串行任務(wù),系統(tǒng)自動(dòng)執(zhí)行所有任務(wù),并可查看所有任務(wù)的執(zhí)行狀態(tài),日志及報(bào)告。提供高級(jí)編輯功能,滿足用戶更改部署參數(shù)和自定義執(zhí)行參數(shù)以在部署任務(wù)執(zhí)行時(shí)動(dòng)態(tài)輸入執(zhí)行參數(shù)。關(guān)于DevCloud 的更多細(xì)節(jié)
正所謂英雄所見略同,業(yè)界也有很多DevOps 方案和實(shí)踐經(jīng)驗(yàn),比如微軟公司Visual Studio + Team Foundation Server 方案,AWS 和Google 基于云的DevOps 模塊化組件,其他公司自研搭建的DevOps 鏈。
華為推出的DevCloud 的側(cè)重點(diǎn)是一站式的解決方案,旨在幫助企業(yè)在軟件開發(fā)的過程中提升效率和質(zhì)量。DevCloud 的中文名稱為“華為軟件開發(fā)云”,即面向的目標(biāo)群體是團(tuán)隊(duì)規(guī)模在10-50 人的中小團(tuán)隊(duì),如中小企業(yè)的軟件開發(fā)者,眾包開發(fā)團(tuán)隊(duì),個(gè)人開發(fā)者,高校軟件/ 計(jì)算機(jī)類的大學(xué)生。
華為告訴InfoQ 使用華為軟件開發(fā)云的研發(fā)周期是1 天到兩周交付的彈性版本周期。其中:重大變更,新服務(wù)或大特性上線,多服務(wù)間聯(lián)調(diào)的需求會(huì)長達(dá)雙周交付;而服務(wù)內(nèi)新特性,體驗(yàn)優(yōu)化等開發(fā),獨(dú)立升級(jí)則會(huì)于1-3 天交付。
使用DevCloud 的用戶可以基于軟件開發(fā)云進(jìn)行應(yīng)用的開發(fā),測(cè)試,而把軟件自動(dòng)化部署到華為企業(yè)云,也可以把軟件包下載到本地后部署到別家的公有云,混合云。