返回頂部
關(guān)閉軟件導航
位置:首頁 > 資訊 > 電商資訊>阿里技術(shù)人的第一節(jié)課都上些什么
阿里技術(shù)人的第一節(jié)課都上些什么

本文來源:阿里技術(shù)

今天是9月10日,在此對所有老師道一聲——教師節(jié)快樂!

今天向大家介紹的課程,是阿里技術(shù)童鞋的必修課,講解的是在阿里如何進行軟件開發(fā),進而集成和交付上線。你可以借此了解業(yè)界熟悉的持續(xù)交付、DevOps等理念在阿里是如何落地的,同時也能看到一些阿里獨特的工作方式。

從源碼到上線

事情可不簡單

什么叫程序?或者說,什么叫軟件?這里面似乎有歧義。有時候指的是源代碼,有時候指的是安裝包或者安裝光盤,比如“我下載了一個軟件”。有時指的是已經(jīng)安裝好隨時可以運行的程序,比如“手機上新裝了一個應用”。還有的時候指的是正在運行中的,正在提供服務的程序,比如一個網(wǎng)站。

這些不同的含義反映了一件事:單純的源代碼,還不能提供服務,不能為用戶帶來價值。只有源代碼被構(gòu)建打包,并且被部署運行起來,才能為用戶帶來價值。

那么,如何才能部署運行起來,為用戶提供服務呢?這很麻煩嗎?——是的,這很麻煩。

想象一下,假如你是一個初創(chuàng)企業(yè)的CTO。天上忽然掉餡兒餅,掉下來五個Git庫,源代碼已經(jīng)寫好,而且一點兒毛病都沒有。每個Git庫能編譯成一個war包。你需要把每個war包部署到100臺服務器上,總共需要500臺服務器。另外,隨著用戶的使用,會不斷追加新功能,產(chǎn)生新版本,需要更新服務器上的軟件版本。

假定你不是在阿里巴巴,假定也沒有阿里云,假定你只是有很多錢可以雇到合適的人,你想想一共有多少事情要做?

先要買或者租機房,再買服務器,風火水電都要搞穩(wěn)妥。更要接好網(wǎng)絡(luò),每臺機器要裝好操作系統(tǒng)的合適版本。不止是操作系統(tǒng),還有相關(guān)基礎(chǔ)軟件、路由、數(shù)據(jù)庫、監(jiān)控系統(tǒng)、日志收集系統(tǒng)以及中間件等都是必須的。哦,域名還忘了申請了……

這些搞定之后,才能安裝那些war包。這么多臺,肯定不能一臺一臺操作,累死了,得有個批量操作的方法。可這方法怎么弄呢?另外,考慮到將來要更新軟件版本,所以這還不是一次能搞定的事情,那更是得批量操作了。更新版本的時候,還有個麻煩事,不能一下子都停機啊,那不就要出事故了。所以得分批來。比如,先更新20%的機器,再更新20%,如此一共五批弄完。

往細節(jié)看,其中更新某一臺機器,其實都是個挺復雜的過程。首先下載新的war包到這臺機器,然后開始替換過程。先得把流量切走,切流量前,還得先把監(jiān)控報警關(guān)上。流量切走了,就可以停止當前war包的運行。然后用新的war包代替舊的war包,啟動試試看。假如通過了一些基本的自動檢測,說明新war包大體上能運行,于是就開始切流量回來,很后把監(jiān)控報警恢復。

忒麻煩!!

還好有工具幫忙

怎么辦?——用趁手的工具啊!正是為了提高大家的工作效率,讓大家能夠集中精力在具體業(yè)務本身的研發(fā)上,阿里巴巴集團多年以來建設(shè)了一整套基礎(chǔ)設(shè)施。

在交付層和運維層,都有大量的基礎(chǔ)設(shè)施。但這些,大家可能感受不深。對于一個應用來講,它很關(guān)心的事情,基本都是通過Aone暴露出來的。Aone也就是很上層研發(fā)層的主要工具。

注:本文提及的阿里內(nèi)部產(chǎn)品叫Aone,Aone于2021年正式對外開放,更名為云效。

回到前面討論的場景,把完美的源代碼發(fā)布上線這個過程,那么大體步驟應該是:

第一步,把運行環(huán)境初始化好。這一步目前同學們基本可以在Aone上一站式完成了,就是在Aone上注冊一個新應用,然后根據(jù)向?qū)е敢焉暇€任務一項一項配下來。當然還有些內(nèi)容比如數(shù)據(jù)庫還需要訪問其他系統(tǒng)申請配置,將來我們努力做成一站式配置好。

