發(fā)布時(shí)間:2022-02-15
欄目:電商資訊
本文來源:阿里技術(shù)
今天是9月10日,在此對(duì)所有老師道一聲——教師節(jié)快樂!
今天向大家介紹的課程,是阿里技術(shù)童鞋的必修課,講解的是在阿里如何進(jìn)行軟件開發(fā),進(jìn)而集成和交付上線。你可以借此了解業(yè)界熟悉的持續(xù)交付、DevOps等理念在阿里是如何落地的,同時(shí)也能看到一些阿里獨(dú)特的工作方式。
從源碼到上線
事情可不簡(jiǎn)單
什么叫程序?或者說,什么叫軟件?這里面似乎有歧義。有時(shí)候指的是源代碼,有時(shí)候指的是安裝包或者安裝光盤,比如“我下載了一個(gè)軟件”。有時(shí)指的是已經(jīng)安裝好隨時(shí)可以運(yùn)行的程序,比如“手機(jī)上新裝了一個(gè)應(yīng)用”。還有的時(shí)候指的是正在運(yùn)行中的,正在提供服務(wù)的程序,比如一個(gè)網(wǎng)站。
這些不同的含義反映了一件事:?jiǎn)渭兊脑创a,還不能提供服務(wù),不能為用戶帶來價(jià)值。只有源代碼被構(gòu)建打包,并且被部署運(yùn)行起來,才能為用戶帶來價(jià)值。
那么,如何才能部署運(yùn)行起來,為用戶提供服務(wù)呢?這很麻煩嗎?——是的,這很麻煩。
想象一下,假如你是一個(gè)初創(chuàng)企業(yè)的CTO。天上忽然掉餡兒餅,掉下來五個(gè)Git庫,源代碼已經(jīng)寫好,而且一點(diǎn)兒毛病都沒有。每個(gè)Git庫能編譯成一個(gè)war包。你需要把每個(gè)war包部署到100臺(tái)服務(wù)器上,總共需要500臺(tái)服務(wù)器。另外,隨著用戶的使用,會(huì)不斷追加新功能,產(chǎn)生新版本,需要更新服務(wù)器上的軟件版本。
假定你不是在阿里巴巴,假定也沒有阿里云,假定你只是有很多錢可以雇到合適的人,你想想一共有多少事情要做?
先要買或者租機(jī)房,再買服務(wù)器,風(fēng)火水電都要搞穩(wěn)妥。更要接好網(wǎng)絡(luò),每臺(tái)機(jī)器要裝好操作系統(tǒng)的合適版本。不止是操作系統(tǒng),還有相關(guān)基礎(chǔ)軟件、路由、數(shù)據(jù)庫、監(jiān)控系統(tǒng)、日志收集系統(tǒng)以及中間件等都是必須的。哦,域名還忘了申請(qǐng)了……
這些搞定之后,才能安裝那些war包。這么多臺(tái),肯定不能一臺(tái)一臺(tái)操作,累死了,得有個(gè)批量操作的方法。可這方法怎么弄呢?另外,考慮到將來要更新軟件版本,所以這還不是一次能搞定的事情,那更是得批量操作了。更新版本的時(shí)候,還有個(gè)麻煩事,不能一下子都停機(jī)啊,那不就要出事故了。所以得分批來。比如,先更新20%的機(jī)器,再更新20%,如此一共五批弄完。
往細(xì)節(jié)看,其中更新某一臺(tái)機(jī)器,其實(shí)都是個(gè)挺復(fù)雜的過程。首先下載新的war包到這臺(tái)機(jī)器,然后開始替換過程。先得把流量切走,切流量前,還得先把監(jiān)控報(bào)警關(guān)上。流量切走了,就可以停止當(dāng)前war包的運(yùn)行。然后用新的war包代替舊的war包,啟動(dòng)試試看。假如通過了一些基本的自動(dòng)檢測(cè),說明新war包大體上能運(yùn)行,于是就開始切流量回來,很后把監(jiān)控報(bào)警恢復(fù)。
忒麻煩!!
還好有工具幫忙
怎么辦?——用趁手的工具啊!正是為了提高大家的工作效率,讓大家能夠集中精力在具體業(yè)務(wù)本身的研發(fā)上,阿里巴巴集團(tuán)多年以來建設(shè)了一整套基礎(chǔ)設(shè)施。
在交付層和運(yùn)維層,都有大量的基礎(chǔ)設(shè)施。但這些,大家可能感受不深。對(duì)于一個(gè)應(yīng)用來講,它很關(guān)心的事情,基本都是通過Aone暴露出來的。Aone也就是很上層研發(fā)層的主要工具。
注:本文提及的阿里內(nèi)部產(chǎn)品叫Aone,Aone于2021年正式對(duì)外開放,更名為云效。
回到前面討論的場(chǎng)景,把完美的源代碼發(fā)布上線這個(gè)過程,那么大體步驟應(yīng)該是:
第一步,把運(yùn)行環(huán)境初始化好。這一步目前同學(xué)們基本可以在Aone上一站式完成了,就是在Aone上注冊(cè)一個(gè)新應(yīng)用,然后根據(jù)向?qū)е敢焉暇€任務(wù)一項(xiàng)一項(xiàng)配下來。當(dāng)然還有些內(nèi)容比如數(shù)據(jù)庫還需要訪問其他系統(tǒng)申請(qǐng)配置,將來我們努力做成一站式配置好。
第二步,根據(jù)源碼構(gòu)建出壓縮包(基本就是把war包壓縮一下),然后把壓縮包部署到各目標(biāo)服務(wù)器上。這一步,可以在Aone上一鍵完成。將來更新版本也一樣。點(diǎn)一下按鈕,所有事情都做完。這就是用Aone的好處。
阿里巴巴相關(guān)術(shù)語
為了使用Aone,我們得了解一些Aone的 關(guān)鍵概念。其實(shí)是在阿里巴巴開發(fā)時(shí),大家一開始約定俗成的概念,后來固化在Aone上。我們一個(gè)一個(gè)來看:
應(yīng)用:Git庫里裝的是源代碼,這是程序的一種形態(tài)。那么運(yùn)行中的程序叫什么呢?在阿里巴巴,我們管它叫“應(yīng)用”。一般來說,一個(gè)Git庫,構(gòu)建生成一個(gè)包,產(chǎn)生一個(gè)應(yīng)用,在若干臺(tái)服務(wù)器/虛擬機(jī)/容器中運(yùn)行,在測(cè)試、線上環(huán)境中運(yùn)行。一般應(yīng)用跟Git庫是一比一的關(guān)系,不過也有各種尤其情況,比如一個(gè)Git庫里有多個(gè)應(yīng)用。所以,我們確實(shí)需要應(yīng)用這個(gè)概念。另外,應(yīng)用不僅包括了應(yīng)用主包(通常是war包打成tgz包),也包括了運(yùn)行所需環(huán)境的配置,比如tomcat版本等。
二方包:三方包,指的是來自阿里巴巴外部的,開源或商業(yè)的包,比如jar包、rpm包等。而二方包,則是指來自阿里巴巴內(nèi)部的,通常是其他團(tuán)隊(duì)的包。也就是說,一個(gè)團(tuán)隊(duì)研發(fā)出這個(gè)二方包,公布出來,供各團(tuán)隊(duì)使用。當(dāng)然,也可能就是供團(tuán)隊(duì)自己使用。反正,只要是來自阿里內(nèi)部的,上傳到Nexus或Yum這樣的包的倉庫的,就都算二方包。
產(chǎn)品/產(chǎn)品線/產(chǎn)品樹:應(yīng)用是從部署運(yùn)維的角度看運(yùn)行中的程序。產(chǎn)品是從使用者的角度看運(yùn)行中的程序。通常產(chǎn)品由一到多個(gè)應(yīng)用組成。產(chǎn)品進(jìn)而構(gòu)成產(chǎn)品線,這樣一級(jí)一級(jí)地上去,形成了一棵樹,叫產(chǎn)品樹。產(chǎn)品樹的根節(jié)點(diǎn),就是阿里巴巴。產(chǎn)品樹的第一級(jí)展開,是各個(gè)BU。
變更:在外面的世界,現(xiàn)在變更通常是指線上運(yùn)行環(huán)境的變化,比如更新了軟件版本,比如擴(kuò)容、縮容等運(yùn)維操作。在阿里巴巴,變更也有這個(gè)含義。但是在阿里巴巴,變更還有一個(gè)含義,軟件研發(fā)過程中的含義。通常我們把一條feature分支就對(duì)應(yīng)到一個(gè)變更。于是也常管這條feature分支叫變更分支。從這個(gè)角度看集成,就是把若干變更攢到一起,通過各種質(zhì)量檢測(cè)后,部署上線。
發(fā)布:發(fā)布,release,這個(gè)詞經(jīng)常是指軟件版本公布出來供使用。但在阿里巴巴,這個(gè)詞不僅對(duì)應(yīng)于部署到線上環(huán)境,即使是部署到測(cè)試環(huán)境,也叫發(fā)布。換句話說,發(fā)布基本上就是部署的代名詞。比如每個(gè)變更覺得自己OK了,就點(diǎn)一下變更詳情頁面上的“提交待發(fā)布”這個(gè)鈕,標(biāo)記一下。然后,在集成測(cè)試環(huán)境(也就是日常環(huán)境)對(duì)應(yīng)的流程階段的詳情頁面,就能看見這個(gè)變更。再選中它,然后點(diǎn)擊“提交發(fā)布”這個(gè)鈕,就與其他變更分支一起合并到發(fā)布分支,并部署到測(cè)試環(huán)境啦。

