每月億行代碼、全球數(shù)萬研發(fā),落地DevOps的協(xié)同平臺DevCloud

責(zé)任編輯:editor004

作者:木環(huán) 麥麥

2017-04-05 11:37:50

摘自:INFOQ

大規(guī)模分布式任務(wù)調(diào)度:基于并行智能任務(wù)調(diào)度算法,對檢查節(jié)點(diǎn)進(jìn)行自動彈性伸縮,檢查任務(wù)根據(jù)檢查規(guī)則類型智能分片和并行執(zhí)行,支持大規(guī)模代碼倉庫的代碼檢查

為什么傳統(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ǔ),云計算也開始生根發(fā)芽。

越來越多的社會業(yè)務(wù)依賴著IT 技術(shù),IT 技術(shù)工作者們也越來越期望自己的產(chǎn)品可以更快地響應(yīng)社會不斷變化的需求。首個軟件公司的誕生已經(jīng)過去了七十年,技術(shù)日新月異,業(yè)務(wù)發(fā)展迅速的公司也逐漸發(fā)現(xiàn)傳統(tǒng)開發(fā)模式已經(jīng)不再適用了。市場機(jī)遇不斷擴(kuò)大,企業(yè)業(yè)務(wù)需求相應(yīng)增加;而業(yè)務(wù)需求落地的速度超過研發(fā)所能承受的工作量。另外,由于發(fā)布產(chǎn)品越來越多,對應(yīng)的測試工作也相應(yīng)地越來越多,如何滿足海量的開發(fā)測試需求,如何實(shí)現(xiàn)產(chǎn)品的快速迭代,快速發(fā)布,正在成為企業(yè)越來越強(qiáng)烈的訴求。

不少企業(yè)嘗試通過擴(kuò)充研發(fā)人員的方式加快產(chǎn)品落地速度,但是人員增多并不意味著開發(fā)時間的縮短;但是IT 技術(shù)的研發(fā)實(shí)現(xiàn)能力卻不能跟上步伐,如何加快產(chǎn)品落地速度為企業(yè)爭取先機(jī)成為重大課題

那么,為什么傳統(tǒng)開發(fā)模式存在能力瓶頸呢?

1. 開發(fā)工具不統(tǒng)一,安裝耗時:傳統(tǒng)開發(fā)模式下,以Java 為例,一般人都是用Eclipse 或者M(jìn)yEclipse 這樣的IDE 工具,這類工具通過自帶的各種插件,能夠完成開發(fā)工具與執(zhí)行環(huán)境的結(jié)合,但是如何保證你的插件一定能起作用,如果遇到問題怎么解決,這樣的問題往往導(dǎo)致一個開發(fā)人員一整天都在搭建開發(fā)環(huán)境。

2. 沒有統(tǒng)一的開發(fā),測試平臺:無論是開發(fā)環(huán)境(Dev ),還是集成環(huán)境(Staging ),亦或是生產(chǎn)環(huán)境(Production ),都需要能夠快速部署環(huán)境。傳統(tǒng)開發(fā)模式很容易出現(xiàn)的問題是需要花費(fèi)大量時間統(tǒng)一各個環(huán)境的差異點(diǎn)。差異點(diǎn)包括基礎(chǔ)環(huán)境差異和開發(fā)程序環(huán)境差異,基礎(chǔ)環(huán)境差異指示是安裝測試程序之前整個環(huán)境情況不明確,可能出現(xiàn)操作系統(tǒng)版本不一致,開發(fā) 依賴庫版本不一致(例如JDK 版本),也可能會出現(xiàn)一個環(huán)境運(yùn)行不了程序,但是又找不出原因這種情況。而對于開發(fā)程序環(huán)境差異,傳統(tǒng)開發(fā)模式多使用腳本方式執(zhí)行安裝,部署過程,但是腳本的維護(hù)本身就是一個問題

