隐藏在你 Docker 构建中的启动时间技巧 笔记

隐藏在你 Docker 构建中的启动时间技巧

每个在 Kubernetes 上运行服务的 Java 开发者都目睹过这一幕:流量激增,自动伸缩器添加了一个 Pod,随后所有人开始等待。容器在两秒内启动,但应用程序还需十二秒才能就绪。在这十秒内,现有的 Pod 吸收额外负载,延迟随之攀升;若情况严重,自动伸缩器会陷入恐慌,添加更多尚未就绪的 Pod。多年来,我一直将 Spring Boot 的启动时间视为既定事实,就像对待天气一样。直到我发现,自 Java 12 以来,JVM 已针对其中大部分启动时间提供了修复方案;该方案在 Docker 内部运行效果极佳,却几乎未被集成到任何镜像中。这项技术称为类数据共享(Class Data Sharing,简称 CDS),本文将展示如何让 Docker 构建过程完成此项工作。