searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

基于CRIU技术实现java进程的快速启动

2024-10-14 09:40:33
16
0

一、术语

  • CRIU(Checkpoint/Restore In Userspace):一个在 Linux 用户空间 (userspace) 上实现了checkpoint/restore 功能的软件工具。

  • Checkpoint:CRIU通过ptrace机制把一段特殊的代码(主要实现收集进程的上下文信息)注入到待备份进程并运行,然后再把这些上下文信息存储为镜像文件。

  • Restore:解析Checkpoint镜像文件,以此恢复进程备份前的状态。

  • FastFreeze:基于CRIU的开源工具,提供了友好的CLI,且不需要提升特权(如,CAP_SYS_ADMIN)。

    FastFreeze基本使用流程:

    1. 通过FastFreeze启动进程

      fastfreeze run --image-url --image-url file:/tmp/ff-test -- app.sh [args...]

    2. Checkpoint备份进程

      fastfreeze checkpoint

    3. Restore备份进程

      fastfreeze run --image-url --image-url file:/tmp/ff-test

二、函数快照冷启动方案设计

2.1 Checkpoint准备

一、Checkpoint镜像

  1. 安装FastFreeze。

  2. 将当前函数启动命令替换为fastfreeze命令,并设置快照文件存储路径为/var/snapshot-ff

    如,当前函数启动命令为:

    java -jar app.jar

    FastFreeze启动命令为:

    fastfreeze run --image-url file:/var/snapshot-ff -- bash -c "java -jar app.jar"

二、运行镜像

  1. 需要指定--cap-add=cap_sys_ptrace以获得ptrace权限(checkpoint依赖该权限),如:

    docker run -it --cap-add=cap_sys_ptrace ...

2.2 Checkpoint

使用另一个终端进入“2.1”正在运行的容器,并执行:

  1. 通过用户实现的健康检查检查接口,或信号量接口来判断函数是否启动完成,当函数启动完成后执行下一步。

  2. 执行 fastfreeze checkpoint 进行Checkpoint。

  3. 收集以下文件:

    • 快照文件。即fastfreeze命令--image-url参数指定的快照文件。

    • hsperfdata目录。由FastFreeze生成的临时文件:/tmp/hsperfdata_${user}。(user为当前系统用户名)

    • 目标应用程序。如,app.jar以及依赖的第三方jar包等。

    • 目标应用程序正在读写的文件(普通文件,非设备、网络对象等)。这些文件可以通过路径/proc/${pid}/fd获取。

    • 其它目标应用程序依赖的文件。场景较多,无法一一遍历,可不断补充完善(前端界面提供用户配置入口?)。

  4. 上传第3步收集的文件到xxx(传输方式待定?)。

2.4 Restore

一、Restore镜像

  1. 安装FastFreeze。

  2. 下载、解压缩步骤“2.2”上传的文件

  3. 将当前函数启动命令替换为fastfreeze命令,指定快照文件存储路径与之前Checkpoint镜像设置的镜像地址保持一致(此时无需再指定原启动命令)。并设置on-app-ready参数,该参数可以指定命令,在Restore之后执行,可通过发送信号(或别的机制,如CURL指定接口),并在进程内实现接收到该信号后对进程做一些状态刷新(需要用户额外实现):

    fastfreeze run --on-app-ready "kill -USR2 1000" --image-url file:/var/snapshot-ff

二、运行镜像

正常运行。

三、使用约束

  1. FastFreeze会使用pid=1000的进程号,需确保该进程号能被分配到。

  2. CRIU Checkpoint需要对机器进行ptrace访问,在容器内运行需要指定cap_sys_ptrace参数。

  3. 不支持ARM。

  4. Linux内核版本要求:>= 3.?

参考资料

CRIU解析-CSDN博客:blog.csdn.net/o0xgw0o/article/details/124497819

Docker热迁移工具CRIU原理系列:images_crit是啥工具-CSDN博客:blog.csdn.net/weixin_38669561/article/details/105723868

Checkpoint/Restore - CRIU:criu.org/Checkpoint/Restore

流程示图

 

0条评论
0 / 1000
张****钏
15文章数
1粉丝数
张****钏
15 文章 | 1 粉丝
原创

