使用 JVM 进行检查点与恢复
Coordinated Restore at Checkpoint(CRaC)是一个 OpenJDK 项目,它定义了一种新的 Java API,允许你在 HotSpot JVM 上对应用程序进行检查点(checkpoint)和恢复(restore)。该项目基于 CRIU,而 CRIU 是一个在 Linux 上实现检查点/恢复功能的项目。
其原理如下:你几乎像平常一样启动应用程序,但使用支持 CRaC 的 JDK 版本,例如 BellSoft Liberica JDK with CRaC 或 Azul Zulu JDK with CRaC。然后在某个时刻(可能是在执行了一些工作负载、通过运行所有常见代码路径对 JVM 进行预热之后),你通过 API 调用、jcmd 命令、HTTP 端点或其他机制触发一个检查点(checkpoint)。
然后,运行中的 JVM 的内存表示(包括其 warmness 状态)会被序列化到磁盘,从而允许在稍后快速恢复,甚至可以在具有相似操作系统和 CPU 架构的另一台机器上进行恢复。恢复后的进程保留了 HotSpot JVM 的所有功能,包括在运行时进一步进行 JIT 优化的能力。
基于 Spring Framework 提供的基础,Spring Boot 为应用程序的检查点(checkpointing)和恢复(restoring)提供了支持,并在有限范围内 开箱即用地管理诸如 socket、文件和线程池等资源的生命周期。对于其他依赖项以及可能涉及此类资源的应用程序代码,还需要额外的生命周期管理。
你可以在 Spring Framework JVM Checkpoint Restore 支持文档 中找到更多关于所支持的两种模式(“按需对运行中的应用程序进行 checkpoint/restore” 和 “启动时自动 checkpoint/restore”)、如何启用 checkpoint 和 restore 支持以及一些指导原则的详细信息。