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