第二步,根據(jù)源碼構(gòu)建出壓縮包(基本就是把war包壓縮一下),然后把壓縮包部署到各目標服務器上。這一步,可以在Aone上一鍵完成。將來更新版本也一樣。點一下按鈕,所有事情都做完。這就是用Aone的好處。

阿里巴巴相關(guān)術(shù)語

為了使用Aone,我們得了解一些Aone的 關(guān)鍵概念。其實是在阿里巴巴開發(fā)時,大家一開始約定俗成的概念,后來固化在Aone上。我們一個一個來看:

應用:Git庫里裝的是源代碼,這是程序的一種形態(tài)。那么運行中的程序叫什么呢?在阿里巴巴,我們管它叫“應用”。一般來說,一個Git庫,構(gòu)建生成一個包,產(chǎn)生一個應用,在若干臺服務器/虛擬機/容器中運行,在測試、線上環(huán)境中運行。一般應用跟Git庫是一比一的關(guān)系,不過也有各種尤其情況,比如一個Git庫里有多個應用。所以,我們確實需要應用這個概念。另外,應用不僅包括了應用主包(通常是war包打成tgz包),也包括了運行所需環(huán)境的配置,比如tomcat版本等。

二方包:三方包,指的是來自阿里巴巴外部的,開源或商業(yè)的包,比如jar包、rpm包等。而二方包,則是指來自阿里巴巴內(nèi)部的,通常是其他團隊的包。也就是說,一個團隊研發(fā)出這個二方包,公布出來,供各團隊使用。當然,也可能就是供團隊自己使用。反正,只要是來自阿里內(nèi)部的,上傳到Nexus或Yum這樣的包的倉庫的,就都算二方包。

產(chǎn)品/產(chǎn)品線/產(chǎn)品樹:應用是從部署運維的角度看運行中的程序。產(chǎn)品是從使用者的角度看運行中的程序。通常產(chǎn)品由一到多個應用組成。產(chǎn)品進而構(gòu)成產(chǎn)品線,這樣一級一級地上去,形成了一棵樹,叫產(chǎn)品樹。產(chǎn)品樹的根節(jié)點,就是阿里巴巴。產(chǎn)品樹的第一級展開,是各個BU。

變更:在外面的世界,現(xiàn)在變更通常是指線上運行環(huán)境的變化,比如更新了軟件版本,比如擴容、縮容等運維操作。在阿里巴巴,變更也有這個含義。但是在阿里巴巴,變更還有一個含義,軟件研發(fā)過程中的含義。通常我們把一條feature分支就對應到一個變更。于是也常管這條feature分支叫變更分支。從這個角度看集成,就是把若干變更攢到一起,通過各種質(zhì)量檢測后,部署上線。

發(fā)布:發(fā)布,release,這個詞經(jīng)常是指軟件版本公布出來供使用。但在阿里巴巴,這個詞不僅對應于部署到線上環(huán)境,即使是部署到測試環(huán)境,也叫發(fā)布。換句話說,發(fā)布基本上就是部署的代名詞。比如每個變更覺得自己OK了,就點一下變更詳情頁面上的“提交待發(fā)布”這個鈕,標記一下。然后,在集成測試環(huán)境(也就是日常環(huán)境)對應的流程階段的詳情頁面,就能看見這個變更。再選中它,然后點擊“提交發(fā)布”這個鈕,就與其他變更分支一起合并到發(fā)布分支,并部署到測試環(huán)境啦。

阿里技術(shù)人的第一節(jié)課都上些什么1

技術(shù)發(fā)展趨勢

發(fā)布部署方面,在阿里巴巴,時下很重要的變革當然是Docker化。

那么這一波浪潮之后,下一波浪潮會是什么呢?有可能是Serverless架構(gòu)。這方面的文章也很多,大家可以翻翻看。

提高質(zhì)量的多種方法

剛才我們給的是一個天上掉餡兒餅的例子,忽然間得到了完美的源代碼,然后考慮構(gòu)建并部署上線。現(xiàn)實世界中哪兒有這樣的好事兒啊。代碼里面肯定有bug。那么,怎么能夠有效率地把問題找出來,繼而修復好?具體有哪些方法?

按四個象限梳理

為方便梳理,我們劃一個橫軸,一個縱軸,然后按照得到的四個象限,梳理各種質(zhì)量保證方法。這里所說的橫軸,在很左邊,是源代碼。在很右邊,是運行中的程序。這里所說的縱軸,在很上邊,是自動化,在很下邊,是人工。

