可根据需求扩展和缩减的弹性基础架构不仅是一种“无服务器”风尚,而且是一种可降低成本和浪费的运营模式。但是,其中隐藏着一些魔鬼……当应用程序/微服务需要根据需求启动时,由于需要将应用程序下载到节点,因此可能会有一些滞后,可能需要启动VM,即应用程序本身需要启动,并且可能需要本地缓存。在传统的企业系统中,这种“冷启动”过程实际上可能要花费数十分钟。但是,当事情花了这么长时间开始时,几乎不可能有基于需求的扩展。
GraalVM 是Java虚拟机实现,它通过在基于JVM的应用程序上进行提前(AOT)编译来解决“冷启动”问题的某些部分。GraalVM可以为您的应用程序创建一个“本机镜像”,因此它不再需要在JVM中运行。这样可以减少启动时间,并且在某些情况下可以提高整体性能。本机镜像还可以比通常的OS + JVM +所有依赖项JAR小得多。例如,我正在处理的最近一个应用程序是从一个精巧的208MB docker映像(OS + JVM + deps + app)开始的,该映像在2秒内启动,下降到14MB,启动时间为0.5s。听起来很棒!但是,我想与您分享一些警告,技巧和窍门。
我 在生产 中只有 一个 使用GraalVM本机映像的 小型应用程序, 它通过FROM scratch容器映像在Cloud Run上运行。它启动速度超快,并位于44MB的容器映像中。GraalVM确实帮助解决了冷启动问题。但是对于更复杂的应用程序呢?
详情点击标题见原文。