
作者 | Shuai Chang 阿裡雲雲原生 Serverless 團隊進階技術專家
來源 |
阿裡巴巴雲原生公衆号體驗文檔:
鏡像拉取加速文檔FaaS 和容器
容器鏡像因其颠覆式創新成為雲原生時代應用部署格式的事實标準。頭部雲廠商 FaaS (Function-as-a-Service) 服務如阿裡雲函數計算、AWS Lambda 也相繼在 2020 年支援使用容器鏡像部署函數,全面擁抱容器生态。自釋出以來,開發者陸續将機器學習、音視訊處理、事件驅動離線資料處理、前端自動化等多個場景使用鏡像快速無伺服器化,提高效率、降低成本。然而,冷啟動一直是 Serverless 無法繞開的問題。容器鏡像需要将資料通過網絡遠端下載下傳并解壓,對于 GB 級别的鏡像,拉取時間可能高達分鐘級别,客觀上放大了冷啟動副作用,阻礙實時應用的 Serverless 演進。
函數計算鏡像加速功能
傳統的鏡像拉取加速強調"開發者負責",如精簡鏡像,合理配置設定鏡像層,multi-stage 建構,使用工具(如 docker-slim)去除不需要的資料,遵循建構最佳實踐等。這些工作不僅加重了使用者負擔,加速效果有限,且有運作時穩定性風險。阿裡集團超大規模和場景高度複雜的容器環境,對鏡像存儲、加速技術有深厚的積累,出色地承擔了 3 年雙十一、雙十二、春節等大促秒殺場景的嚴苛的挑戰。阿裡雲 Serverless 同容器鏡像、存儲等服務深度合作,将内部創新在函數計算輸出:杭州、北京、上海、美東、美西正式釋出了鏡像加速功能。該功能将原本屬于開發者的鏡像優化負擔轉由函數計算承擔,進一步幫助開發者提高生産效率,專注業務創新。
1. 加速效果
我們在選擇了内部生産環境和開源社群的工作負載,覆寫機器學習、人工智能、前端自動化、Web 應用等 7 種鏡像大小、IO 通路模式、啟動指令的不同組合作為 benchmark,部署在 FC 北京區域。如下圖所示,函數計算開啟鏡像加速功能後加速普遍超過 50%,對于機器學習場景中常見的臃腫鏡像(如多個團隊共享基礎鏡像, ml-small-import, ml-large-import, ai-cat-or-dog)加速效果更為明顯(約 70%-86%),鏡像越大優化空間往往越高。
2. 使用方式
鏡像加速可以通過控制台、CLI 工具或是 FC SDK 開啟,詳細步驟參考
。
- 方式一:在函數計算控制台函數配置下選擇“開啟鏡像加速”。
- 方式二:使用 Funcraft 工具部署。
在已有的 CustomContainerConfig 配置下添加 AccelerationType: Default 如需關閉則配置 AccelerationType:
CustomContainerConfig:
Image: registry-vpc.cn-beijing.aliyuncs.com/fc-demo/python-flask:v0.1
AccelerationType: Default
3. 功能特點
FC 鏡像加速具備以下特點:
- 使用簡單:隻需在函數上開啟鏡像加速,函數計算會自動制作加速鏡像和緩存,轉換完成後(5分鐘以内),函數自動采用加速鏡像緩存。
- 專注業務創新:開發者無需花費時間刻意精簡優化鏡像大小或嚴格區分 Serverless 和 Serverfull 應用鏡像的建構方式,FC 負責按照應用實際使用資料拉取和解壓。
- 加速免費,使用門檻低:鏡像加速開啟不産生額外費用,也不需要開發者額外購買或更新任何其他服務。事實上由于鏡像拉取時間變短,相應的請求費用也随之降低。
- 極速彈性、縮容到 0、事件觸發:FaaS 結合容器鏡像已經極大簡化了應用遷移至 Serverless,加速功能進一步解鎖了實時、準實時工作負載,曾經需要分鐘級别的容器啟動現在可以幾秒内快速啟動,真正實作縮容到 0。
鏡像拉取為什麼慢?
一個 OCI V1 容器鏡像包含多個層(layer),每層都是一個壓縮打包的檔案系統(檔案夾),通常以 tar.gz 格式存儲在遠端服務(如對象、檔案存儲)。拉取鏡像時步驟如下:
- 将各個 layer 對應的 tar.gz 檔案完整下載下傳至本地。
- 每層順序解壓。
- 将各個層合并(如 Overlay)作為 rootfs 啟動容器。
上述步驟雖然簡單,卻是鏡像拉取慢的主要原因:
- 檔案格式缺陷、粗粒度資料分層、順序解壓:gzip 層導緻無法細粒度随機讀取應用實際需要的資料,且要求所有層單線程順序解壓。實際觀察發現鏡像層可以通過并發下載下傳提高速度,然而解壓環節在 gzip 格式下卻很難優化。
- 低效的壓縮/解壓縮算法:鏡像層采用的 gzip,benchmark gzip 解壓速度對比 lz4 平均慢接近 9 倍。
- 全量資料下載下傳:同樣由于粗粒度的分層和 gzip 格式(不支援 seek),鏡像資料不論是否實際有用,都要被完整下載下傳至本地。
綜上原理,鏡像拉取時間和鏡像大小成正比,而容器鏡像建構過程中運作 apt/yum install, 無用的測試、資料檔案,建構過程中執行 chmod/chown 等指令造成同一資料複制多份,極易引入大量應用不需要的資料。
加速原理
函數計算将阿裡集團成熟的鏡像加速技術應用在公共雲服務中,加速技術圍繞兩個核心思路:
- 按需加載:僅讀取應用真實需要的資料,極大減少資料傳輸量。
- 更高效的存儲和算法:相同大小的資料,更快地解壓。
1. 按需加載
Benchmark 中包含鏡像資料加載率在 12% - 84% 之間,除了鏡像較小的 web 應用,大部分場景資料使用率低于 50%。以層(layer)作為資料分發機關的原始鏡像被轉換成支援細粒度按需讀取的資料格式,并存放在延遲和吞吐都更優的存儲中。
2. 高效解壓
除了按需加載帶來的下載下傳步驟延時節省,鏡像加速技術在資料解壓步驟也同樣做了大量優化。下圖可以看出即使在加載 70% 以上全量資料的情況下,優化效果仍然超過 60%。
未來規劃
函數計算正式釋出了容器鏡像加速,通過按需讀取和更高效的解壓技術在不同場景下加速 50%-80%,即使 GB 級别的鏡像也可以在幾秒内完成端到端啟動。加速功能結合函數計算極緻彈性和事件觸發的特點,解鎖了更多對實時要求高的工作負載。容器應用可以更容易地享受 Serverless 特性,真正做到縮容到 0 以及快速大規模擴容。FC 在未來會持續優化冷啟動各個環節提供極緻彈性,承擔更多使用者責任,使開發者專注業務創新。
附錄:實驗場景資料
參考
- 函數計算支援容器鏡像-加速應用 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
作者簡介
Shuai Chang,阿裡雲雲原生 Serverless 團隊進階技術專家,主導了函數計算同容器技術生态融合以及 FaaS 雲原生可觀測。