先看左半部分。左下角,人工的對源代碼的檢測。這主要對應的是代碼評審。我們在代碼服務這門課上介紹的。此外,安全評審有時也有人工介入。

左上角,自動對源代碼的檢測。代碼規(guī)約的自動檢查工具,就落在這里。事實上,還有不少工具也落在這里,論品牌,有Sonar、PMD等。論方法,有圈復雜度等。所有這些自動檢測,被稱之為Staticprogramanalysis或Staticcodeanalysis,靜態(tài)程序分析/靜態(tài)代碼分析。

這方面,在阿里巴巴有工具支持,對應的是Aone的實驗室這個功能。可以通過實驗室,接入各種靜態(tài)程序分析工具和方法。實驗室的前身是CISE。現(xiàn)在CISE也仍然是實驗室背后的引擎。所以有時候聽別人說CISE的時候,你就知道其實指的就是實驗室啦。

再來看右半部分。右上角,是自動的對運行中的程序的檢測。這也就是常說的自動測試啦。在阿里巴巴,也是主要由Aone的實驗室來向大家提供相應服務。這包括單元測試/集成測試;接口測試/WebUI測試;功能測試/性能測試,等等。

右下角,是人工測試。雖說是人工測試,工具也同樣可以提供支持,主要是治理測試用例。相應的工具是Aone中的測試用例治理。

測試環(huán)境隔離技術(shù)

不論是自動測試還是人工測試,只要是需要先把應用部署到測試環(huán)境,那就跟測試環(huán)境的治理有關(guān)系了。測試環(huán)境的治理,我們專門講一講測試環(huán)境隔離技術(shù)。

想象一下,你開發(fā)了一個feature,也就是一個變更。為了讓它比較靠譜再送去集成,你需要對它進行測試。單元測試當然好,但這是不夠的。需要盡可能模擬真實環(huán)境進行測試。那么問題來了,如何盡可能模擬真實環(huán)境?比如,為每個淘系的工程師另搭一個淘寶測試用?這費用咱真花不起……

怎么解決這個問題?阿里巴巴用了一個聰明的方法,測試環(huán)境隔離。讓大家共享一個測試環(huán)境,但又仿佛每個人都是獨占它的,互相不干擾。

具體說來,假定搭起一套測試環(huán)境,需要1000臺機器,分別運行應用ABCDE……。這個環(huán)境我們稱作日常測試環(huán)境。每個應用的版本,我們姑且稱之為A0、B0、C0、D0、E0……

現(xiàn)在假定甲這名同學在開發(fā)A這個應用的一個變更,在開發(fā)過程中,現(xiàn)在產(chǎn)生的應用版本是A1。于是把A1部署到單獨一臺機器上,并用一些神奇的技術(shù)(通過中間件等)與剛才說的日常測試環(huán)境連通。于是,在甲這名同學看來,他所面對的系統(tǒng)是A1、B0、C0、D0、E0……而且仿佛他獨占了這個系統(tǒng)。

類似地,假如乙這名同學為了一個feature,在開發(fā)A和B分別拉出變更分支,產(chǎn)生A2、B2。那么A2、B2將分別被部署到單獨的機器上,然后它們一起與日常測試環(huán)境連通。于是,在乙這名同學看來,他所面對的系統(tǒng)是A2、B2、C0、D0、E0……從乙的角度看,他仿佛獨占了整個測試系統(tǒng)。甲和乙在測試時,不會互相干擾。

有了這樣的解決方案,就同時達到了兩個目標:盡量模擬真實的環(huán)境;用不高的代價。

關(guān)于測試環(huán)境隔離技術(shù),這里只是簡單介紹下原理。

阿里巴巴相關(guān)術(shù)語

項目環(huán)境:就是前面說的,測試一個feature所需的測試環(huán)境。可能對應一個應用上的一個變更,也有可能對應多個應用。項目環(huán)境使用了上面講的測試環(huán)境隔離技術(shù),背后接的一整套測試環(huán)境,是日常環(huán)境。

日常環(huán)境:就是集成測試環(huán)境。把各個變更攢在一起,然后部署到這里,看是不是能work。

預發(fā)環(huán)境:這個環(huán)境比日常環(huán)境更接近真實環(huán)境。事實上,從網(wǎng)絡(luò)隔離的角度,它不是在測試網(wǎng),而是在生產(chǎn)網(wǎng)。它所連接的數(shù)據(jù)庫,也通常就是線上運行使用的數(shù)據(jù)庫。一般來說,是先在日常環(huán)境測試,通過了再到預發(fā)環(huán)境測一下。