3. 項(xiàng)目管理流程無法快速執(zhí)行:無論傳統(tǒng)開發(fā)模式,還是迭代開發(fā)模式,亦或是基于云端的開發(fā)模式,都需要嚴(yán)格執(zhí)行項(xiàng)目質(zhì)量管理流程,即需要對代碼進(jìn)行審核,單元測試,集成測試,系統(tǒng)測試,然后才能進(jìn)行產(chǎn)品發(fā)布,上線,這一套套流程,在傳統(tǒng)開發(fā)模式下,首先需要提交代碼到SVN 這樣的代碼資源庫軟件,然后由Leader 進(jìn)行代碼審核,再開始個人開發(fā)環(huán)境上的單元測試,即便單元測試,集成測試通過,也未必意味著部署到測試環(huán)境一定沒有問題,一整條線上有太多的不可控因素,任何一點(diǎn)都可以拖慢開發(fā)團(tuán)隊的迭代速度。而代碼審核,分析,多依靠人工進(jìn)行,無法進(jìn)行真正的智能分析。

4. 無法并行,協(xié)同開發(fā):傳統(tǒng)開發(fā)模式下,我們需要將代碼提交到SVN ,如果出現(xiàn)了代碼沖突,還需要手動逐行校對,如果開發(fā)人員遍布全球,存在時差,那開發(fā)進(jìn)度就會延期,這種方式下確實(shí)很難做到并行,協(xié)同開發(fā)。

為什么DevOps 備受關(guān)注?

回顧開發(fā)模式的發(fā)展歷史,大致分為瀑布開發(fā),敏捷開發(fā)和DevOps 三個階段。

DevOps 就是想方設(shè)法避免從開發(fā)到交付過程中可能發(fā)生的沖突,同時讓大家用更聰明更有效的方式去工作。它是一種框架,包含了很多優(yōu)秀想法和原則,它鼓勵開發(fā)部門和運(yùn)維部門通力合作,提高產(chǎn)品實(shí)現(xiàn)的速度。在DevOps 環(huán)境中,開發(fā)人員和系統(tǒng)管理員會構(gòu)建一些關(guān)系,流程和工具,從而更好的與客戶互動,最終提供更好的服務(wù)。

真正想要實(shí)現(xiàn)的DevOps ,需要開發(fā)平臺提供能力,促進(jìn)軟件開發(fā)向前發(fā)展和提升,而不僅僅是擁有思維。效率的本質(zhì)是聚焦創(chuàng)造性工作,即解放雙手,喚醒大腦。相關(guān)的曾經(jīng)撰文對的DevOps 工具鏈進(jìn)去了分類總結(jié),對DevOps 不是很熟悉的讀者可以移步DevOps 科普文“ DevOps 的前世今生 ”。

華為走過的路

最早期的軟件開發(fā)堪稱 “個人英雄主義時期”,但是隨著團(tuán)隊的擴(kuò)大,需要通過團(tuán)隊能力來承載團(tuán)隊研發(fā),于是華為引入CMM 聚焦于大團(tuán)隊如何通過更加完整的流程進(jìn)行軟件交付,彼時交付周期為三到六個月。

此后,與行業(yè)整體歷程相似,華為也走過了從最初IPD-CMM 到敏捷模式開發(fā)嘗試,再到DevOps 研發(fā)能力及工具鏈建設(shè),相應(yīng)的研發(fā),測試工具一直在跟隨演進(jìn)。

華為在全球有16 個研發(fā)中心,近8 萬研發(fā)人員,對于這樣一個量級的軟件開發(fā)團(tuán)體,想成功DevOps 改革并非易事。在決定落地DevOps 平臺之時,就希望實(shí)現(xiàn)代碼和作業(yè)上云,讓開發(fā)只做開發(fā)。2014 年,華為已經(jīng)開始研發(fā)一些DevOps 風(fēng)格的工具,現(xiàn)如今已經(jīng)實(shí)現(xiàn)了DevCloud 軟件開發(fā)運(yùn)平臺,在云上實(shí)現(xiàn)了DevOps 的工具鏈,供開發(fā)者使用參考下面的DevOps 能力環(huán)來分析DevCloud :

華為希望的是將整個能力環(huán)的工作都放入到云端,開發(fā)者在完成代碼的編寫之后,不再關(guān)心后續(xù)環(huán)節(jié)的任何問題。換而言之,文中最早提到的開發(fā)模式的四大問題則直接由該平臺處理,不再耗費(fèi)人力逐一手動處理瑣碎的代碼之外工作,從而提高產(chǎn)品的落地效率。

華為對此DevOps 云端平臺的功能劃分如下:

