冷啟動 (Cold Start) 一直是 Serverless 領(lǐng)域面臨的優(yōu)化難題之一,華為云創(chuàng)新提出了基于進(jìn)程級快照的冷啟動加速解決方案,致力于在用戶幾乎無感知的前提下,有效提升應(yīng)用的冷啟動性能; 特別的,Java 應(yīng)用冷啟動速度慢的問題尤為突出。本文以 Java 場景為例,介紹華為云在冷啟動性能優(yōu)化方面的探索歷程,并揭秘 90%+ 性能提升背后的技術(shù)實(shí)現(xiàn)原理。文末我們也提供了 Quick Start,幫助用戶更快地上手該新特性。
|問題引言:
Java 應(yīng)用冷啟動速度面臨巨大挑戰(zhàn)

平臺側(cè)時間:
服務(wù)側(cè)時間:
框架復(fù)雜:Spring 作為一個企業(yè)級的框架,為了支持廣泛的應(yīng)用需求,存在大量的可配置和初始化邏輯,并通過復(fù)雜的設(shè)計模式來支撐這種靈活性。例如,一個 spring-boot-web 的 hello world,依賴的 class 文件就多達(dá) 7404 個,見圖 2; JVM 的一次編譯,到處運(yùn)行:類加載時,查找類、校驗類的開銷會隨著應(yīng)用復(fù)雜度而增長;同時,在應(yīng)用剛啟動時,方法還沒有完全被 JIT 編譯完成,因此大部分情況停留在解釋執(zhí)行,影響了應(yīng)用啟動的速度。

華為云的優(yōu)化探索之路

與圖 1 對應(yīng),此階段一般占總耗時的 90% 左右。
Restore 耗時是秒級,相當(dāng)于將數(shù)十秒完整的初始化時間(在圖 1 的示例中)縮短至秒級 Restore 耗時,啟動性能提升了一個數(shù)量級
由于 Image File 是進(jìn)程運(yùn)行時的快照,在重建進(jìn)程之后,會涉及到進(jìn)程持有狀態(tài)的有效性更新。例如已建立的外部鏈接、加載到進(jìn)程里的緩存信息等。故我們引入了 Restore Hook 的概念,提供手段讓業(yè)務(wù)對這些狀態(tài)進(jìn)行刷新,詳見 Part IV。

在 Source 機(jī)器上啟動微服務(wù),通過健康檢查和初始化調(diào)用后,進(jìn)行 Checkpoint,停止服務(wù),生成進(jìn)程快照信息; 在 Source 機(jī)器上將進(jìn)程快照信息和微服務(wù)所有相關(guān)依賴,進(jìn)行壓縮,加密生成內(nèi)存快照包,并上傳至云端存儲。 在 Target 機(jī)器上從持久化存儲中下載對應(yīng)微服務(wù)的內(nèi)存快照包,進(jìn)行解壓恢復(fù)。 在 Target 機(jī)器上 Restore 微服務(wù)進(jìn)程;


CRIU 首先通過操作系統(tǒng)的 /proc 目錄獲取指定進(jìn)程和該進(jìn)程下所有子進(jìn)程的信息,包含文件描述符 (/proc/$pid/fd)、管道參數(shù)、網(wǎng)絡(luò)配置和內(nèi)存映射文件 (/proc/$pid/maps) 等; CRIU 接著通過 Linux 的 ptrace syscall 接口把一段特殊代碼動態(tài)注入到該進(jìn)程的地址空間,通過執(zhí)行該動態(tài)代碼,CRIU 以 UNIX 守護(hù)進(jìn)程的方式收集 dumpee 進(jìn)程存放在寄存器里的內(nèi)存數(shù)據(jù); CRIU 將所有進(jìn)程信息都收集完畢后,再次調(diào)用 ptrace 接口,去掉動態(tài)注入的代碼,恢復(fù)該進(jìn)程的原有代碼; CRIU 根據(jù)收集的進(jìn)程內(nèi)存信息,生成多個以功能分類的鏡像文件,并默認(rèn)殺死進(jìn)程,完成 Checkpoint;
CRIU 解析 Checkpoint 階段生成的鏡像文件,并分析多進(jìn)程的共享資源; CRIU 通過 Linux 的 fork 接口重新構(gòu)建、恢復(fù)進(jìn)程和其共享資源; CRIU 恢復(fù)所有任務(wù)的資源,但不包含內(nèi)存映射地址,定時器,線程等; CRIU 根據(jù)鏡像文件重新映射內(nèi)存空間,切換進(jìn)程上下文,恢復(fù)進(jìn)程的繼續(xù)執(zhí)行,完成 Restore;

不難發(fā)現(xiàn),Restore Hook 需要應(yīng)用本身進(jìn)行少量的代碼適配。為了進(jìn)一步簡化應(yīng)用的改造負(fù)擔(dān),我們也進(jìn)行了一種新的技術(shù)嘗試,可以理解其充當(dāng)了用戶應(yīng)用與 BaaS 之間的紐帶,通過狀態(tài)卸載等手段,對開發(fā)者透明,幫助應(yīng)用完成狀態(tài)的自動化刷新。這部分探索會在后續(xù)的技術(shù)博文中跟大家分享,敬請期待。
|效果實(shí)測:
Java 冷啟動時延降低 90%+

基于華為云 FunctionGraph 的簡單實(shí)戰(zhàn)







|總結(jié)與展望
[2]https://wiki.openjdk.org/display/HotSpot/Application+Class+Data+Sharing+-+AppCDS
[3]https://spring.io/blog/2019/03/14/lazy-initialization-in-spring-boot-2-2
[4]https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-scanning-index
[5]https://github.com/checkpoint-restore/criu
[6]https://speakerdeck.com/udzura/introduction-to-criu?slide=32
[7]https://support.huaweicloud.com/functiongraph/index.html
原文標(biāo)題:華為云發(fā)布冷啟動加速解決方案:助力Serverless計算速度提升90%+
文章出處:【微信公眾號:華為DevCloud】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
華為
+關(guān)注
關(guān)注
216文章
35151瀏覽量
255419
原文標(biāo)題:華為云發(fā)布冷啟動加速解決方案:助力Serverless計算速度提升90%+
文章出處:【微信號:華為DevCloud,微信公眾號:華為DevCloud】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
鴻蒙5開發(fā)寶藏案例分享---冷啟動優(yōu)化案例分享
HarmonyOS5云服務(wù)技術(shù)分享--Serverless抽獎模板部署
HarmonyOS5云服務(wù)技術(shù)分享--Serverless搭建抽獎
HarmonyOS5云服務(wù)技術(shù)分享--ArkTS開發(fā)Node環(huán)境
快手上線鴻蒙應(yīng)用高性能解決方案:數(shù)據(jù)反序列化性能提升90%
中軟國際打造企業(yè)上云服務(wù)解決方案
華為乾坤云管理解決方案2.0正式發(fā)布
華為發(fā)布云網(wǎng)端一體化網(wǎng)絡(luò)安全解決方案
華為發(fā)布AI WAN解決方案
米爾國產(chǎn)FPGA SoC芯選擇,安路飛龍DR1M90核心板重磅發(fā)布
鴻蒙原生頁面高性能解決方案上線OpenHarmony社區(qū) 助力打造高性能原生應(yīng)用
華為云、上海鈞達(dá)數(shù)科 發(fā)布區(qū)塊鏈數(shù)據(jù)要素聯(lián)合解決方案

華為云全域 Serverless 8 月更新盤點(diǎn)

基于DPU的容器冷啟動加速解決方案

評論