- 冷啟動 (Cold Start) 一直是 Serverless 領(lǐng)域面臨的優(yōu)化難題之一,華為云創(chuàng)新提出了基于進程級快照的冷啟動加速解決方案,致力于在用戶幾乎無感知的前提下,有效提升應(yīng)用的冷啟動性能;
特別的,Java 應(yīng)用冷啟動速度慢的問題尤為突出。本文以 Java 場景為例,介紹華為云在冷啟動性能優(yōu)化方面的探索歷程,并揭秘 90%+ 性能提升背后的技術(shù)實現(xiàn)原理。文末我們也提供了 Quick Start,幫助用戶更快地上手該新特性。
|問題引言:
Java 應(yīng)用冷啟動速度面臨巨大挑戰(zhàn)
Serverless 應(yīng)用啟動時,都需要先進行初始化。其初始化時長一般取決于應(yīng)用本身的屬性,如業(yè)務(wù)邏輯、編程語言等,其中 Java 應(yīng)用的初始化過程通常是最慢的。以下基于一個典型的 Java 應(yīng)用,對其啟動時延進行拆解,各階段耗時分布如圖 1 所示:主要包含執(zhí)行環(huán)境創(chuàng)建(如容器啟動)、執(zhí)行環(huán)境初始化(如代碼包下載、部署)等準備工作,此階段最多是秒級響應(yīng),在冷啟動整體耗時中占比很低,通常不到 5%,平臺側(cè)也支持一些優(yōu)化方式,將耗時進一步壓縮至毫秒級;主要包含應(yīng)用框架啟動(如構(gòu)建 Spring ApplicationContext)、業(yè)務(wù)初始化(如業(yè)務(wù)數(shù)據(jù)初始化)等動作,此階段耗時一般較長。在本例中,應(yīng)用框架啟動耗時占比約 30%,業(yè)務(wù)初始化占比約 65%。由此推斷,該階段執(zhí)行的動作是 Java 應(yīng)用啟動慢的核心所在。Java 應(yīng)用啟動慢的根因其實也不難理解,主要有:- 框架復(fù)雜:Spring 作為一個企業(yè)級的框架,為了支持廣泛的應(yīng)用需求,存在大量的可配置和初始化邏輯,并通過復(fù)雜的設(shè)計模式來支撐這種靈活性。例如,一個 spring-boot-web 的 hello world,依賴的 class 文件就多達 7404 個,見圖 2;
- JVM 的一次編譯,到處運行:類加載時,查找類、校驗類的開銷會隨著應(yīng)用復(fù)雜度而增長;同時,在應(yīng)用剛啟動時,方法還沒有完全被 JIT 編譯完成,因此大部分情況停留在解釋執(zhí)行,影響了應(yīng)用啟動的速度。
圖 2:hello world 依賴的 class 個數(shù)因此,對于時延敏感型的 Java 應(yīng)用程序,在突發(fā)流量下發(fā)生冷啟動時,可能會導(dǎo)致用戶體驗下降。為了應(yīng)對這一挑戰(zhàn),用戶可以提前預(yù)留資源來減少冷啟動發(fā)生的頻率,或者對自己的應(yīng)用進行性能調(diào)優(yōu),但是第一類方案無形中增加了用戶的 keep-alive 成本,第二類方案也有著較高的技術(shù)門檻且往往效果比較有限。
華為云的優(yōu)化探索之路
業(yè)界針對 Java 應(yīng)用的啟動速度優(yōu)化已有一些優(yōu)秀的實踐,可分為以下幾類:主要有 GraalVM[1]、EJET 等,AOT 方案是通過在程序運行前,直接將 Java 源碼編譯成本地機器碼,因為提前編譯并不占用運行時間,以此來顯著提升應(yīng)用的啟動速度,同時本地機器碼可以持久化于磁盤中,不占用內(nèi)存且可重復(fù)使用。但是該類方案在特定場景也存在一定的局限性,如 GraalVM 對反射的支持并不友好,在涉及反射的地方都需要新增配置;EJET 雖然解決了反射的問題,但是其編譯時間較長且不穩(wěn)定,在復(fù)雜應(yīng)用場景下也存在性能劣化問題。AppCDS 方案是通過在 JVM 啟動時從 JSA 文件讀取共享數(shù)據(jù),省略了共享類的加載過程,提升 JVM 啟動速度;同時,多個 JVM 共享同一個歸檔文件,減少動態(tài)內(nèi)存占用,可以提升內(nèi)存使用率。該類方案主要適用于類加載比較多的場景,在一般場景下提升有限,且其對共享類的支持有一定限制,如運行時動態(tài)生成類不支持共享等。如 Lazy Initialization[3]、Scanning-index[4] 等,前者通過懶加載的方式來減少啟動時加載類的數(shù)量,一定程度上提升啟動速度;后者通過在編譯階段創(chuàng)建索引,避免啟動時掃描所有路徑來進行加速。但是該類方案在 Serverless 場景缺乏一定的普適性。華為云 FunctionGraph 創(chuàng)新提出的基于進程級快照的冷啟動加速解決方案,致力于在用戶無感知(無需 / 少量進行代碼適配)的前提下,幫助用戶突破冷啟動的性能瓶頸。本優(yōu)化方案直接從應(yīng)用初始化后的快照進行運行環(huán)境恢復(fù),跳過復(fù)雜的框架、業(yè)務(wù)初始化階段,從而顯著降低 Java 應(yīng)用的啟動時延,實測性能提升達 90%+。Part II:快照方案如何優(yōu)化 Java 應(yīng)用啟動速度當用戶 Java 函數(shù)打開冷啟動加速的配置開關(guān)后,華為云 FunctionGraph 會預(yù)先執(zhí)行函數(shù)對應(yīng)的初始化代碼,獲取其初始化執(zhí)行上下文環(huán)境的快照,并進行加密緩存。后續(xù)調(diào)用該函數(shù)并觸發(fā)冷啟動擴容時,會直接從提前初始化后的應(yīng)用快照來恢復(fù)執(zhí)行環(huán)境,而非重新走一遍初始化流程,以此達到極大提升啟動性能的效果。先結(jié)合圖 3 直觀對比一下優(yōu)化前、后的冷啟動流程差異:基于快照的冷啟動流程,主要包含以下幾個關(guān)鍵步驟:Step 1:平臺側(cè)提前準備執(zhí)行環(huán)境,并預(yù)執(zhí)行初始化代碼、保存應(yīng)用快照,此動作后續(xù)統(tǒng)稱為 Checkpoint- 與圖 1 對應(yīng),此階段一般占總耗時的 90% 左右。
Step 2:在請求到達,觸發(fā)函數(shù)新實例擴容時,直接從應(yīng)用快照來恢復(fù)新的執(zhí)行環(huán)境,此動作后續(xù)統(tǒng)稱為 Restore- Restore 耗時是秒級,相當于將數(shù)十秒完整的初始化時間(在圖 1 的示例中)縮短至秒級 Restore 耗時,啟動性能提升了一個數(shù)量級
Step 3:(可選)應(yīng)用進程從快照恢復(fù)后,執(zhí)行 Restore Hook 完成業(yè)務(wù)狀態(tài)的刷新- 由于 Image File 是進程運行時的快照,在重建進程之后,會涉及到進程持有狀態(tài)的有效性更新。例如已建立的外部鏈接、加載到進程里的緩存信息等。故我們引入了 Restore Hook 的概念,提供手段讓業(yè)務(wù)對這些狀態(tài)進行刷新,詳見 Part IV。
Step 4:應(yīng)用 Ready,具備接著往下執(zhí)行業(yè)務(wù)邏輯的能力特別的,容器本身也是主機上的進程,故本優(yōu)化方案也支持容器粒度的 Checkpoint,即對容器內(nèi)指定進程進行 CR,與傳統(tǒng)的輕量化虛機快照相比,其精細化程度更高、也更靈活。其原理詳見圖 4:- 在 Source 機器上啟動微服務(wù),通過健康檢查和初始化調(diào)用后,進行 Checkpoint,停止服務(wù),生成進程快照信息;
- 在 Source 機器上將進程快照信息和微服務(wù)所有相關(guān)依賴,進行壓縮,加密生成內(nèi)存快照包,并上傳至云端存儲。
- 在 Target 機器上從持久化存儲中下載對應(yīng)微服務(wù)的內(nèi)存快照包,進行解壓恢復(fù)。
- 在 Target 機器上 Restore 微服務(wù)進程;
華為云提出的基于進程級快照的冷啟動加速方案,其核心技術(shù)依托于 CRIU[5],它支持對用戶空間指定的進程進行“凍結(jié)”(即停止進程,并將該進程運行的所有上下文持久化為鏡像文件),并在必要時對其進行“解凍”(即通過保存的鏡像文件來正確恢復(fù)進程運行的上下文),其核心工作流程如圖 5-6 所示[6]:圖 5:CRIU 如何工作——Checkpoint- CRIU 首先通過操作系統(tǒng)的 /proc 目錄獲取指定進程和該進程下所有子進程的信息,包含文件描述符 (/proc/$pid/fd)、管道參數(shù)、網(wǎng)絡(luò)配置和內(nèi)存映射文件 (/proc/$pid/maps) 等;
- CRIU 接著通過 Linux 的 ptrace syscall 接口把一段特殊代碼動態(tài)注入到該進程的地址空間,通過執(zhí)行該動態(tài)代碼,CRIU 以 UNIX 守護進程的方式收集 dumpee 進程存放在寄存器里的內(nèi)存數(shù)據(jù);
- CRIU 將所有進程信息都收集完畢后,再次調(diào)用 ptrace 接口,去掉動態(tài)注入的代碼,恢復(fù)該進程的原有代碼;
- CRIU 根據(jù)收集的進程內(nèi)存信息,生成多個以功能分類的鏡像文件,并默認殺死進程,完成 Checkpoint;
- CRIU 解析 Checkpoint 階段生成的鏡像文件,并分析多進程的共享資源;
- CRIU 通過 Linux 的 fork 接口重新構(gòu)建、恢復(fù)進程和其共享資源;
- CRIU 恢復(fù)所有任務(wù)的資源,但不包含內(nèi)存映射地址,定時器,線程等;
- CRIU 根據(jù)鏡像文件重新映射內(nèi)存空間,切換進程上下文,恢復(fù)進程的繼續(xù)執(zhí)行,完成 Restore;
如 Part II 所述,雖然本優(yōu)化方案能極大提升 Java 應(yīng)用的冷啟動速度,但是快照技術(shù)在某些場景也存在一定的局限性,較難做到對現(xiàn)有應(yīng)用的全透明化。通過快照恢復(fù)后,應(yīng)用的網(wǎng)絡(luò)連接狀態(tài)會受到影響,涉及到 TCP Socket 重連等場景,如服務(wù)注冊、DB 連接,分布式通信,消息隊列等。這部分場景依賴應(yīng)用本身的網(wǎng)絡(luò)重連機制來更新正確,因此,本優(yōu)化方案中也引入了 Restore Hook 的概念,提供手段讓業(yè)務(wù)對這些狀態(tài)進行刷新。Restore Hook 當前已支持大部分主流第三方組件的重連,詳見圖 7:圖 7:Restore Hook 支持的第三方組件不難發(fā)現(xiàn),Restore Hook 需要應(yīng)用本身進行少量的代碼適配。為了進一步簡化應(yīng)用的改造負擔,我們也進行了一種新的技術(shù)嘗試,可以理解其充當了用戶應(yīng)用與 BaaS 之間的紐帶,通過狀態(tài)卸載等手段,對開發(fā)者透明,幫助應(yīng)用完成狀態(tài)的自動化刷新。這部分探索會在后續(xù)的技術(shù)博文中跟大家分享,敬請期待。
|效果實測:
Java 冷啟動時延降低 90%+
我們選取了公司內(nèi)部典型的 Java 應(yīng)用,對其原始初始化流程、Restore 流程進行了對比測試,如圖 8 所示。測試結(jié)果表明,本優(yōu)化方案將應(yīng)用的啟動速度平均提升了 95%+,即使快照包的增大一定程度上增加了包下載、解壓的耗時,但最終端到端的冷啟動時延也降低了 90%+。基于華為云 FunctionGraph 的簡單實戰(zhàn)
華為云發(fā)布的基于進程級快照的冷啟動加速方案,是一種性能優(yōu)化服務(wù),用戶無需額外付費,只需進行簡單的配置、少量的代碼修改,即可享受到該創(chuàng)新方案帶來的冷啟動性能提升。下文基于華為云 FunctionGraph,為大家?guī)硖匦?Quick Start:1. 登錄 FunctionGraph 控制臺,創(chuàng)建 Java 函數(shù),并打開“快照式冷啟動”開關(guān)2. 可選)配置 Restore Hook,并在函數(shù)代碼中實現(xiàn)對應(yīng)的 Hook 邏輯3. 函數(shù)發(fā)布新版本后,觸發(fā)快照的自動化制作4. 請耐心等待快照制作完成(5min 超時時間)5. 調(diào)用 Java 函數(shù),體驗快照優(yōu)化后的性能提升|總結(jié)與展望
本文介紹了華為云對冷啟動優(yōu)化這一業(yè)界難題的探索之路,創(chuàng)新提出了基于進程級快照的優(yōu)化方案。當然,本方案也并非十全十美,它依然面臨著一系列挑戰(zhàn),如文中提到的應(yīng)用狀態(tài)刷新、進程級 CR 的精細化控制、多平臺的兼容性等,我們也在持續(xù)探索、優(yōu)化中。同時,F(xiàn)unctionGraph 作為華為元戎內(nèi)核加持的下一代 Serverless 函數(shù)計算與編排服務(wù),致力于持續(xù)為用戶提供方便、迅捷的 Serverless 服務(wù)體驗。您可以登錄華為云 FunctionGraph 控制臺來深入體驗,更多信息請參閱 FunctionGraph 官方文檔 [7]。后續(xù)我們將分享更多圍繞通用全場景 Serverless 的前沿理論及其案例實踐,回饋社區(qū)。
[1]https://www.graalvm.org/22.3/reference-manual/java/compiler/
[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
原文標題:華為云發(fā)布冷啟動加速解決方案:助力Serverless計算速度提升90%+
文章出處:【微信公眾號:華為DevCloud】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
原文標題:華為云發(fā)布冷啟動加速解決方案:助力Serverless計算速度提升90%+
文章出處:【微信號:華為DevCloud,微信公眾號:華為DevCloud】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
相關(guān)推薦
在MWC25巴塞羅那期間,華為數(shù)據(jù)通信產(chǎn)品線總裁王雷在產(chǎn)品與解決方案發(fā)布會上正式發(fā)布了AI WAN解決方案。他表示,運營商加速網(wǎng)絡(luò)與AI融合
發(fā)表于 03-05 10:18
?275次閱讀
AI浪潮席卷科研領(lǐng)域,以DeepSeek為代表的生成式AI技術(shù)正掀起新一輪科研革命。華為基于其在AI和高性能計算等領(lǐng)域的優(yōu)勢,推出智算實驗室解決方案,與DeepSeek協(xié)同創(chuàng)新,加速科
發(fā)表于 02-25 16:22
?476次閱讀
華為云正式推出基于華為云Stack混合云的DeepSeek本地部署方案。
發(fā)表于 02-18 10:05
?505次閱讀
FPGA正以強勁的勢頭推動技術(shù)創(chuàng)新,安路DR1M90核心板及其開發(fā)板作為代表性產(chǎn)品,為邊緣計算和人工智能應(yīng)用提供了強大的技術(shù)支持。米爾電子將繼續(xù)以客戶需求為中心,提供高品質(zhì)、高可靠性的國產(chǎn)化解決方案,
發(fā)表于 01-10 14:32
Nodepool、HMrouter和DataCache 三大解決方案,并上架OpenHarmony開源社區(qū)分,分別針對應(yīng)用頁面滑動、跳轉(zhuǎn)、首頁冷啟動等關(guān)鍵性能場景提供高效易用的工具,助力伙伴和開發(fā)者打造
發(fā)表于 01-02 18:00
GROW with SAP解決方案將上架亞馬遜云科技Marketplace,助力企業(yè)快速應(yīng)用ERP云軟件,并利用前沿生成式AI解決方案實現(xiàn)創(chuàng)
發(fā)表于 12-09 15:11
?357次閱讀
【摘要】 9 月 19 日,在華為全聯(lián)接大會 2024 期間,華為云與上海鈞達數(shù)科在上海世博展覽館聯(lián)合發(fā)布了基于華為
發(fā)表于 10-09 20:16
?554次閱讀
CCE Autopilot、Serverless 應(yīng)用托管 CAE、云數(shù)據(jù)倉庫 DWS、事件網(wǎng)格 EventGrid 等。華為云函數(shù)工作流 FunctionGraph 一項基于事件驅(qū)
發(fā)表于 09-27 00:06
?973次閱讀
(Serverless)計算方式,極大地簡化了開發(fā)人員的工作,使他們能夠?qū)W⒂趹?yīng)用的構(gòu)建與運行,而不再需要承擔服務(wù)器管理的負擔。 然而,F(xiàn)aaS模式也并非沒有缺陷,其中最為人詬病的便是“冷啟動”問題。所謂
發(fā)表于 09-13 11:50
?563次閱讀
華為云近期發(fā)布了基于其強大盤古大模型的醫(yī)療健康解決方案,該方案精準聚焦于藥物研發(fā)、智慧醫(yī)療、基因測序、臨床研究及中醫(yī)藥五大關(guān)鍵領(lǐng)域,標志著A
發(fā)表于 08-13 18:25
?1446次閱讀
體驗帶來了極大的困擾,同時也會對相關(guān)企業(yè)帶來巨大損失。為此,華為云 CDN 下載加速解決方案應(yīng)運而生,為企業(yè)加速域名下的靜態(tài)內(nèi)容提供提供智能
發(fā)表于 06-24 17:46
?485次閱讀
應(yīng)用,詳細介紹如何進行冷啟動的性能優(yōu)化。
AppSpawn 預(yù)加載
可以通過預(yù)加載一些so,加快冷啟動的速度。預(yù)加載so 配置在appspawn_preload.json文件中。
文件路徑base
發(fā)表于 04-22 16:31
隨著數(shù)字化時代的快速發(fā)展,AI 技術(shù)已成為推動行業(yè)創(chuàng)新的關(guān)鍵動力。華為云緊跟時代步伐,全新上線 Serverless 應(yīng)用中心,為用戶提供海量應(yīng)用模板,實現(xiàn)一鍵部署函數(shù)和周邊依賴資源,讓您輕松擁抱
發(fā)表于 03-19 22:57
?543次閱讀
近日,華為云再次展現(xiàn)其技術(shù)實力,全新推出了 Serverless 應(yīng)用中心,為用戶提供了海量的應(yīng)用模板,讓一鍵部署函數(shù)及關(guān)聯(lián)資源成為現(xiàn)實,極大提升了應(yīng)用的部署效率。無論是開發(fā)者還是運維
發(fā)表于 03-19 22:56
?595次閱讀
)合作伙伴身份受邀參會,并攜手華為發(fā)布了面向農(nóng)牧行業(yè)的聯(lián)合解決方案——軟通動力華為智慧養(yǎng)殖解決方案。該方
發(fā)表于 03-19 22:21
?544次閱讀
評論