函数计算镜像加速:从分钟到秒的跨越
作者信息:
Shuai Chang,阿里云云原生 Serverless 團隊高級技術專家,主導了函數計算同容器技術生態融合以及 FaaS 云原生可觀測。
體驗文檔:
鏡像拉取加速文檔:https://help.aliyun.com/document_detail/193075.html
FaaS 和容器
容器鏡像因其顛覆式創新成為云原生時代應用部署格式的事實標準。頭部云廠商 FaaS (Function-as-a-Service) 服務如阿里云函數計算、AWS Lambda 也相繼在2020年支持使用容器鏡像部署函數,全面擁抱容器生態。自發布以來,開發者陸續將機器學習、音視頻處理、事件驅動離線數據處理、前端自動化等多個場景使用鏡像快速無服務器化,提高效率、降低成本。然而,冷啟動一直是 Serverless 無法繞開的問題。容器鏡像需要將數據通過網絡遠程下載并解壓,對于GB級別的鏡像,拉取時間可能高達分鐘級別,客觀上放大了冷啟動副作用,阻礙實時應用的 Serverless 演進。
函數計算鏡像加速功能
傳統的鏡像拉取加速強調"開發者負責",如精簡鏡像,合理分配鏡像層,multi-stage 構建,使用工具(如 docker-slim)去除不需要的數據,遵循構建最佳實踐等。這些工作不僅加重了用戶負擔,加速效果有限,且有運行時穩定性風險。阿里集團超大規模和場景高度復雜的容器環境,對鏡像存儲、加速技術有深厚的積累,出色地承擔了3年雙十一,雙十二,春節等大促秒殺場景的嚴苛的挑戰。阿里云 Serverless 同容器鏡像、存儲等服務深度合作,將內部創新在函數計算輸出:杭州、北京、上海、美東、美西正式發布了鏡像加速功能。該功能將原本屬于開發者的鏡像優化負擔轉由函數計算承擔,進一步幫助開發者提高生產效率,專注業務創新。
加速效果
我們在選擇了內部生產環境和開源社區的工作負載,覆蓋機器學習、人工智能、前端自動化、Web 應用等7種鏡像大小、IO 訪問模式、啟動命令的不同組合作為 benchmark,部署在 FC 北京區域。如下圖所示,函數計算開啟鏡像加速功能后加速普遍超過 50%,對于機器學習場景中常見的臃腫鏡像(如多個團隊共享基礎鏡像, ml-small-import, ml-large-import, ai-cat-or-dog)加速效果更為明顯(約 70%-86%),鏡像越大優化空間往往越高。
使用方式
鏡像加速可以通過控制臺、CLI 工具或是 FC SDK 開啟,詳細步驟參加鏡像拉取加速文檔
? 方式一:在函數計算控制臺函數配置下選擇“開啟鏡像加速”。
? 方式二:使用 Funcraft 工具部署
在已有的 CustomContainerConfig 配置下添加 AccelerationType: Default 如需關閉則配置 AccelerationType:
None
功能特點
FC 鏡像加速具備以下特點:
鏡像拉取為什么慢?
一個 OCI V1 容器鏡像包含多個層(layer),每層都是一個壓縮打包的文件系統(文件夾),通常以 tar.gz 格式存儲在遠端服務(如對象、文件存儲)。拉取鏡像時步驟如下:
上述步驟雖然簡單,卻是鏡像拉取慢的主要原因:
? 文件格式缺陷、粗粒度數據分層、順序解壓:gzip 層導致無法細粒度隨機讀取應用實際需要的數據,且要求所有層單線程順序解壓。實際觀察發現鏡像層可以通過并發下載提高速度,然而解壓環節在 gzip 格式下卻很難優化。
? 低效的壓縮/解壓縮算法:鏡像層采用的 gzip,benchmark gzip 解壓速度對比 lz4 平均慢接近9倍。
? 全量數據下載:同樣由于粗粒度的分層和 gzip 格式(不支持 seek),鏡像數據不論是否實際有用,都要被完整下載至本地。
綜上原理,鏡像拉取時間和鏡像大小成正比,而容器鏡像構建過程中運行 apt/yum install, 無用的測試、數據文件,構建過程中執行 chmod/chown 等命令造成同一數據復制多份,極易引入大量應用不需要的數據。
加速原理
函數計算將阿里集團成熟的鏡像加速技術應用在公共云服務中,加速技術圍繞兩個核心思路:
? 按需加載:僅讀取應用真實需要的數據,極大減少數據傳輸量
? 更高效的存儲和算法:相同大小的數據,更快地解壓
按需加載
Benchmark 中包含鏡像數據加載率在 12% - 84% 之間,除了鏡像較小的 web 應用,大部分場景數據利用率低于 50%。以層(layer)作為數據分發單位的原始鏡像被轉換成支持細粒度按需讀取的數據格式,并存放在延遲和吞吐都更優的存儲中。
高效解壓
除了按需加載帶來的下載步驟延時節省,鏡像加速技術在數據解壓步驟也同樣做了大量優化。下圖可以看出即使在加載 70% 以上全量數據的情況下,優化效果仍然超過 60%。
未來規劃
函數計算正式發布了容器鏡像加速,通過按需讀取和更高效的解壓技術在不同場景下加速 50%-80%,即使 GB 級別的鏡像也可以在幾秒內完成端到端啟動。加速功能結合函數計算極致彈性和事件觸發的特點,解鎖了更多對實時要求高的工作負載。容器應用可以更容易地享受 Serverless 特性,真正做到縮容到0以及快速大規模擴容。FC 在未來會持續優化冷啟動各個環節提供極致彈性,承擔更多用戶責任,使開發者專注業務創新。
附錄:實驗場景數據
| python-flask | Web 應用 | 46MB | 118MB |
| ecommerce-nodejs | 電商, nodejs express | 130MB | 371MB |
| ml-small-import/;ml-large-import | 機器學習,使用 numpy, pandas, pystan 等庫 | 728MB | 2.392GB |
| ai-cat-or-dog | 機器學習,人工智能,推理預測 tensorflow, keras 等庫 | 790MB | 1.824GB |
| puppeteer-pdf | Headless chrome,網頁轉 PDF, 使用 puppeteer, nodejs express | 332MB | 894MB |
| cypress-chrome | 前端 UI 自動化,cypress, headless chrome | 980MB | 2.608GB |
參考
? 函數計算支持容器鏡像-加速應用 Serverless 進程
? New for AWS Lambda – Container Image Support
? 函數計算鏡像拉取加速文檔
? Docker Slim: Minify and Secure Docker containers (free and open source!)
? christopher-talke/node-express-puppeteer-pdf-example
? awesome-fc/custom-container-docs
原文鏈接:https://developer.aliyun.com/article/781992?
版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。總結
以上是生活随笔為你收集整理的函数计算镜像加速:从分钟到秒的跨越的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有赞 Flink 实时任务资源优化探索与
- 下一篇: 浅谈分库分表那些事儿