華為稱一切開發(fā)活動都在云端,即DevCloud 負(fù)責(zé)軟件開發(fā)全生命周期的云服務(wù)。進(jìn)行DevOps 改革之后,千萬行代碼級產(chǎn)品的版本迭代周期從8 周縮短到3 周。

從華為提供的整體統(tǒng)計數(shù)字來看,以前華為每個月有超過一億行的代碼,編譯時間超過25 分鐘;后來通過軟件研發(fā)云將所有的編譯資源進(jìn)行了集中處理,將編譯時間從25 分鐘降到了7.5 分鐘,版本的編譯速度從94 分鐘升級到31 分鐘,研發(fā)環(huán)境的準(zhǔn)備時間也由月級降低到了小時級,甚至分鐘級。

通過三個應(yīng)用場景看技術(shù)落地

應(yīng)用場景一:代碼檢查

技術(shù)層

缺陷自動檢查:代碼缺陷模式庫融合華為優(yōu)秀代碼實(shí)踐與編程規(guī)范與業(yè)界通用的檢查規(guī)則,覆蓋常見的編碼風(fēng)格,架構(gòu),Web 安全等方面的問題。大規(guī)模分布式任務(wù)調(diào)度:基于并行智能任務(wù)調(diào)度算法,對檢查節(jié)點(diǎn)進(jìn)行自動彈性伸縮,檢查任務(wù)根據(jù)檢查規(guī)則類型智能分片和并行執(zhí)行,支持大規(guī)模代碼倉庫的代碼檢查。

業(yè)務(wù)層

代碼檢查任務(wù)由“代碼+ 檢查規(guī)則+ 檢查報表”構(gòu)成,即:檢查引擎從代碼倉庫(CodeHub )克隆代碼,從規(guī)則庫中獲取檢查規(guī)則,執(zhí)行生成檢查報表,保存到檢查任務(wù)實(shí)例對象

表現(xiàn)層

華為將20+ 年的軟件開發(fā)經(jīng)驗(yàn)薈萃出一套完整的代碼檢查機(jī)制,可在線進(jìn)行多種語言的代碼靜態(tài)檢查,代碼安全檢查,質(zhì)量評分,代碼缺陷改進(jìn)趨勢分析,輔助管控代碼質(zhì)量。

提供華為典型檢查規(guī)則集,支持web 檢查,安全檢查,架構(gòu)檢查,編碼問題檢查等場景。支持Java ,JavaScript ,CSS ,HTML ,C ++ 等語言檢查,持續(xù)增加語言支持廣度。精確定位缺陷,針對每個代碼缺陷,提供詳細(xì)的缺陷影響說明,正確示例,錯誤示例,修改建議。如果系統(tǒng)的檢查不滿足需求,SE 可通過定制規(guī)則集來實(shí)現(xiàn)挑選規(guī)則集;針對大量代碼缺陷,用戶可根據(jù)問題級別,問題分類,語言,文件目錄等進(jìn)行過濾,分級處理。

應(yīng)用場景二:自動化流水線

技術(shù)層

并行智能任務(wù)調(diào)度:實(shí)現(xiàn)智能任務(wù)調(diào)度算法,用戶根據(jù)任務(wù)特點(diǎn)自行編排并行/ 串行任務(wù),系統(tǒng)感知執(zhí)行器狀態(tài)和健康度,動態(tài)分配執(zhí)行器的任務(wù),故障節(jié)點(diǎn)任務(wù)實(shí)現(xiàn)自動轉(zhuǎn)移和熔斷,結(jié)合資源彈性伸縮策略,實(shí)現(xiàn)調(diào)度器和執(zhí)行器高可用和水平擴(kuò)展。資源彈性伸縮:使用華為企業(yè)云彈性擴(kuò)展服務(wù),感知到業(yè)務(wù)集群資源使用情況,資源利用率超過閥值時,動態(tài)擴(kuò)容;反之,自動縮容。流水線根據(jù)不同業(yè)務(wù)類型,配置不同的彈性伸縮策略和資源彈性伸縮組,從而實(shí)現(xiàn)短時間內(nèi)迅速提升流水線總體吞吐量。編譯構(gòu)建并行技術(shù):通過使用精準(zhǔn)增量編譯技術(shù),結(jié)合并行智能任務(wù)調(diào)度,可實(shí)現(xiàn)按技術(shù)棧,目錄等編譯策略增量并行編譯,加速編譯構(gòu)建的速度,大幅降低編譯構(gòu)建等待時間。

