【问题标题】:Google Cloud Run suitable to run Spring Boot?Google Cloud Run 适合运行 Spring Boot?
【发布时间】:2019-12-04 18:21:14
【问题描述】:

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

Google Cloud Run 适合运行这样的“重量级”应用吗?

假设它会缩小到 0 个副本,那么处理以下内容需要 40 秒以上的时间。或者 Cloud Run 方面是否有一些逻辑可以避免这种情况。

【问题讨论】:

  • 也许使用 GraalVM 可以提高启动时间
  • 根据所提供的信息无法回答您的问题。 Cloud Run 冷启动(对于我的测试)平均为 2000 毫秒。这意味着您的应用程序需要 38 秒才能启动。分析您的应用程序以减少启动时间。如果您的应用程序启动时间超过几秒钟,那么它可能不适合 Cloud Run。
  • 这是一篇关于不同 Java 框架的性能不错的文章,包括 Spring for Cloud Run ...medium.com/google-cloud/…

标签: java spring-boot google-cloud-platform google-cloud-run


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      您还可以使用一些更复杂的配置来减少启动时间。有几个基准非常详细地比较了不同的 JVM 选项、依赖项和 Spring 配置。我会将它们链接在下面,让您查看并评估什么值得花时间。

      Benchmarks for Spring Boot Start Up

      Let's make SpringBoot app start faster

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2021-09-13
          • 2020-12-30
          • 2021-10-21
          • 2020-04-08
          • 2016-09-08
          • 2020-01-22
          • 2019-09-11
          • 2021-06-09
          • 2020-12-15
          相关资源
          最近更新 更多