摘要:摘要在北京云棲大會上,阿里巴巴高級技術專家陳鑫花名神秀,給大家?guī)砹藘|背后的企業(yè)級高效持續(xù)交付,引起強烈共鳴。
摘要: 在2017北京云棲大會上,阿里巴巴高級技術專家陳鑫(花名神秀),給大家?guī)砹恕?682億背后的企業(yè)級高效持續(xù)交付》,引起強烈共鳴。神秀從技術負責人關心的研發(fā)流程混亂、質(zhì)量無法保障、環(huán)境管理低效、資源浪費等方面,結(jié)合阿里巴巴的DevOps實踐,深度解析了企業(yè)級持續(xù)交付如何做,企業(yè)如何高效協(xié)作,控制成本的精彩分享。
導讀:在2017北京云棲大會上,阿里巴巴高級技術專家陳鑫(花名神秀),給大家?guī)砹恕?682億背后的企業(yè)級高效持續(xù)交付》。神秀從技術負責人關心的研發(fā)流程混亂、質(zhì)量無法保障、環(huán)境管理低效、資源浪費等方面,結(jié)合阿里巴巴的DevOps實踐,深度解析了企業(yè)級持續(xù)交付如何做,企業(yè)如何高效協(xié)作,控制成本的精彩分享。
一、技術管理者的煩惱
開發(fā)工程師的日常
我們看下開發(fā)工程師每天都是如何工作的。老三樣總是逃不掉,寫代碼、測試、發(fā)布到線上。具體來看首先要拉分支,每個團隊一般都有自己的研發(fā)規(guī)范,團隊成員都需要遵守才能保障基本研發(fā)秩序。其次,我們會先在本地進行一些測試,編寫一些測試用例,測試通過后需要進行合并請求,最終經(jīng)過一個流程,逐級發(fā)布代碼到生產(chǎn)環(huán)境。
這老三樣說起來簡單,但正是我們研發(fā)效率需要提升的重要環(huán)節(jié),因為它們每天都在不停地被重復。甚至在不斷的反復踩坑。比如有重復的工作,有質(zhì)量問題,有環(huán)境問題,還有協(xié)作問題。在持續(xù)交付原則中有一項,就是如果這件事讓你痛苦,那就盡早且盡可能頻繁地去做。當然我們不能容忍各種坑,各種效率低下,那么就要想辦法去解決這些讓我們頭疼的問題。
技術管理者的煩惱
開發(fā)者日常的苦惱,必然也是技術管理者的煩惱??偨Y(jié)一下,一般會是這么幾個方面:
研發(fā)流程混亂。團隊有大量新人的時候,如何能確保每次代碼提交都不會出錯?跨團隊協(xié)作的時候,如何讓所有人對于流程理解都是一致的?如何能不用一個scm團隊來解決這個問題?其實我們的實踐中scm團隊也解決不了,如果沒有完善的工具支持,很難確保萬無一失。
質(zhì)量無法保障。測試用例覆蓋,規(guī)約掃描,安全檢查是否都能實打?qū)嵉谋U?,如何去促進代碼質(zhì)量逐步提高,而不是形成破窗效應后越來越差。
環(huán)境管理低效和資源浪費。這個一直是運維工程師的痛,尤其是測試環(huán)境。微服務化后,這個問題更加嚴重,服務之間互相依賴。管理復雜度和工作量成倍提升。還好我們有了容器化的救命稻草,但是仍然無法解決應用穩(wěn)定性問題。穩(wěn)定性不好直接導致開發(fā)工作互相block,最終拖慢我們整個團隊效率。
繁雜的開源工具。用一堆工具攢出來的流程能否一站式解決所有問題,并且有比較好的體驗?這要畫一個問號。
看到這些問題,我想大家不由自主的會想到云計算,容器化,DevOps等等新的名詞,那我們首先看看目前這幾個在業(yè)界的形勢如何。
持續(xù)交付與云計算
這是我從2016中國軟件開發(fā)者白皮書中摘錄的一些信息。首先看到的是企業(yè)上云成為趨勢,因為上云可以大大減少我們的it成本,不管是公共云還是私有云。目前來看私有云還是首選,最近3年從7%增長到27%,混合云是目前比較流行的玩法。
DevOps成為業(yè)界熱詞。DevOps給大家?guī)淼闹苯拥南敕ㄊ菍煞N角色合二為一,效率肯定有提高,因此可以看到86%的企業(yè)不同程度上使用了DevOps相關工具,大部分是Docker和Jenkins。不難理解,這兩個工具是目前最容易上手的。
最后是企業(yè)對開發(fā)工具和流程的認可,絕大部分企業(yè)都有嚴格的研發(fā)流程對開發(fā)工作進行規(guī)范,7成人群在其中受益,并且21%開發(fā)者希望公司能加大在這方面投資。這個數(shù)字挺有意思,可能表明還有3成的員工還在痛苦掙扎,等待救援。
持續(xù)交付與DevOps
看了以上我們管理者的痛點,回到正題,持續(xù)交付和DevOps,如何能使用這兩個理念來解決我們軟件生產(chǎn)中的問題?先看看兩者要解決的核心問題。
首先是持續(xù)交付,核心是需求小批量流轉(zhuǎn),配合自動化流水線,實現(xiàn)軟件短周期的頻繁交付。
DevOps的核心是什么?幾個關鍵詞:一種方法和文化,自動化、度量和分享,基礎設施即代碼。
在這里名詞解釋并不是我的重點,先撇去概念看本質(zhì),其實兩者都是在說效率與成本這兩個詞。如何做到效率最高,如何做到成本最低,就是我們研發(fā)平臺要解決的核心問題。
下面我會重點圍繞這兩個主題,來介紹阿里巴巴如何做到高效協(xié)作和成本控制。
二、高效協(xié)作&成本控制
研發(fā)模式全自動化
說起自動化我們就想到了流水線,但是僅僅是流水線還是不夠的,它僅僅解決的是發(fā)布過程自動化問題,并無法完全解決開發(fā)者的日常協(xié)作問題。比如什么時候拉分支,什么時候合并代碼,需要達到什么樣的標準,發(fā)布分支怎么處理,如何和流水線自動的結(jié)合起來。這些才是開發(fā)日常工作中最繁瑣,最容易出錯的事情。
如何將研發(fā)模式固化下來,并形成全集團的幾套規(guī)范,落地平臺?如何讓開發(fā)之間的協(xié)作都一鍵化,自動化?這是云效首先要解決的問題。
在我們的實踐中,將分支模式、自由模式、gitflow模式抽象到產(chǎn)品層面,穿插在流水線前中后,實現(xiàn)研發(fā)模式全自動化。真正的做到了研發(fā)過程全上平臺,所有數(shù)據(jù)可追蹤,并且徹底杜絕了漏發(fā)、錯合、管理混亂的情況。甚至開發(fā)只需要會checkout和push,其他的都交給平臺處理。
總結(jié)一下就是規(guī)范操作、高效協(xié)作、避免錯誤。分支模式和自由模式已經(jīng)在云效開放,其他模式和高級配置功能正在陸續(xù)開放中。
統(tǒng)一技術棧和運維棧
研發(fā)過程統(tǒng)一了,那么接下來要面對的就是技術棧和運維棧。我想絕大部分企業(yè)都不太喜歡自己的技術棧過于龐雜,這會給員工帶來很大的學習成本,比如阿里巴巴主要是Java,我們可以投入很大精力去做框架,去做JVM優(yōu)化,建設中間件,包括很多測試方案都會基于這個技術棧來做。運維棧更不用說,標準化才能帶來成本的節(jié)省和效率的提升。
阿里是從以下五個方面來保障技術棧和運維棧統(tǒng)一的。
首先我們有基于不同研發(fā)模式和流水線的視圖,根據(jù)不同的技術棧,在流水線視圖上也略有不同。打個比方:C類應用的發(fā)布比Java類的就略顯復雜,他們在依賴軟件包的更新和參數(shù)維護上略有差異,我們通過不同的流程組件來解決。
其次是代碼推薦,其中包括各種語言技術棧,最新的玩法和框架,讓我們平臺成為了新技術推廣的窗口。
運維模板會包含軟件包的模板,Dockerfile,環(huán)境規(guī)劃等等。我們會提供標準化推薦,各個BU技術負責人也可以在平臺上針對自己的部門進行定制和維護。所有這些都會在應用創(chuàng)建時確定,普通開發(fā)基本不需要介入和了解。
最后兩層可以歸納到基礎設施層面,統(tǒng)一的應用運維平臺,負責機器資源和相關軟件資源的分配。系統(tǒng)軟件幫我們解決虛擬化和運行環(huán)境問題。
這五個層次共同協(xié)作才能完整實現(xiàn)技術棧和運維棧的統(tǒng)一,而云效在阿里巴巴正是我們看到的paas和iaas層的對普通研發(fā)人員統(tǒng)一出口,并且負責將這些服務粘合起來。比如最新的發(fā)布技術、中間件隔離技術、灰度切流技術、測試技術等等。
全云化測試平臺
前面從研發(fā)、技術、運維角度講了如何幫助開發(fā)高效協(xié)作。下面會講兩個成本控制的例子。
首先是全云化測試平臺,阿里巴巴雖然技術棧大體統(tǒng)一,但是仍然避免不了各個BU在測試方面的創(chuàng)新,各種工具,各種平臺必然會導致一些重復建設和資源浪費。最近幾年我們開始建設全云化測試平臺,首先他要做的是將各種測試工具通過統(tǒng)一的標準接入進平臺,再通過統(tǒng)一的調(diào)度引擎為測試工作提供資源保障。當資源由我們來控制的時候,就可以創(chuàng)新出很多資源節(jié)省的策略,比如動態(tài)伸縮,資源池復用,離在線混布等等。目前我們每日的任務是已經(jīng)達到了10w+。
可以從這個圖中看出用戶的各種測試工具統(tǒng)一運行在我們的Test engine上,資源來自集團ECS和Docker池,并且在云效我們支持了企業(yè)自研自動化測試工具的接入,方便用戶將自己的測試方案在企業(yè)內(nèi)部推廣和落地。
測試環(huán)境隔離
下面我們看下測試環(huán)境,大家可別小看了線下測試所帶來的資源成本。在阿里目前線下測試物理機規(guī)模已經(jīng)達到數(shù)萬臺。隨著微服務化的推進,應用數(shù)量和依賴復雜度都被迅速放大,如何管理好測試環(huán)境和資源已經(jīng)變得非常棘手。
這里介紹下阿里的一個比較好的實踐經(jīng)驗:測試環(huán)境隔離。先看下這個圖,我們把日常工作環(huán)境分為三部分,第一個是開發(fā)機,調(diào)用請求的發(fā)起方,可能就是我的一個筆記本。第二是隔離環(huán)境,里面部署著我們需要聯(lián)調(diào)的應用A1、B1、C1。這三個應用正在實現(xiàn)我們一個要上線的需求。當然我的調(diào)用鏈路會很長,有更多的依賴方,自然我們需要一個基礎環(huán)境,這個環(huán)境里部署著我們所有的應用。
類似這種隔離設計,既保障了業(yè)務聯(lián)調(diào)又節(jié)省了大量機器資源,當然最關鍵是我們?nèi)绾螌崿F(xiàn)服務之間的調(diào)用隔離。在阿里內(nèi)部http統(tǒng)一接入、全鏈路追蹤和統(tǒng)一中間件技術,幫助我們實現(xiàn)了無業(yè)務侵入性的服務隔離,不需要額外的運維工作,只需要在系統(tǒng)上劃出相應的服務范圍,對于調(diào)入請求會自動進行染色操作,不管這個請求調(diào)用到哪里,不管是同步還是異步,最終都可以保證A、B、C服務在兩個環(huán)境中的互斥關系。
未來類似的環(huán)境規(guī)劃和服務隔離能力也會在云效開放??偨Y(jié)一下就是環(huán)境復用、一鍵申請、快上快下、無代碼侵入。
企業(yè)級持續(xù)交付
我們看下一個持續(xù)交付平臺如何才能做到真正的企業(yè)級。
第一個階段應用創(chuàng)建,元數(shù)據(jù)維護,代碼推薦,技術棧模板,流水線。第二是測試驗收,靜態(tài)掃描、代碼規(guī)約、安全測試等等。測試完成我們需要部署,就涉及到環(huán)境的標準化,企業(yè)統(tǒng)一的環(huán)境規(guī)劃,運維模板和云化的動態(tài)伸縮能力可以為我們大大節(jié)省成本。最終要發(fā)布前還需要管理審核、驗收卡點、發(fā)布窗口等等管控策略。最后上線過程一定需要分批滾動、過程監(jiān)控和快速回滾能力。
如此五大內(nèi)容基本可以滿足我們開發(fā)人員日常的研發(fā)活動,不斷地在這幾個過程中流轉(zhuǎn),實現(xiàn)最終持續(xù)交付目標。
三、阿里DevOps落地
應用為中心的DevOps理念
接下來我們回到DevOps這個熱詞上,和大家分享下阿里巴巴如何實現(xiàn)DevOps落地,從開發(fā)工程師角度怎么看待DevOps這個運動。
第一點我要提的是以應用為中心的DevOps理念。應用信息其實可以歸納為cmdb中的一種數(shù)據(jù),它對于研發(fā)人員天然是親切的,它可以直接對應一個服務,一個代碼庫。從代碼為起點,又可以串聯(lián)流水線、環(huán)境、測試和資源,最外圍工具鏈監(jiān)控、db、運維、中間件等等。
用應用串聯(lián)整個工具鏈,可以讓開發(fā)順理成章的理解和打通DevOps整體過程。不會存在開發(fā)說代碼,說服務,運維說機器,說機房這種雞同鴨講的情況出現(xiàn)。
當工具通過應用打通后,開發(fā)就可以順理成章的在平臺上定義它的應用,同時也是在定義運維。比如我可以規(guī)劃環(huán)境,創(chuàng)建資源,設置發(fā)布策略等等。
完成定義后,誰定義就要誰負責,因此在阿里,開發(fā)需要為應用全生命周期負責,也就是我們看到的這整個大圈。通過類似理念和運維自動化工具化的推進,dev潛移默化的接手了ops的工作,會發(fā)現(xiàn)原來這些東西并沒有那么復雜。
應用生命周期自助管理
下面我們看一個實際的例子,這是我們一個應用上線過程,信息初始化,代碼推薦,配置設置,資源申請,step by step完成。
不論是測試環(huán)境還是生產(chǎn)環(huán)境,不管是技術棧還是運維棧,全部由開發(fā)工程師來定義。在全過程中只需要一次審核操作,分鐘級即可完成應用注冊和發(fā)布。
說到全生命周期管理,我們在應用上線后,還會配合度量系統(tǒng),評估應用健康狀況和資源使用情況,對長尾應用進行及時清理和資源調(diào)整。
容器化助力DevOps落地
再來看容器化。阿里巴巴從2016年雙11前開始大規(guī)模推廣容器化技術,到今年雙11已經(jīng)完成了幾乎所有活躍應用的容器化,這是一個非常驚人的技術革命。為什么我們要這么大力氣去推動改變,容器化對DevOps又有何幫助?
大家可以看這個圖,左側(cè)是在容器化前,我們要做的事情和所需要的角色。軟件包管理、基線變更、運維腳本的修改、資源申請、擴縮容等等,哪個工作離不開運維工程師。這些事情門檻高,手工程度大,變更方式復雜,最終導致兩個角色協(xié)作效率低下。
右側(cè)是我們?nèi)萜骰蟮那闆r,原先軟件包管理、基線變更、運維腳本統(tǒng)統(tǒng)交給了dockerfile來解決。在代碼庫里管理,并通過流水線實現(xiàn)變更,大大簡化了變更復雜度。另一部分比如日志清理,巡檢類的運維腳本我們通過全網(wǎng)命令通道插件化的承載在ops工具上,負責同學轉(zhuǎn)型為工具開發(fā)來維護插件的可靠性。
其他資源類的事情統(tǒng)一由容器調(diào)度解決,其中包括統(tǒng)一調(diào)度開發(fā),規(guī)?;\維相關算法開發(fā)等等,通過人工智能,通用性的解決資源利用率問題,比如2017年雙11落地的離在線混布技術。
通過容器化,我們實現(xiàn)了環(huán)境標準化,運維服務的下沉,智能化的解決了效率和成本問題。因此可以說通過容器化改造,DevOps理念真正在阿里落地。
松管控和強卡點
最后還有一個比較關鍵的點,當開發(fā)開始定義運維,接手運維的時候,我們管理者會不會有些擔憂,比如會不會開發(fā)任意操作導致線上故障,隨意發(fā)布導致穩(wěn)定性問題等等。
在阿里我們建設平臺的核心理念是松管控和強卡點。先看松在哪里?松在我們有多種流水線可以供開發(fā)選擇,應用owner可以完整定義這個應用的各種規(guī)則,比如如何發(fā)布,如何測試,資源、環(huán)境配置如何。我們有通用構建和自定義構建給用戶最大自由度,最后我們是輕發(fā)布,重恢復。在每一個應用維度,開發(fā)可以隨時使用流水線來交付代碼,而并不需要特別的限制,僅僅需要思考的是如果出問題,我們應該如何快速恢復。
在足夠的自由度下我們還有一些卡點可供選擇,比如代碼審核和質(zhì)量紅線,規(guī)約檢查,發(fā)布窗口,和前后端聯(lián)動。這些卡點是為了保障集團所有開發(fā)工程師步調(diào)統(tǒng)一,交付合格的產(chǎn)品。
持續(xù)交付核心是快速交付價值,給與開發(fā)最大自由度,負責開發(fā)和運維全部過程。在監(jiān)控、故障防控工具,功能開關的配合下,可以在保障用戶體驗和快速交付價值之間找到平衡點。
四、云效實踐
上手云效最佳路徑
最后我們看看如何通過云效提高研發(fā)效能。首先可以通過首頁的快速開始完成創(chuàng)建產(chǎn)品空間,創(chuàng)建代碼庫,選擇我們的研發(fā)模式,創(chuàng)建應用,也就是剛我們所說的非常重要的基礎元數(shù)據(jù)。然后配置構建、機器、部署規(guī)則,并通過流水線完成交付。
云效會提供一些模板和測試機器,幫助我們快速上手。
使用持續(xù)交付流水線
大家現(xiàn)在看到的是我們系統(tǒng)一個流水線的視圖,根據(jù)不同的研發(fā)模式,視圖會略有不同。云效根據(jù)現(xiàn)代企業(yè)軟件研發(fā)特點,自主研發(fā)了全新的流水線。不同的團隊,比如研發(fā)、測試、運維都可以在不同的stage上工作,并且互不干擾。而且有多種觸發(fā)機制可供選擇,阿里優(yōu)秀的組件還在陸續(xù)開放中。
無侵入的構建加速
再來看下構建,云效完全自研的全云化構建調(diào)度系統(tǒng),擁有經(jīng)過阿里云安全團隊認可的安全加固機制。并且根據(jù)不同技術棧提供了自適應的構建緩存策略,避免依賴的重復下載,大大節(jié)約構建時間,提高開發(fā)過程效率。開發(fā)在使用云效只需要選擇他的技術棧和構建命令,其他都可以交給平臺自動化完成。
全網(wǎng)部署能力
再看下部署能力,不管是公共云,還是專有云,還是其他云主機,云效都可以接入并執(zhí)行部署。他是基于阿里內(nèi)部的agent的技術,安全高效,此技術已經(jīng)在阿里巴巴全網(wǎng)部署并且經(jīng)過多年改進。
如下圖所示,不管是采購云效公共云還是專有云,我們的主機都無需暴露公網(wǎng)就可直接接入,可選擇通過internet或者專線對不同的云進行互聯(lián),對開發(fā)人員屏蔽底層機器資源細節(jié),提高自動化程度和工作效率。
Docker、EDAS、ECS任意切換
云效目前支持Docker、Edas、Ecs三種部署方式,對每個應用的每個環(huán)境都可多帶帶定義它的部署方式,并且實現(xiàn)任意切換,方便快捷。比如我們生產(chǎn)環(huán)境使用edas保障穩(wěn)定,測試環(huán)境使用ecs混合部署節(jié)省資源都是可以實現(xiàn)的,非常方便。
在我們做運維棧轉(zhuǎn)型升級的時候,可以通過修改部署配置進行平滑升級,如果有問題,我們還可以實現(xiàn)一鍵回滾。云效保存著歷史所有軟件發(fā)布升級的基線數(shù)據(jù)隨時可查,隨時可rollback,這些都是阿里巴巴內(nèi)部多年積累的實踐經(jīng)驗。
作者介紹
陳鑫(花名神秀),阿里巴巴高級技術專家,負責阿里集團持續(xù)交付平臺和研發(fā)工具建設,致力于企業(yè)研發(fā)效率、產(chǎn)品質(zhì)量、DevOps方向研究和探索。在阿里6年帶領過大數(shù)據(jù)測試團隊、測試工具研發(fā)團隊、持續(xù)交付平臺團隊。對研發(fā)協(xié)同、測試、交付、運維領域都有很深的見解。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/8022.html
摘要:由此看出,云計算市場的競爭格局還未完全確定。尤其在現(xiàn)階段,企業(yè)級業(yè)務進入需求爆發(fā)期,能快速抓住企業(yè)上云核心需求的大型云計算廠商更有可能快速搶占市場份額,實現(xiàn)彎道超車。近年來,在企業(yè)數(shù)字化轉(zhuǎn)型的熱潮下,我國云計算發(fā)展正式迎來需求爆發(fā)期。隨著云計算的應用普及,越來越多的企業(yè)開始擁抱云計算服務,云計算或?qū)⒂?019年全面殺入企業(yè)級市場。中國云計算市場規(guī)模和集中度增加,但市場競爭格局仍未確定據(jù)億歐智...
摘要:關于認證考試手冊發(fā)布之際,阿里巴巴開發(fā)規(guī)范認證考試也同步上線,通過在線考試,檢測你對手冊中開發(fā)規(guī)范的掌握程度,并發(fā)放官方認證證書。認證考試致謝阿里巴巴開發(fā)規(guī)范能夠成冊,離不開集團內(nèi)移動開發(fā)工程師的大力支持,在此感謝大家的無私奉獻和付出。 春節(jié)余味尚未消,我們?yōu)橐苿娱_發(fā)者準備了一份遲到的新年禮物——《阿里巴巴Android開發(fā)手冊》,繼《阿里巴巴Java開發(fā)手冊》之后,阿里巴巴開發(fā)規(guī)范家...
摘要:在新華三集團領航者峰會上,紫光云戰(zhàn)略正式對外公布紫光集團將投資億元進軍公有云市場。紫光云公司將承擔紫光公有云整體的責任和使命。進軍公有云正當時對于紫光宣布進軍公有云,業(yè)內(nèi)曾一片嘩然。在此次領航者峰會上,紫光集團還正式發(fā)布了新城市運營平臺。在新華三集團2018 Navigate 領航者峰會上,紫光云戰(zhàn)略正式對外公布:紫光集團將投資120億元進軍公有云市場。在已經(jīng)頗顯擁擠且競爭激烈的公有云市場上...
摘要:企業(yè)級業(yè)務聯(lián)想的機會還有多大年初,當時的全球市場老大惠普公司在中國臺灣打出了一則廣告聯(lián)想,連想都不要想,這一廣告語隨后引發(fā)軒然大波,并以惠普公司發(fā)出正式致歉信而告終。幾天前,一篇題為《假如帝國的黃昏降臨》的文章刷了屏,文中引述了橋水基金創(chuàng)始人Ray Dalio在新書《債務危機》中的一句話讓人印象深刻:很多人認為過去發(fā)生在不同年代,不同國家的經(jīng)濟危機都是由不同的原因造成的,而我只看到了同樣一些...
閱讀 2514·2021-09-09 09:33
閱讀 2876·2019-08-30 15:56
閱讀 3159·2019-08-30 14:21
閱讀 911·2019-08-30 13:01
閱讀 874·2019-08-26 18:27
閱讀 3594·2019-08-26 13:47
閱讀 3465·2019-08-26 10:26
閱讀 1597·2019-08-23 18:38