華為云Stack 通過(guò)高內(nèi)聚低耦合的積木式架構(gòu)、簡(jiǎn)單易用的 自動(dòng)化 交付平臺(tái)、傻瓜式自動(dòng)化端到端驗(yàn)收以及標(biāo)準(zhǔn)化模型沉淀實(shí)現(xiàn)高效建云,把全棧云平臺(tái)大批量低成本復(fù)制到數(shù)據(jù)中心。
云平臺(tái)自身固有的復(fù)雜性決定了建云是一個(gè)浩大的工程。在討論云平臺(tái)安裝部署之前,我們不妨先看看一些簡(jiǎn)單軟件的安裝成本和對(duì)實(shí)施人員的技能要求:
|
軟件 |
安裝步驟 |
實(shí)施人員的技能要求 |
實(shí)施周期 (不考慮物料采購(gòu)周期) |
|
Nginx單機(jī)版 |
初始化Linux服務(wù)器、yum install,然后按需修改配置文件 |
Linux基礎(chǔ)命令 |
1小時(shí)內(nèi) |
|
MySQL主備集群 |
初始化Linux服務(wù)器、在主備節(jié)點(diǎn)上分別yum install,然后配置主備關(guān)系,啟動(dòng)服務(wù) |
Linux基本操作及MySQL基本的維護(hù)經(jīng)驗(yàn) |
2小時(shí) |
|
企業(yè)門戶網(wǎng)站 |
初始化Linux服務(wù)器、部署 數(shù)據(jù)庫(kù) 、網(wǎng)站應(yīng)用程序、nginx LB,配置DNS解析記錄 |
linux基本操作、數(shù)據(jù)庫(kù)維護(hù)、LB軟件維護(hù)、DNS軟件維護(hù) |
2天以上 |
|
中等規(guī)模的企業(yè)應(yīng)用 |
初始化Linux服務(wù)器,部署API網(wǎng)關(guān),部署X套數(shù)據(jù)庫(kù)、N個(gè)微服務(wù)組件、LB,配置DNS,業(yè)務(wù)調(diào)測(cè) |
除上述基本能力外,還需要充分理解業(yè)務(wù)流程,完成業(yè)務(wù)功能驗(yàn)證 |
1月以上 |
從以上表格可見(jiàn),當(dāng)交付一個(gè)復(fù)雜度與企業(yè)ERP系統(tǒng)相當(dāng)?shù)膽?yīng)用軟件時(shí),對(duì)交付人員的技能要求就已經(jīng)比較高了,而且其交付周期已經(jīng)嚴(yán)重影響了客戶的業(yè)務(wù)發(fā)展。
下面我們?cè)賮?lái)看看華為云Stack的整體架構(gòu),以便對(duì)其復(fù)雜度有一個(gè)直觀的感受:
.png)
圖1 華為云Stack整體架構(gòu)
華為云Stack邏輯架構(gòu)上劃分為資源池層、公共組件、云服務(wù)層、運(yùn)維運(yùn)營(yíng)系統(tǒng)等幾部分,每一層又由數(shù)十甚至上百個(gè)微服務(wù)及其依賴的DB、中間件、LB等組件構(gòu)成,并且各微服務(wù)、服務(wù)之間存在非常復(fù)雜的交互關(guān)系。整體復(fù)雜度比前面提到的ERP系統(tǒng)高了幾個(gè)量級(jí)。
面對(duì)如此復(fù)雜的分布式系統(tǒng),如果采用傳統(tǒng)的人工交付方式,其交付周期將是不可接受的,而且對(duì)交付人員的技術(shù)能力也會(huì)有非常高的要求。
為了應(yīng)對(duì)華為云Stack批量快速交付的挑戰(zhàn),我們主要采取了以下幾個(gè)方面的措施:
1. 產(chǎn)品研發(fā)階段,采用積木式架構(gòu),確保一個(gè)邏輯層、每一個(gè)服務(wù)單元的高內(nèi)聚低耦合。
2. 通過(guò)自研的一鍵式自動(dòng)化交付平臺(tái),驅(qū)動(dòng)整朵云自下而上的自動(dòng)化部署。
3. 通過(guò)云平臺(tái)自動(dòng)化驗(yàn)收工具確保交付的有效性,降低現(xiàn)場(chǎng)調(diào)試成本。
4. 通過(guò)標(biāo)準(zhǔn)化的數(shù)據(jù)中心級(jí)建模,為后續(xù)升級(jí)提供數(shù)據(jù)支撐,確保已交付站點(diǎn)的長(zhǎng)期可持續(xù)升級(jí)演進(jìn)。
下面我們對(duì)每一種措施展開(kāi)詳細(xì)的介紹。
高內(nèi)聚低耦合的積木式架構(gòu)
積木式的軟件架構(gòu)是高效交付的前提。試想你要建造一棟大樓,但是運(yùn)到工地上的都是一堆堆的沙子、水泥、鋼筋、木頭,需要現(xiàn)場(chǎng)測(cè)量,現(xiàn)場(chǎng)澆筑各種構(gòu)件,那么其建設(shè)效率和質(zhì)量將極其不可控。因此在現(xiàn)代化的建筑領(lǐng)域,一般會(huì)在工廠里根據(jù)架構(gòu)師設(shè)計(jì)好的圖紙批量生產(chǎn)標(biāo)準(zhǔn)的預(yù)制件,然后在施工現(xiàn)場(chǎng)進(jìn)行組裝,通過(guò)搭積木的方式快速完成建設(shè)。
華為云Stack在研發(fā)階段,已經(jīng)充分考慮了軟件的可交付性,主要采取的措施包括:
? 通過(guò)華為公司自研的軟件建模工具對(duì)每個(gè)服務(wù)單元的交付模型、部署模型進(jìn)行詳細(xì)設(shè)計(jì)及多輪評(píng)審,明確每個(gè)服務(wù)單元的部署、運(yùn)行依賴。
? 通過(guò)分層架構(gòu)方法,明確定義每一層之間的接口,并通過(guò)API管控工具確保每一層對(duì)外提供的API的穩(wěn)定性,進(jìn)而降低各服務(wù)間對(duì)接的復(fù)雜度。
? 通過(guò)領(lǐng)域建模,抽取大多數(shù)服務(wù)所依賴的公共組件,以服務(wù)化的方式進(jìn)行統(tǒng)一管理,從而提升了其標(biāo)準(zhǔn)化水平和交付效率。
? 制定了一套統(tǒng)一的安裝部署開(kāi)發(fā)框架和規(guī)范,確保來(lái)自不同團(tuán)隊(duì)的各種云服務(wù)的部署方式的統(tǒng)一。
以云主機(jī)服務(wù)ECS為例,在架構(gòu)設(shè)計(jì)階段,可交付性方面要完成如下設(shè)計(jì):
.png)
圖2 云服務(wù)設(shè)計(jì)可交付性相關(guān)設(shè)計(jì)
在開(kāi)發(fā)階段,除業(yè)務(wù)功能代碼的開(kāi)發(fā)外,每個(gè)服務(wù)還要根據(jù)自動(dòng)化部署的開(kāi)發(fā)規(guī)范開(kāi)發(fā)自動(dòng)化部署插件包,該插件包中包含了安裝部署的每一個(gè)子步驟的描述、參數(shù)聲明、依賴關(guān)系聲明以及相關(guān)的部署腳本。部署插件屏蔽了云服務(wù)內(nèi)部的復(fù)雜細(xì)節(jié),對(duì)外提供了統(tǒng)一的交付接口。對(duì)華為云Stack的交付人員來(lái)說(shuō),無(wú)需理解要部署的是IaaS服務(wù)還是ManageOne云管平臺(tái),大大降低了交付人員的學(xué)習(xí)成本和技能要求。
經(jīng)過(guò)以上措施,華為云Stack中的每個(gè)服務(wù)單元都變成了一塊“樂(lè)高積木”,提供了標(biāo)準(zhǔn)的“卡槽”,為高效交付打下了堅(jiān)實(shí)的基礎(chǔ)
簡(jiǎn)單易用的自動(dòng)化交付平臺(tái)
通過(guò)良好的架構(gòu)設(shè)計(jì),我們有了一堆可根據(jù)客戶需求靈活組裝的積木。但是,玩過(guò)樂(lè)高的朋友可能深有體會(huì),對(duì)于大型的樂(lè)高模型,雖然每一塊都有標(biāo)準(zhǔn)的接口,但是面對(duì)成百上千塊積木,要把它拼裝起來(lái),仍然是一項(xiàng)浩大的工程。
為了實(shí)現(xiàn)華為云Stack中成百上千的微服務(wù)的搭積木式交付,我們研發(fā)了一個(gè)高度靈活的可視化、自動(dòng)化交付平臺(tái)(HUAWEI CLOU Stack Deployment Platform,簡(jiǎn)稱HCSD)。該平臺(tái)的主要功能如下圖所示:
.png)
圖2 自動(dòng)化部署平臺(tái)(HCSD)架構(gòu)
該平臺(tái)相當(dāng)于一個(gè)自動(dòng)化搭積木的機(jī)器人,一線交付人員把軟件包和通用原子能力庫(kù)導(dǎo)入到交付平臺(tái)中,然后通過(guò)可視化UI按需選擇要部署的服務(wù)或組件,根據(jù)頁(yè)面上的提示導(dǎo)入?yún)?shù)表,啟動(dòng)部署工程。接下來(lái)任務(wù)執(zhí)行引擎會(huì)加載所有云服務(wù)包中的部署插件,根據(jù)插件中定義的子任務(wù)依賴關(guān)系描述生成DAG并進(jìn)行拓?fù)渑判?,然后并發(fā)執(zhí)行安裝任務(wù),完成云平臺(tái)軟件的部署和配置。在部署完成后,還會(huì)自動(dòng)化執(zhí)行每個(gè)云服務(wù)插件包中定義的E2E驗(yàn)收用例,并自動(dòng)生成驗(yàn)收?qǐng)?bào)告。
基于該平臺(tái),華為云Stack的整體軟件交付流程和工時(shí)如下(以200臺(tái)物理機(jī)規(guī)模為例):
.png)
圖4 華為云Stack端到端交付流程及工時(shí)
傻瓜式自動(dòng)化端到端驗(yàn)收
傳統(tǒng)的軟件交付過(guò)程中,軟件部署完成后,會(huì)由對(duì)業(yè)務(wù)流程比較精通的專業(yè)人員通過(guò)實(shí)際操作來(lái)驗(yàn)證軟件交付的正確性。這種方式對(duì)于簡(jiǎn)單的軟件來(lái)說(shuō)是可行的,但是面對(duì)向華為云Stack這種復(fù)雜的分布式系統(tǒng),如果想通過(guò)人工把所有驗(yàn)收用例執(zhí)行一遍,既耗時(shí)耗力,又難免出現(xiàn)各種人因差錯(cuò)而影響驗(yàn)收結(jié)果的有效性。
為了提升驗(yàn)收的效率和有效性,我們?cè)谲浖O(shè)計(jì)階段引入“可測(cè)試性”設(shè)計(jì)環(huán)節(jié),在功能特性設(shè)計(jì)之初就充分考慮了可測(cè)試性,并對(duì)E2E用例進(jìn)行了詳細(xì)設(shè)計(jì)。在開(kāi)發(fā)階段,會(huì)按照統(tǒng)一的規(guī)范把這些E2E測(cè)試用例代碼化,并隨交付件一起發(fā)布。
目前涵蓋的主要自動(dòng)化E2E驗(yàn)收用例包括:
? 各云服務(wù)主要API的端到端調(diào)用,如:創(chuàng)建VPC、上傳VM 鏡像 、創(chuàng)建VM、VM網(wǎng)絡(luò)互通性驗(yàn)證、刪除VM等。
? 自動(dòng)點(diǎn)擊云服務(wù)Web Console的鏈接和按鈕,抓取頁(yè)面截圖。
基于該自動(dòng)化驗(yàn)收調(diào)測(cè)工具,生成了Web版本和Word版本的驗(yàn)收?qǐng)?bào)告。更重要的是降低了對(duì)交付人員的技能要求,為華為云Stack大批量復(fù)制提供了重要支撐。
標(biāo)準(zhǔn)化模型沉淀,為云平臺(tái)持續(xù)升級(jí)演進(jìn)提供有力保障
數(shù)字化建設(shè)是一個(gè)長(zhǎng)期持續(xù)的過(guò)程,云平臺(tái)作為數(shù)字化平臺(tái)的基座,必須具備長(zhǎng)期的可持續(xù)升級(jí)演進(jìn)能力。因此在研發(fā)階段、交付階段要充分考慮云平臺(tái)的可升級(jí)能力,為后續(xù)的維護(hù)、升級(jí)提供必要的數(shù)據(jù)支撐。
目前在華為云Stack以ManageOne CMDB為載體,沉淀了整朵云運(yùn)維變更相關(guān)的核心元數(shù)據(jù)。
.png)
圖5 CMDB運(yùn)維數(shù)據(jù)模型
這些數(shù)據(jù)在研發(fā)階段是由各云服務(wù)團(tuán)隊(duì)維護(hù)的,在部署階段由HCSD匯總并注入CMDB。
為了降低運(yùn)維數(shù)據(jù)的維護(hù)成本,我們基于json schema定義了一套數(shù)據(jù)模型校驗(yàn)基線,并給所有云服務(wù)的代碼庫(kù)配置了門禁,每次代碼提交都會(huì)觸發(fā)自動(dòng)化模型校驗(yàn),確保數(shù)據(jù)的準(zhǔn)確性。
在云服務(wù)軟件發(fā)布階段,各云服務(wù)按照規(guī)范把運(yùn)維基線數(shù)據(jù)打包隨交付件發(fā)布,然后由HCSD自動(dòng)化寫入CMDB。
通過(guò)這種方式,華為云Stack做到了整朵云一鍵端到端自動(dòng)化升級(jí),為政企客戶數(shù)字化資產(chǎn)的可持續(xù)運(yùn)營(yíng)打下了堅(jiān)實(shí)的基礎(chǔ)。
目前華為云Stack從架構(gòu)設(shè)計(jì)到代碼開(kāi)發(fā)、從發(fā)布到交付,已經(jīng)形成一條高度標(biāo)準(zhǔn)化的流水線。未來(lái)我們會(huì)持續(xù)在新的交付模式上進(jìn)行更多的創(chuàng)新探索,把華為公有云上的新技術(shù)、新特性第一時(shí)間復(fù)制到客戶數(shù)據(jù)中心,為客戶打造通往數(shù)字化轉(zhuǎn)型的高速公路。