技術(shù)發(fā)展趨勢(shì)
發(fā)布部署方面,在阿里巴巴,時(shí)下很重要的變革當(dāng)然是Docker化。
那么這一波浪潮之后,下一波浪潮會(huì)是什么呢?有可能是Serverless架構(gòu)。這方面的文章也很多,大家可以翻翻看。
提高質(zhì)量的多種方法
剛才我們給的是一個(gè)天上掉餡兒餅的例子,忽然間得到了完美的源代碼,然后考慮構(gòu)建并部署上線。現(xiàn)實(shí)世界中哪兒有這樣的好事兒啊。代碼里面肯定有bug。那么,怎么能夠有效率地把問題找出來,繼而修復(fù)好?具體有哪些方法?
按四個(gè)象限梳理
為方便梳理,我們劃一個(gè)橫軸,一個(gè)縱軸,然后按照得到的四個(gè)象限,梳理各種質(zhì)量保證方法。這里所說的橫軸,在很左邊,是源代碼。在很右邊,是運(yùn)行中的程序。這里所說的縱軸,在很上邊,是自動(dòng)化,在很下邊,是人工。
先看左半部分。左下角,人工的對(duì)源代碼的檢測(cè)。這主要對(duì)應(yīng)的是代碼評(píng)審。我們?cè)诖a服務(wù)這門課上介紹的。此外,安全評(píng)審有時(shí)也有人工介入。
左上角,自動(dòng)對(duì)源代碼的檢測(cè)。代碼規(guī)約的自動(dòng)檢查工具,就落在這里。事實(shí)上,還有不少工具也落在這里,論品牌,有Sonar、PMD等。論方法,有圈復(fù)雜度等。所有這些自動(dòng)檢測(cè),被稱之為Staticprogramanalysis或Staticcodeanalysis,靜態(tài)程序分析/靜態(tài)代碼分析。
這方面,在阿里巴巴有工具支持,對(duì)應(yīng)的是Aone的實(shí)驗(yàn)室這個(gè)功能。可以通過實(shí)驗(yàn)室,接入各種靜態(tài)程序分析工具和方法。實(shí)驗(yàn)室的前身是CISE。現(xiàn)在CISE也仍然是實(shí)驗(yàn)室背后的引擎。所以有時(shí)候聽別人說CISE的時(shí)候,你就知道其實(shí)指的就是實(shí)驗(yàn)室啦。
再來看右半部分。右上角,是自動(dòng)的對(duì)運(yùn)行中的程序的檢測(cè)。這也就是常說的自動(dòng)測(cè)試?yán)病T诎⒗锇桶停彩侵饕葾one的實(shí)驗(yàn)室來向大家提供相應(yīng)服務(wù)。這包括單元測(cè)試/集成測(cè)試;接口測(cè)試/WebUI測(cè)試;功能測(cè)試/性能測(cè)試,等等。
右下角,是人工測(cè)試。雖說是人工測(cè)試,工具也同樣可以提供支持,主要是治理測(cè)試用例。相應(yīng)的工具是Aone中的測(cè)試用例治理。
測(cè)試環(huán)境隔離技術(shù)
不論是自動(dòng)測(cè)試還是人工測(cè)試,只要是需要先把應(yīng)用部署到測(cè)試環(huán)境,那就跟測(cè)試環(huán)境的治理有關(guān)系了。測(cè)試環(huán)境的治理,我們專門講一講測(cè)試環(huán)境隔離技術(shù)。
想象一下,你開發(fā)了一個(gè)feature,也就是一個(gè)變更。為了讓它比較靠譜再送去集成,你需要對(duì)它進(jìn)行測(cè)試。單元測(cè)試當(dāng)然好,但這是不夠的。需要盡可能模擬真實(shí)環(huán)境進(jìn)行測(cè)試。那么問題來了,如何盡可能模擬真實(shí)環(huán)境?比如,為每個(gè)淘系的工程師另搭一個(gè)淘寶測(cè)試用?這費(fèi)用咱真花不起……
怎么解決這個(gè)問題?阿里巴巴用了一個(gè)聰明的方法,測(cè)試環(huán)境隔離。讓大家共享一個(gè)測(cè)試環(huán)境,但又仿佛每個(gè)人都是獨(dú)占它的,互相不干擾。
具體說來,假定搭起一套測(cè)試環(huán)境,需要1000臺(tái)機(jī)器,分別運(yùn)行應(yīng)用ABCDE……。這個(gè)環(huán)境我們稱作日常測(cè)試環(huán)境。每個(gè)應(yīng)用的版本,我們姑且稱之為A0、B0、C0、D0、E0……
現(xiàn)在假定甲這名同學(xué)在開發(fā)A這個(gè)應(yīng)用的一個(gè)變更,在開發(fā)過程中,現(xiàn)在產(chǎn)生的應(yīng)用版本是A1。于是把A1部署到單獨(dú)一臺(tái)機(jī)器上,并用一些神奇的技術(shù)(通過中間件等)與剛才說的日常測(cè)試環(huán)境連通。于是,在甲這名同學(xué)看來,他所面對(duì)的系統(tǒng)是A1、B0、C0、D0、E0……而且仿佛他獨(dú)占了這個(gè)系統(tǒng)。
類似地,假如乙這名同學(xué)為了一個(gè)feature,在開發(fā)A和B分別拉出變更分支,產(chǎn)生A2、B2。那么A2、B2將分別被部署到單獨(dú)的機(jī)器上,然后它們一起與日常測(cè)試環(huán)境連通。于是,在乙這名同學(xué)看來,他所面對(duì)的系統(tǒng)是A2、B2、C0、D0、E0……從乙的角度看,他仿佛獨(dú)占了整個(gè)測(cè)試系統(tǒng)。甲和乙在測(cè)試時(shí),不會(huì)互相干擾。
有了這樣的解決方案,就同時(shí)達(dá)到了兩個(gè)目標(biāo):盡量模擬真實(shí)的環(huán)境;用不高的代價(jià)。
關(guān)于測(cè)試環(huán)境隔離技術(shù),這里只是簡(jiǎn)單介紹下原理。
阿里巴巴相關(guān)術(shù)語
項(xiàng)目環(huán)境:就是前面說的,測(cè)試一個(gè)feature所需的測(cè)試環(huán)境。可能對(duì)應(yīng)一個(gè)應(yīng)用上的一個(gè)變更,也有可能對(duì)應(yīng)多個(gè)應(yīng)用。項(xiàng)目環(huán)境使用了上面講的測(cè)試環(huán)境隔離技術(shù),背后接的一整套測(cè)試環(huán)境,是日常環(huán)境。
日常環(huán)境:就是集成測(cè)試環(huán)境。把各個(gè)變更攢在一起,然后部署到這里,看是不是能work。
預(yù)發(fā)環(huán)境:這個(gè)環(huán)境比日常環(huán)境更接近真實(shí)環(huán)境。事實(shí)上,從網(wǎng)絡(luò)隔離的角度,它不是在測(cè)試網(wǎng),而是在生產(chǎn)網(wǎng)。它所連接的數(shù)據(jù)庫,也通常就是線上運(yùn)行使用的數(shù)據(jù)庫。一般來說,是先在日常環(huán)境測(cè)試,通過了再到預(yù)發(fā)環(huán)境測(cè)一下。
正式環(huán)境:正式環(huán)境就是生產(chǎn)運(yùn)行的真實(shí)環(huán)境,向廣大用戶提供服務(wù)。
流水線
所謂流水線,通俗地講就是把不同的工作按一定順序串起來。為什么要串起來呢?
首先,有些工作天生就是有先后順序的。假如想部署,總得先構(gòu)建吧。所以構(gòu)建-部署,就是天然的工作順序。假如每次都是先點(diǎn)個(gè)按鈕做構(gòu)建,等構(gòu)建結(jié)束后再點(diǎn)個(gè)按鈕做部署,似乎有點(diǎn)兒笨,不如點(diǎn)一個(gè)按鈕,把這兩件事按順序都做了。
其次,為保證質(zhì)量,我們想往流程里面加規(guī)則和卡點(diǎn)。比如,必須通過代碼評(píng)審和安全評(píng)審,才答應(yīng)合并代碼。這些質(zhì)量保證性的工作,還有可能有不同的順序和頻率。典型的單元測(cè)試和靜態(tài)程序分析應(yīng)該早做,頻繁地做。而整個(gè)鏈路的測(cè)試,比較費(fèi)勁,頻率可以相對(duì)低些。因此,這些工作也是流水線中的環(huán)節(jié),并且可能以不同頻率執(zhí)行。不同頻率這個(gè)事兒,就是持續(xù)交付這個(gè)流行詞兒中所說的不同stage(階段)不同頻率。
Aone提供了把不同的工作串接的能力,也就是流水線的能力。在分支模式下,每個(gè)環(huán)境,比如日常、預(yù)發(fā)、正式,分別對(duì)應(yīng)一條流水線。在GitFlow和自由模式下,你甚至可以把所有工作內(nèi)容,從代碼提交到很后正式發(fā)布,做到一個(gè)流水線里。看著代碼過一道道“關(guān)口”,然后發(fā)布上線,還是很爽的。
結(jié)語
以上,概要地介紹了從源代碼到上線的基本的構(gòu)建部署過程,講解了各種質(zhì)量保證方法及其工具支持,講解了流水線把流程作業(yè)連接起來自動(dòng)運(yùn)轉(zhuǎn)。這些能力合在一起,就實(shí)現(xiàn)了對(duì)持續(xù)交付的一整套工具支持方案。當(dāng)然,假如你問DevOps的工具支持方案,我也會(huì)說,以上幾部分,構(gòu)成了DevOps的工具支持方案……名字是次要的, 關(guān)鍵是幫上廣大研發(fā)同學(xué)的忙,高效且穩(wěn)妥的開發(fā)和發(fā)布。
我有茶,你有故事嗎?
三尺講臺(tái),三寸舌,三寸筆,三千桃李;十年樹木,十載風(fēng),十載雨,十萬棟梁。感謝生命中出現(xiàn)的每一位師者,是你們教會(huì)了我們成長和愛。
在你技術(shù)成長道路上,哪一位老師很難忘?
在留言區(qū),分享關(guān)于你與老師的故事。
版權(quán)聲明:文章及圖片均來自阿里技術(shù),如侵權(quán),請(qǐng)聯(lián)系刪除。
上一篇:如何解決淘寶新店沒有流量銷量
文章地址:http://www.meyanliao.com/article/online/9770.html

- 1互聯(lián)網(wǎng)對(duì)傳統(tǒng)企業(yè)的沖擊有多大
- 2美團(tuán)再因不正當(dāng)競(jìng)爭(zhēng)敗訴新反法互聯(lián)網(wǎng)專條首次適用外賣領(lǐng)域!
- 32021互聯(lián)網(wǎng)十件大事對(duì)不起賈躍亭你只能排第四
- 4互聯(lián)網(wǎng)宣傳做的就是用戶體驗(yàn)
- 5互聯(lián)網(wǎng)創(chuàng)業(yè)到底需要怎樣的能力
- 6適合上班族的25個(gè)副業(yè)(適合上班族的互聯(lián)網(wǎng)副業(yè))
- 7互聯(lián)網(wǎng)的世界沒有永遠(yuǎn)的敵人只有永遠(yuǎn)的利益
- 8押?jiǎn)h進(jìn)駐天線貓助力互聯(lián)網(wǎng)數(shù)碼產(chǎn)品寄存行業(yè)經(jīng)濟(jì)持續(xù)發(fā)展
- 9互聯(lián)網(wǎng)公司如何做好品牌定位
- 102021年互聯(lián)網(wǎng)金融發(fā)展回顧冬去春欲來改弦當(dāng)更張