正式環(huán)境:正式環(huán)境就是生產(chǎn)運行的真實環(huán)境,向廣大用戶提供服務。

流水線

所謂流水線,通俗地講就是把不同的工作按一定順序串起來。為什么要串起來呢?

首先,有些工作天生就是有先后順序的。假如想部署,總得先構(gòu)建吧。所以構(gòu)建-部署,就是天然的工作順序。假如每次都是先點個按鈕做構(gòu)建,等構(gòu)建結(jié)束后再點個按鈕做部署,似乎有點兒笨,不如點一個按鈕,把這兩件事按順序都做了。

其次,為保證質(zhì)量,我們想往流程里面加規(guī)則和卡點。比如,必須通過代碼評審和安全評審,才答應合并代碼。這些質(zhì)量保證性的工作,還有可能有不同的順序和頻率。典型的單元測試和靜態(tài)程序分析應該早做,頻繁地做。而整個鏈路的測試,比較費勁,頻率可以相對低些。因此,這些工作也是流水線中的環(huán)節(jié),并且可能以不同頻率執(zhí)行。不同頻率這個事兒,就是持續(xù)交付這個流行詞兒中所說的不同stage(階段)不同頻率。

Aone提供了把不同的工作串接的能力,也就是流水線的能力。在分支模式下,每個環(huán)境,比如日常、預發(fā)、正式,分別對應一條流水線。在GitFlow和自由模式下,你甚至可以把所有工作內(nèi)容,從代碼提交到很后正式發(fā)布,做到一個流水線里。看著代碼過一道道“關(guān)口”,然后發(fā)布上線,還是很爽的。

結(jié)語

以上,概要地介紹了從源代碼到上線的基本的構(gòu)建部署過程,講解了各種質(zhì)量保證方法及其工具支持,講解了流水線把流程作業(yè)連接起來自動運轉(zhuǎn)。這些能力合在一起,就實現(xiàn)了對持續(xù)交付的一整套工具支持方案。當然,假如你問DevOps的工具支持方案,我也會說,以上幾部分,構(gòu)成了DevOps的工具支持方案……名字是次要的, 關(guān)鍵是幫上廣大研發(fā)同學的忙,高效且穩(wěn)妥的開發(fā)和發(fā)布。

我有茶,你有故事嗎?

三尺講臺,三寸舌,三寸筆,三千桃李;十年樹木,十載風,十載雨,十萬棟梁。感謝生命中出現(xiàn)的每一位師者,是你們教會了我們成長和愛。

在你技術(shù)成長道路上,哪一位老師很難忘?

在留言區(qū),分享關(guān)于你與老師的故事。

版權(quán)聲明:文章及圖片均來自阿里技術(shù),如侵權(quán),請聯(lián)系刪除。

如果您覺得 阿里技術(shù)人的第一節(jié)課都上些什么 這篇文章對您有用,請分享給您的好友,謝謝
文章地址:http://www.brucezhang.com/article/online/9770.html
解放雙手無盡可能,有問題添加天線貓微信
主站蜘蛛池模板: 色偷偷成人网免费视频男人的天堂| 亚洲人成人一区二区三区| 成人久久久久久| 国产成人免费A在线视频| 免费观看成人羞羞视频软件| 中文字幕成人在线| 婷婷国产成人精品视频| 成人毛片一区二区| 国产gav成人免费播放视频| 欧美激情成人网| 国产成人女人在线视频观看| 中文字幕成人网| 国产成人精品综合在线观看| 中文字幕人成人乱码亚洲电影| 成人国产经典视频在线观看| 国产成人av在线影院| 成人在线视频一区| 中国国产成人精品久久| 国产成人无码av在线播放不卡 | 中文国产成人精品久久96| 成人午夜18免费看| 黄色成人免费网站| 久久成人国产精品一区二区| 四虎影视永久地址www成人| 国内外成人在线视频| 成人午夜性影院视频| 欧美成人精品一区二区| 中文国产成人精品久久一区| 亚洲欧洲精品成人久久曰| 国产成人无码精品久久久免费| 成人免费a级毛片无码网站入口| 亚洲AV无码成人黄网站在线观看| 国产成人女人视频在线观看| 国产成人无码AⅤ片在线观看| 成人免费草草视频| 成人午夜免费福利视频| 成人性生交大片免费看午夜a| 成人狠狠色综合| 国产麻豆成人传媒免费观看| 国内一级毛片成人七仙女| 国产成人精品视频网站|