冷启动 (Cold Start) 一直是 Serverless 领域面临的优化难题之一,华为云创新提出了基于进程级快照的冷启动加速解决方案,致力于在用户几乎无感知的前提下,有效提升应用的冷启动性能; 特别的,Java 应用冷启动速度慢的问题尤为突出。本文以 Java 场景为例,介绍华为云在冷启动性能优化方面的探索历程,并揭秘 90%+ 性能提升背后的技术实现原理。文末我们也提供了 Quick Start,帮助用户更快地上手该新特性。
|问题引言:
Java 应用冷启动速度面临巨大挑战

平台侧时间:
服务侧时间:
框架复杂:Spring 作为一个企业级的框架,为了支持广泛的应用需求,存在大量的可配置和初始化逻辑,并通过复杂的设计模式来支撑这种灵活性。例如,一个 spring-boot-web 的 hello world,依赖的 class 文件就多达 7404 个,见图 2; JVM 的一次编译,到处运行:类加载时,查找类、校验类的开销会随着应用复杂度而增长;同时,在应用刚启动时,方法还没有完全被 JIT 编译完成,因此大部分情况停留在解释执行,影响了应用启动的速度。

华为云的优化探索之路

与图 1 对应,此阶段一般占总耗时的 90% 左右。
Restore 耗时是秒级,相当于将数十秒完整的初始化时间(在图 1 的示例中)缩短至秒级 Restore 耗时,启动性能提升了一个数量级
由于 Image File 是进程运行时的快照,在重建进程之后,会涉及到进程持有状态的有效性更新。例如已建立的外部链接、加载到进程里的缓存信息等。故我们引入了 Restore Hook 的概念,提供手段让业务对这些状态进行刷新,详见 Part IV。

在 Source 机器上启动微服务,通过健康检查和初始化调用后,进行 Checkpoint,停止服务,生成进程快照信息; 在 Source 机器上将进程快照信息和微服务所有相关依赖,进行压缩,加密生成内存快照包,并上传至云端存储。 在 Target 机器上从持久化存储中下载对应微服务的内存快照包,进行解压恢复。 在 Target 机器上 Restore 微服务进程;


CRIU 首先通过操作系统的 /proc 目录获取指定进程和该进程下所有子进程的信息,包含文件描述符 (/proc/$pid/fd)、管道参数、网络配置和内存映射文件 (/proc/$pid/maps) 等; CRIU 接着通过 Linux 的 ptrace syscall 接口把一段特殊代码动态注入到该进程的地址空间,通过执行该动态代码,CRIU 以 UNIX 守护进程的方式收集 dumpee 进程存放在寄存器里的内存数据; CRIU 将所有进程信息都收集完毕后,再次调用 ptrace 接口,去掉动态注入的代码,恢复该进程的原有代码; CRIU 根据收集的进程内存信息,生成多个以功能分类的镜像文件,并默认杀死进程,完成 Checkpoint;
CRIU 解析 Checkpoint 阶段生成的镜像文件,并分析多进程的共享资源; CRIU 通过 Linux 的 fork 接口重新构建、恢复进程和其共享资源; CRIU 恢复所有任务的资源,但不包含内存映射地址,定时器,线程等; CRIU 根据镜像文件重新映射内存空间,切换进程上下文,恢复进程的继续执行,完成 Restore;

不难发现,Restore Hook 需要应用本身进行少量的代码适配。为了进一步简化应用的改造负担,我们也进行了一种新的技术尝试,可以理解其充当了用户应用与 BaaS 之间的纽带,通过状态卸载等手段,对开发者透明,帮助应用完成状态的自动化刷新。这部分探索会在后续的技术博文中跟大家分享,敬请期待。
|效果实测:
Java 冷启动时延降低 90%+

基于华为云 FunctionGraph 的简单实战







|总结与展望
[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
原文标题:华为云发布冷启动加速解决方案:助力Serverless计算速度提升90%+
文章出处:【微信公众号:华为DevCloud】欢迎添加关注!文章转载请注明出处。
-
华为
+关注
关注
218文章
35803浏览量
260788
原文标题:华为云发布冷启动加速解决方案:助力Serverless计算速度提升90%+
文章出处:【微信号:华为DevCloud,微信公众号:华为DevCloud】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录

华为云发布冷启动加速解决方案:助力Serverless计算速度提升90%+
评论