云原生應(yīng)用——CDN場景下的自動(dòng)化評(píng)測
Part 01、什么是云原生下的CDN
CNCF對(duì)云原生(Cloud Native)的定義:
- 云原生技術(shù)有利于各組織在公有云、私有云和混合云等新型動(dòng)態(tài)環(huán)境中,構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用。
- 云原生的代表技術(shù)包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API。
- 這些技術(shù)能夠構(gòu)建容錯(cuò)性好、易于管理和便于觀察的松耦合系統(tǒng)。
- 結(jié)合可靠的自動(dòng)化手段,云原生技術(shù)使工程師能夠輕松地對(duì)系統(tǒng)作出頻繁和可預(yù)測的重大變更。
?CDN是廣義邊緣計(jì)算已落地的典型應(yīng)用,通過邊緣服務(wù)節(jié)點(diǎn)下沉,內(nèi)容更貼近用戶,有效改善業(yè)務(wù)感知。通過CDN的云化改造,釋放邊緣服務(wù)節(jié)點(diǎn)計(jì)算資源,提供容器管理技術(shù)為第三方應(yīng)用落地邊緣,提升資源利用率。
主要應(yīng)用場景為三類:網(wǎng)頁加速、下載加速、視音頻點(diǎn)播/直播加速。
云原生CDN系統(tǒng)主要包括云化邊緣節(jié)點(diǎn)以及邊緣云平臺(tái)和配套的云管平臺(tái)。云管平臺(tái)主要提供資源池管理、資源管理、輔助運(yùn)營管理、流程管理、運(yùn)維管理等功能,邊緣云平臺(tái)主要提供容器化部署環(huán)境,并可根據(jù)業(yè)務(wù)需求滿足存儲(chǔ)、網(wǎng)絡(luò)、CPU、內(nèi)存等資源的管理和分配。
Part 02、測試工具選型
云原生CDN測試的一大難點(diǎn)在于構(gòu)建云原生測試場景難度高、測試時(shí)間長。阿里巴巴開源的Chaosblade--一個(gè)簡單易用且功能強(qiáng)大的混沌實(shí)驗(yàn)實(shí)施工具,除了基礎(chǔ)的CPU、disk、I/O、network外,還支持docker、dubbo、jvm的攻擊,同時(shí)支持攻擊后迅速回滾,是在k8s部署方式下最優(yōu)方案,正好可以幫助我們構(gòu)建豐富的云原生CDN的測試場景。
Chaosblade支持豐富的實(shí)驗(yàn)場景:
- 基礎(chǔ)資源:比如CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤、進(jìn)程等實(shí)驗(yàn)場景;
- Java應(yīng)用:比如數(shù)據(jù)庫、緩存、消息、JVM本身、微服務(wù)等,還可以指定任意類方法注入各種復(fù)雜的實(shí)驗(yàn)場景;
- C++應(yīng)用:比如指定任意方法或某行代碼注入延遲、變量和返回值篡改等實(shí)驗(yàn)場景;
- Docker容器:比如殺容器、容器內(nèi)CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤、進(jìn)程等實(shí)驗(yàn)場景;
- 云原生平臺(tái):比如Kubernetes平臺(tái)節(jié)點(diǎn)CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤、進(jìn)程實(shí)驗(yàn)場景,Pod網(wǎng)絡(luò)和Pod本身實(shí)驗(yàn)場景如殺Pod,容器的實(shí)驗(yàn)場景如上述的Docker容器實(shí)驗(yàn)場景;
?針對(duì)云原生平臺(tái),chaosblade-operator遵循混沌實(shí)驗(yàn)?zāi)P鸵?guī)范化實(shí)驗(yàn)場景,把實(shí)驗(yàn)定義為Kubernetes CRD資源,將實(shí)驗(yàn)?zāi)P陀成錇镵ubernetes資源屬性,很友好的將混沌實(shí)驗(yàn)?zāi)P团cKubernetes聲明式設(shè)計(jì)結(jié)合在一起,依靠混沌實(shí)驗(yàn)?zāi)P捅憬蓍_發(fā)場景的同時(shí),又可以很好的結(jié)合Kubernetes設(shè)計(jì)理念,通過kubectl或者編寫代碼直接調(diào)用Kubernetes API來創(chuàng)建、更新、刪除混沌實(shí)驗(yàn),而且資源狀態(tài)可以非常清晰的表示實(shí)驗(yàn)的執(zhí)行狀態(tài),標(biāo)準(zhǔn)化實(shí)現(xiàn)Kubernetes故障注入。
綜上所述,我們可以使用chaosblade-operator構(gòu)建云原生CDN的測試場景,提高云原生CDN的測試效率。
Part 03、故障注入
評(píng)測云原生CDN平臺(tái)的業(yè)務(wù)高可用和流量調(diào)度功能,需要在各類異常場景下驗(yàn)證業(yè)務(wù)訪問的連續(xù)性與正確性。根據(jù)上文調(diào)研,我們使用chaosblade-operator混沌工具來實(shí)現(xiàn)異常場景的故障注入。具體使用方式如下:
1.下載安裝chaosblade-operator
根據(jù)上述命令,chaosblade-operator會(huì)被安裝至kube-system命令空間下。chaosblade-operator啟動(dòng)后會(huì)在每個(gè)節(jié)點(diǎn)部署chaosblade-tool Pod和一個(gè)chaosblade-operator Pod。
2.查看安裝結(jié)果
如果顯示chaosblade-operator和chaosblade-tool Pod都處于Running狀態(tài),則說明部署成功。如果部署出現(xiàn)問題,可以查看chaoblade部署文檔。
3.識(shí)別故障注入的類型、故障輸入值、故障node名稱、故障持續(xù)時(shí)間等參數(shù)。
故障類型包括:CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)斷開、節(jié)點(diǎn)掛掉。
4.根據(jù)識(shí)別的故障注入?yún)?shù),執(zhí)行故障注入命令(達(dá)到持續(xù)時(shí)間后自動(dòng)銷毀),如:
5.返回故障注入結(jié)果,故障注入成功
Part 04、工具集成
解決了云原生測試場景構(gòu)建的難題,接下來就是將工具與云原生CDN業(yè)務(wù)結(jié)合,研發(fā)一套云原生CDN自動(dòng)化測試平臺(tái),進(jìn)一步提高測試效率。云原生CDN自動(dòng)化測試平臺(tái)的整體設(shè)計(jì)流程如下:
自動(dòng)化的主要內(nèi)容包括模擬業(yè)務(wù)訪問、分析業(yè)務(wù)日志、故障注入。
- 第一步:模擬業(yè)務(wù)訪問,在云原生CDN節(jié)點(diǎn)生成業(yè)務(wù)日志;
- 第二步:獲取業(yè)務(wù)日志并進(jìn)行分析,得到相關(guān)業(yè)務(wù)指標(biāo),如狀態(tài)碼、命中狀態(tài)、節(jié)點(diǎn)IP等;
- 第三步:使用chaosblade工具進(jìn)行故障注入;
- 第四步:繼續(xù)模擬業(yè)務(wù)訪問;
- 第五步:獲取并分析業(yè)務(wù)日志,將得到的業(yè)務(wù)指標(biāo)與故障注入的指標(biāo)進(jìn)行對(duì)比分析,判斷結(jié)果是否與預(yù)期相同,得到故障注入給業(yè)務(wù)帶來的影響。
通過該云原生CDN自動(dòng)化測試平臺(tái),我們可以有效地對(duì)CDN業(yè)務(wù)的調(diào)度、內(nèi)容管理、分發(fā)安全等相關(guān)功能進(jìn)行測評(píng),降低測試難度,提高測試效率。最終的云原生CDN自動(dòng)化測試平臺(tái)界面如下:
Part 05、總結(jié)
結(jié)合混沌工程技術(shù),我們可以快速地構(gòu)建云原生的各類測試場景,降低云原生平臺(tái)測試難度。該云原生CDN自動(dòng)化測試平臺(tái)已應(yīng)用于日常版本與試點(diǎn)測試中,整體提升測試效率40%,保障了CDN業(yè)務(wù)虛擬化遷移的質(zhì)量。目前,杭研vCDN能力已達(dá)到行業(yè)水平,基于vCDN的邊緣能力已落地16個(gè)省份,承載家庭安防、VR、OTT等to H業(yè)務(wù)和現(xiàn)網(wǎng)to B、to N業(yè)務(wù),服務(wù)用戶數(shù)超千萬。