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