Google云运行适合运行Spring开机?

Google Cloud Run suitable to run Spring Boot?

我们有一个 Docker 容器,用于打包 Java Spring 引导应用程序。应用程序有时需要大约 40 秒才能启动。

Google云运行适合运行这样的"heavyweight"应用程序吗?

假设它被缩小到 0 个副本,那么下面的副本将需要 40 秒向上处理。或者 Cloud 运行 方面是否有一些逻辑可以避免这种情况。

云 运行 启动新的虚拟服务器实例时,您无法避免冷启动成本。如果 40 秒的开销对于处理传入的 "cold" 请求来说是不可接受的,那么您可能需要为保持 运行 24/7 的服务器付费。

您无法避免 40 秒的启动时间。所以这真的取决于你调用它的频率。

我们使用 spring boot + gke,云 运行 没有任何意义,除非代码每周使用一次。 (这可能很戏剧化,但你明白了)。

如果您有最终用户与之交互,这可能是不可接受的。如果它只是一些自动化的 API 端点,那么你只是烦人的天网。

您绝对可以通过做一些事情来缩短 Spring 引导启动时间。最简单的是增加 CPU 资源。 Spring Boot startup time scales significantly based on CPU available.

我们 运行 Spring 启动时对 Kubernetes 有很多依赖。使用 0.1 vcpu 启动需要 10 分钟。在我们需要快速扩大和缩小规模的世界里,这是不可接受的。但是一旦我们将它增加到 1 vcpu,它就会下降到 1 分钟。看起来它与提供的 CPU 的数量相当线性地缩放。这显然要花更多的钱,所以这取决于你的预算允许。

您还可以使用一些更复杂的配置来减少启动时间。有几个基准比较了不同的 JVM 选项、依赖项和 Spring 配置的很多细节。我将在下面 link 它们供您查看并评估哪些内容值得花时间。

Benchmarks for Spring Boot Start Up

Let's make SpringBoot app start faster

如果您愿意使用 TypeScript,可以使用一个非常相似的框架 Loopback。使用的模式让我想起了很多 Spring 并且在 TypeScript 中,它的启动速度非常快。我到最近区域(大约 2000 公里以外)的首次请求时间仅为 2 秒。

您可以通过将云中的最小实例数设置为大于 0 来避免冷启动 运行。它会花费更多,但你的最后一个实例在空闲时不会关闭。

我自己 运行 spring 没有在云中启动 运行 但你可以扩展 cpu 和 ram 相当高,并且至少有 5 个实例即使冷启动 40 秒,它也应该能够足够快地自动缩放。