基于CRIU技术实现java进程的快速启动

2024-10-14 09:40:33
16
0

一、术语

  • CRIU(Checkpoint/Restore In Userspace):一个在 Linux 用户空间 (userspace) 上实现了checkpoint/restore 功能的软件工具。

  • Checkpoint:CRIU通过ptrace机制把一段特殊的代码(主要实现收集进程的上下文信息)注入到待备份进程并运行,然后再把这些上下文信息存储为镜像文件。

  • Restore:解析Checkpoint镜像文件,以此恢复进程备份前的状态。

  • FastFreeze:基于CRIU的开源工具,提供了友好的CLI,且不需要提升特权(如,CAP_SYS_ADMIN)。

    FastFreeze基本使用流程:

    1. 通过FastFreeze启动进程

      fastfreeze run --image-url --image-url file:/tmp/ff-test -- app.sh [args...]

    2. Checkpoint备份进程

      fastfreeze checkpoint

    3. Restore备份进程

      fastfreeze run --image-url --image-url file:/tmp/ff-test

二、函数快照冷启动方案设计

2.1 Checkpoint准备

一、Checkpoint镜像

  1. 安装FastFreeze。

  2. 将当前函数启动命令替换为fastfreeze命令,并设置快照文件存储路径为/var/snapshot-ff

    如,当前函数启动命令为:

    java -jar app.jar

    FastFreeze启动命令为:

    fastfreeze run --image-url file:/var/snapshot-ff -- bash -c "java -jar app.jar"

二、运行镜像

  1. 需要指定--cap-add=cap_sys_ptrace以获得ptrace权限(checkpoint依赖该权限),如:

    docker run -it --cap-add=cap_sys_ptrace ...

2.2 Checkpoint

使用另一个终端进入“2.1”正在运行的容器,并执行:

  1. 通过用户实现的健康检查检查接口,或信号量接口来判断函数是否启动完成,当函数启动完成后执行下一步。

  2. 执行 fastfreeze checkpoint 进行Checkpoint。

  3. 收集以下文件:

    • 快照文件。即fastfreeze命令--image-url参数指定的快照文件。

    • hsperfdata目录。由FastFreeze生成的临时文件:/tmp/hsperfdata_${user}。(user为当前系统用户名)

    • 目标应用程序。如,app.jar以及依赖的第三方jar包等。

    • 目标应用程序正在读写的文件(普通文件,非设备、网络对象等)。这些文件可以通过路径/proc/${pid}/fd获取。

    • 其它目标应用程序依赖的文件。场景较多,无法一一遍历,可不断补充完善(前端界面提供用户配置入口?)。

  4. 上传第3步收集的文件到xxx(传输方式待定?)。

2.4 Restore

一、Restore镜像

  1. 安装FastFreeze。

  2. 下载、解压缩步骤“2.2”上传的文件

  3. 将当前函数启动命令替换为fastfreeze命令,指定快照文件存储路径与之前Checkpoint镜像设置的镜像地址保持一致(此时无需再指定原启动命令)。并设置on-app-ready参数,该参数可以指定命令,在Restore之后执行,可通过发送信号(或别的机制,如CURL指定接口),并在进程内实现接收到该信号后对进程做一些状态刷新(需要用户额外实现):

    fastfreeze run --on-app-ready "kill -USR2 1000" --image-url file:/var/snapshot-ff

二、运行镜像

正常运行。

三、使用约束

  1. FastFreeze会使用pid=1000的进程号,需确保该进程号能被分配到。

  2. CRIU Checkpoint需要对机器进行ptrace访问,在容器内运行需要指定cap_sys_ptrace参数。

  3. 不支持ARM。

  4. Linux内核版本要求:>= 3.?

参考资料

CRIU解析-CSDN博客:blog.csdn.net/o0xgw0o/article/details/124497819

Docker热迁移工具CRIU原理系列:images_crit是啥工具-CSDN博客:blog.csdn.net/weixin_38669561/article/details/105723868

Checkpoint/Restore - CRIU:criu.org/Checkpoint/Restore

流程示图

 

文章来自个人专栏
函数计算
9 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0