函数计算GB镜像秒级启动:下一代软硬件架构协同优化
簡(jiǎn)介:?優(yōu)化鏡像加速冷啟動(dòng)大致分為兩種做法:降低絕對(duì)延遲和降低冷啟動(dòng)概率。自容器鏡像上線以來(lái)我們已經(jīng)通過(guò)鏡像加速技術(shù),分階段降低了絕對(duì)延遲。本文在此基礎(chǔ)上,介紹借助函數(shù)計(jì)算下一代IaaS底座神龍裸金屬和安全容器,進(jìn)一步降低絕對(duì)延遲且能夠大幅降低冷啟動(dòng)頻率。
作者 | 修蹤
來(lái)源 | 阿里技術(shù)公眾號(hào)
一 背景
函數(shù)計(jì)算在2020年8月創(chuàng)新地提供了容器鏡像的函數(shù)部署方式。AWS Lambda在2020年12月Re-Invent,國(guó)內(nèi)其他FaaS提供商在2021年6月也相繼宣布了FaaS支持容器的重磅功能。冷啟動(dòng)一直都是FaaS的痛點(diǎn),引入比代碼壓縮包大幾十倍的容器鏡像后冷啟動(dòng)惡化便成為開(kāi)發(fā)者最大的擔(dān)憂。
函數(shù)計(jì)算在支持容器鏡像的設(shè)計(jì)階段就決定要讓開(kāi)發(fā)者像使用代碼包(秒級(jí)彈性能力)一樣的體驗(yàn)使用鏡像,既要易用性也要保持FaaS自身的極致彈性,免除用戶的糾結(jié)和取舍。理想的用戶體驗(yàn)是函數(shù)調(diào)用幾乎感覺(jué)不到鏡像數(shù)據(jù)遠(yuǎn)程傳輸帶來(lái)的延遲額外消耗。
優(yōu)化鏡像加速冷啟動(dòng)大致分為兩種做法:降低絕對(duì)延遲和降低冷啟動(dòng)概率。自容器鏡像上線以來(lái)我們已經(jīng)通過(guò)鏡像加速技術(shù),分階段降低了絕對(duì)延遲。本文在此基礎(chǔ)上,介紹借助函數(shù)計(jì)算下一代IaaS底座神龍裸金屬和安全容器,進(jìn)一步降低絕對(duì)延遲且能夠大幅降低冷啟動(dòng)頻率。
二 優(yōu)化歷程
(以某一鏡像為例)
1 第一代架構(gòu):ECS虛擬機(jī)
第一階段(2021年3月):按需加載,減少數(shù)據(jù)傳輸
過(guò)去的問(wèn)題在于啟動(dòng)鏡像前全量拉取鏡像內(nèi)部數(shù)據(jù),導(dǎo)致無(wú)用的鏡像數(shù)據(jù)也會(huì)被完整下載而占用了過(guò)多的準(zhǔn)備時(shí)間。于是我們最初的優(yōu)化方向是盡量忽略無(wú)用的鏡像數(shù)據(jù),達(dá)到按需加載。為此,我們通過(guò)鏡像加速技術(shù),省略掉了拉取無(wú)用數(shù)據(jù)的時(shí)間,實(shí)現(xiàn)了函數(shù)計(jì)算自定義鏡像冷啟動(dòng)從分鐘級(jí)到秒級(jí)提升的相關(guān)技術(shù)細(xì)節(jié)。
第二階段(2021年6月):記錄容器實(shí)例啟動(dòng)I/O軌跡,在后續(xù)實(shí)例啟動(dòng)中提前預(yù)取鏡像數(shù)據(jù)
我們發(fā)現(xiàn),函數(shù)實(shí)例在容器啟動(dòng)和初始化階段,I/O數(shù)據(jù)訪問(wèn)模式高度一致。根據(jù)FaaS平臺(tái)基于應(yīng)用運(yùn)行模式調(diào)度資源的特點(diǎn),我們?cè)诤瘮?shù)實(shí)例首次啟動(dòng)時(shí)記錄了I/O軌跡的脫敏數(shù)據(jù),在后續(xù)的實(shí)例啟動(dòng)時(shí),將軌跡數(shù)據(jù)作為提示,提前預(yù)取鏡像數(shù)據(jù)到本地,進(jìn)一步減小了冷啟動(dòng)延時(shí)。
上述兩種加速優(yōu)化雖然大幅減小了冷啟動(dòng)絕對(duì)延遲,但由于傳統(tǒng)ECS VM在閑置一段時(shí)間后就會(huì)被回收,再次啟動(dòng)新機(jī)器時(shí)就會(huì)重新觸發(fā)冷啟動(dòng)。于是,如何減少冷啟動(dòng)頻次便成為了下一階段重點(diǎn)攻克的題目之一。
2 下一代架構(gòu):彈性裸金屬服務(wù)器(神龍)+ microVM
在設(shè)計(jì)下一代架構(gòu)時(shí)我們不僅考慮解決冷啟動(dòng)頻次問(wèn)題,也同樣注意到緩存對(duì)于啟動(dòng)時(shí)延的影響。于是我們創(chuàng)新性的發(fā)明了Serverless Caching,根據(jù)不同的存儲(chǔ)服務(wù)特點(diǎn)構(gòu)建數(shù)據(jù)驅(qū)動(dòng)、智能高效的緩存體系,實(shí)現(xiàn)軟硬件協(xié)同優(yōu)化,將Custom Container體驗(yàn)進(jìn)一步提升。函數(shù)計(jì)算后臺(tái)神龍的更迭時(shí)間遠(yuǎn)大于ECS VM的閑置回收時(shí)間,對(duì)于用戶側(cè)而言,熱啟動(dòng)頻率大幅提升,在冷啟動(dòng)后,緩存會(huì)持續(xù)保留在神龍機(jī)器上,緩存命中率可達(dá)90%以上。
對(duì)比ECS虛擬機(jī),神龍裸金屬加上微型虛擬機(jī)的架構(gòu)為鏡像加速帶來(lái)了更多的優(yōu)化空間:
- 減小回源帶寬壓力并且減少重復(fù)數(shù)據(jù)存儲(chǔ)。比起ECS VM來(lái),同時(shí)幾千實(shí)例啟動(dòng),對(duì)于鏡像倉(cāng)庫(kù)的讀放大和磁盤存儲(chǔ)空間的寫放大降低至少兩個(gè)數(shù)量級(jí)。
- 虛擬機(jī)級(jí)別的安全隔離使得函數(shù)計(jì)算組件可以安全地組成可用區(qū)級(jí)別緩存網(wǎng)絡(luò),速度傳輸速度甚至優(yōu)于云盤。
函數(shù)計(jì)算Custom Container登陸神龍的同時(shí)也提高了資源利用率,降低成本,這對(duì)用戶和服務(wù)端維護(hù)是雙贏。
Serverless Caching的架構(gòu)則可以在不增加資源使用成本的同時(shí)提供更多的優(yōu)化潛力。
(L1~L4為不同級(jí)別緩存,距離和延遲從小到大)
三 橫向?qū)Ρ?/h3>
到目前為止,我們已經(jīng)將鏡像加速優(yōu)化到了較高的水準(zhǔn)。我們?cè)诤瘮?shù)計(jì)算的公開(kāi)用例里面挑選了4個(gè)典型的鏡像并將它們適配至國(guó)內(nèi)外幾個(gè)大型云廠商(名稱以廠商A、廠商B代替)進(jìn)行橫向?qū)Ρ?#xff0c;每間隔3小時(shí)調(diào)用上述鏡像,重復(fù)數(shù)次,我們得到了以下結(jié)果:
1 AI在線推理-貓狗識(shí)別
該鏡像包含了基于TensorFlow深度學(xué)習(xí)框架的圖像識(shí)別應(yīng)用。阿里云函數(shù)計(jì)算和廠商A都能正常運(yùn)行,但廠商A性能較差。廠商B則無(wú)法正常運(yùn)行。下圖中阿里云函數(shù)計(jì)算和廠商A的延時(shí)數(shù)據(jù)包含鏡像拉取,容器啟動(dòng),執(zhí)行推理運(yùn)算端對(duì)端的延時(shí),而廠商B的數(shù)據(jù)只是拉取鏡像部分的延時(shí),都已經(jīng)是最慢。FC相對(duì)穩(wěn)定,可以看出函數(shù)計(jì)算在CPU消耗型如AI推理方面有著更大優(yōu)勢(shì)。
以云盤熱啟動(dòng)為基準(zhǔn)(灰色),對(duì)比各個(gè)廠商的額外開(kāi)銷(彩色)
2 Python Flask Web Service
此鏡像為常見(jiàn)的網(wǎng)絡(luò)服務(wù),內(nèi)部使用Python搭配Flask服務(wù)框架。此鏡像的作用旨在測(cè)試不同云產(chǎn)品是否有能力完成高效按需加載。FC與廠商A均有波動(dòng)但后者的波動(dòng)最為明顯。
以云盤熱啟動(dòng)為基準(zhǔn)(灰色),對(duì)比各個(gè)廠商的額外開(kāi)銷(彩色)
3 Python機(jī)器學(xué)習(xí)運(yùn)算
鏡像內(nèi)同樣是Python運(yùn)行環(huán)境,可以看出各個(gè)廠商依舊保持著各自的特性,廠商B全量下載,廠商A部分請(qǐng)求有優(yōu)化但不穩(wěn)定。
以云盤熱啟動(dòng)為基準(zhǔn)(灰色),對(duì)比各個(gè)廠商的額外開(kāi)銷(彩色)
4 Cypress Headless Chrome
此鏡像包含無(wú)頭瀏覽器測(cè)試流程,廠商A由于編程模型限制和運(yùn)行環(huán)境不兼容無(wú)法運(yùn)行。而廠商B過(guò)慢只能在規(guī)定時(shí)間內(nèi)耗時(shí)71.1秒完成應(yīng)用初始化。不難看出函數(shù)計(jì)算在重I/O的鏡像方面依然有著不錯(cuò)的表現(xiàn)。
以云盤熱啟動(dòng)為基準(zhǔn)(灰色),對(duì)比各個(gè)廠商的額外開(kāi)銷(彩色),綠色部位為優(yōu)于基準(zhǔn)線的端到端耗時(shí)
四 推薦最佳實(shí)踐
支持容器技術(shù)是 FaaS 的必備特質(zhì),容器增加了可移植性和交付敏捷性,而云服務(wù)減輕了運(yùn)維與閑置成本、提供了彈性擴(kuò)縮容能力。自定義鏡像與函數(shù)計(jì)算結(jié)合最直接的解決了用戶為云廠商定制化地移植大容量業(yè)務(wù)邏輯帶來(lái)的困擾。
FaaS運(yùn)行容器時(shí)需要盡可能消除額外開(kāi)銷,使用戶體驗(yàn)與本地運(yùn)行場(chǎng)景相近。穩(wěn)定快速的運(yùn)行同樣是優(yōu)秀FaaS的標(biāo)準(zhǔn),FC提供了鏡像加載優(yōu)化的同時(shí)大大降低了冷啟動(dòng)頻次為穩(wěn)定快速的運(yùn)行提供了保障。不僅如此,在應(yīng)用的可移植方面更加需要做到平滑,不限制開(kāi)發(fā)模式的同時(shí)也要盡量降低用戶使用門檻。函數(shù)計(jì)算自定義鏡像支持標(biāo)準(zhǔn)HTTP服務(wù),自由配置可用端口,可讀的同時(shí)也可寫,提供多種工具鏈以及多元化的部署方案,無(wú)強(qiáng)制等待鏡像準(zhǔn)備完成時(shí)間,自帶HTTP觸發(fā)而不依賴其他云服務(wù),支持自定義域名等一系列優(yōu)質(zhì)解決方案。
函數(shù)計(jì)算自定義鏡像適用但不限于人工智能推理、大數(shù)據(jù)分析、游戲結(jié)算、在線課程教育、音視頻處理等。推薦使用阿里云容器鏡像服務(wù)企業(yè)版實(shí)例ACR EE,自帶鏡像加速功能,省去使用ACR鏡像時(shí)手動(dòng)開(kāi)啟加速拉取和加速鏡像準(zhǔn)備的步驟。
1 AI/ML在線推理
推理類計(jì)算依賴大體積底層訓(xùn)練框架以及大量的數(shù)據(jù)處理,普通的AI框架如Tensorflow的鏡像可以輕松達(dá)到GB級(jí),對(duì)CPU要求已經(jīng)很高,要再滿足擴(kuò)縮容就更是挑戰(zhàn)。函數(shù)計(jì)算自定義鏡像可以很好的解決此類需求,用戶只需直接使用底層訓(xùn)練框架鏡像并與數(shù)據(jù)處理邏輯打包至新的鏡像內(nèi)便可以輕松省去更換運(yùn)行環(huán)境所帶來(lái)的移植開(kāi)銷,同時(shí)又可以滿足彈性擴(kuò)縮容帶來(lái)的快速訓(xùn)練結(jié)果。歌曲喜好推理、圖片AI識(shí)別分析等都可以無(wú)縫與函數(shù)計(jì)算銜接以達(dá)到彈性滿足大量動(dòng)態(tài)的在線推理請(qǐng)求。
2 輕量靈活ETL
服務(wù)都依賴數(shù)據(jù),而數(shù)據(jù)處理往往需要消耗大量資源來(lái)滿足高效快速的數(shù)據(jù)變更請(qǐng)求。自定義鏡像與其他函數(shù)計(jì)算運(yùn)行時(shí)一樣可以滿足數(shù)據(jù)處理時(shí)的安全隔離,又同時(shí)保留了用戶將數(shù)據(jù)處理部分的業(yè)務(wù)邏輯自由的打包成鏡像的便捷能力。提供平滑遷移的同時(shí)滿足了鏡像啟動(dòng)的極低額外延時(shí),滿足了用戶針對(duì)如數(shù)據(jù)庫(kù)治理、萬(wàn)物物聯(lián)等應(yīng)用場(chǎng)景的安全,高效,彈性的數(shù)據(jù)處理需求。
3 游戲戰(zhàn)斗結(jié)算
各類游戲內(nèi)通常會(huì)設(shè)置日常任務(wù)等場(chǎng)景短時(shí)間集聚大量玩家同時(shí)需要戰(zhàn)斗結(jié)算一類的數(shù)據(jù)處理,為了不讓游戲玩家失去耐心,戰(zhàn)斗數(shù)據(jù)校驗(yàn)通常需要在短短幾秒內(nèi)完成,且單個(gè)玩家的數(shù)據(jù)結(jié)算單位時(shí)間不能隨著玩家數(shù)量增長(zhǎng)而惡化。此類數(shù)據(jù)處理的業(yè)務(wù)邏輯通常繁雜且高度重復(fù),將玩家數(shù)據(jù)處理邏輯打包至函數(shù)計(jì)算自定義鏡像內(nèi)便可以彈性滿足短時(shí)間大量相似的玩家結(jié)算請(qǐng)求。
五 未來(lái)規(guī)劃
優(yōu)化函數(shù)計(jì)算自定義鏡像的初衷就是要讓用戶感受不到容器鏡像傳輸帶來(lái)的額外延遲,給云原生開(kāi)發(fā)者最極致的體驗(yàn)。優(yōu)化不會(huì)停止,我們最終的目標(biāo)是幾乎消除容器鏡像拉取的額外開(kāi)銷和大量擴(kuò)容時(shí)鏡像倉(cāng)庫(kù)成為瓶頸,極速伸縮。進(jìn)一步完善Serverless Caching的同時(shí)Custom Container功能未來(lái)會(huì)幫助Kubernetes上的Web應(yīng)用, Job類工作負(fù)載無(wú)縫運(yùn)行在函數(shù)計(jì)算。Kubernetes負(fù)責(zé)處理常駐、流量穩(wěn)定的工作負(fù)載,Serverless服務(wù)分擔(dān)波動(dòng)明顯的計(jì)算將逐漸成為云原生的最佳實(shí)踐。
原文鏈接
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。?
總結(jié)
以上是生活随笔為你收集整理的函数计算GB镜像秒级启动:下一代软硬件架构协同优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: windows + cmake + vs
- 下一篇: 使用友盟+的APM服务实现对移动端APP