表現(xiàn)層

對于一切可以解放雙手的任務(wù)都會工具自動化實(shí)現(xiàn)。一鍵式完成代碼下載/ 代碼檢查/ 編譯構(gòu)造/ 系統(tǒng)部署/ 產(chǎn)品發(fā)布整個交付流程。任務(wù)并行執(zhí)行,按需動態(tài)分配資源,顯著提升資源利用效率及執(zhí)行效率??蓪?shí)現(xiàn)單模塊或者單獨(dú)子系統(tǒng)的個人級交付,也可實(shí)現(xiàn)多模塊,多子系統(tǒng)的版本級交付可隨時查看流水線執(zhí)行進(jìn)度/ 結(jié)果/ 報告/ 日志。

應(yīng)用場景三:部署環(huán)境標(biāo)準(zhǔn)化,部署過程自動化

技術(shù)層

部署編排技術(shù)

提供一定的服務(wù)編排能力,在playbooks 中可以編排有序的執(zhí)行過程,甚至于做到多組機(jī)器間,來回有序的執(zhí)行特別指定的步驟。并且可以同步或異步的發(fā)起任務(wù)。

用流水線同時集成編譯構(gòu)建,代碼檢查,部署,從代碼提交開始觸發(fā)操作,完成整個DevOps 的自動化流程。流水線支持編排部署任務(wù)之間的依賴和順序,通過串行任務(wù)和并行任務(wù)以及子流水線來組合,調(diào)度各個任務(wù),從而實(shí)現(xiàn)高效部署。

大規(guī)模部署技術(shù)

可能本身就支持多并發(fā)部署,缺省的并發(fā)任務(wù)數(shù)是5. 但是DevCloud 的部署采用python API 實(shí)現(xiàn),我們封裝了python 的任務(wù)以多線程方式運(yùn)行;同時采用了gunicorn 框架提供多進(jìn)程復(fù)用技術(shù),以最大限度的利用Ansibe 引擎的并行部署能力;對于超過200 以上并發(fā)的大規(guī)模部署,我們會采用橫向擴(kuò)展即增加AnsibleRest 的節(jié)點(diǎn)數(shù)來支持更多的并發(fā)部署; 此外,我們還提供部署任務(wù)排隊機(jī)制來保障峰值任務(wù)時系統(tǒng)仍然能夠正常運(yùn)行。

表現(xiàn)層

一鍵式自動化部署,部署機(jī)器無需安裝代理,過程可視化,支持主流編程語言和技術(shù)框架,支持并行部署和流水線無縫集成支持Web 應(yīng)用程序和微服務(wù)部署,支持Tomcat ,Java ,Python ,NodeJS ,Go ,PHP ,Ruby 語言。通過流水線定制交付流程,支持并行和串行任務(wù),系統(tǒng)自動執(zhí)行所有任務(wù),并可查看所有任務(wù)的執(zhí)行狀態(tài),日志及報告。提供高級編輯功能,滿足用戶更改部署參數(shù)和自定義執(zhí)行參數(shù)以在部署任務(wù)執(zhí)行時動態(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)隊規(guī)模在10-50 人的中小團(tuán)隊,如中小企業(yè)的軟件開發(fā)者,眾包開發(fā)團(tuán)隊,個人開發(fā)者,高校軟件/ 計算機(jī)類的大學(xué)生。

華為告訴InfoQ 使用華為軟件開發(fā)云的研發(fā)周期是1 天到兩周交付的彈性版本周期。其中:重大變更,新服務(wù)或大特性上線,多服務(wù)間聯(lián)調(diào)的需求會長達(dá)雙周交付;而服務(wù)內(nèi)新特性,體驗(yàn)優(yōu)化等開發(fā),獨(dú)立升級則會于1-3 天交付。

使用DevCloud 的用戶可以基于軟件開發(fā)云進(jìn)行應(yīng)用的開發(fā),測試,而把軟件自動化部署到華為企業(yè)云,也可以把軟件包下載到本地后部署到別家的公有云,混合云。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號