【问题标题】:AWS Serverless application load time with the Spring framework使用 Spring 框架的 AWS 无服务器应用程序加载时间
【发布时间】:2017-11-16 14:00:07
【问题描述】:

我正在使用无服务器架构在 AWS 中构建一个 Web 应用程序。

该应用程序的目的是公开一个公共 API 以上传来自世界各地的文件。

我使用 AWS API-Gateway 和 Lambda 来执行我的代码并使用 S3 作为存储。

我知道使用 Java Spring 框架编写我在我的 Lambda 函数中部署的代码是非常有可能的并且得到很好的支持(即使是像无服务器框架这样的第 3 方)。

但是,真的推荐吗? Spring 应用程序通常需要 30 秒或更长时间才能完全加载,而 Lambda 应该立即运行。

为什么 AWS 甚至支持这个选项(因为这听起来是个非常糟糕的主意)?

【问题讨论】:

  • 我希望您知道 Spring 框架是一个非常宽泛的术语。如果我没记错的话,大多数时候人们在编写 Lambda 时都会使用独立的 Spring Boot。不是沉重的 Spring 组件。换句话说,使用 Spring 编写 Lambda 代码的人使用的是 Spring 的最小版本。

标签: amazon-web-services aws-lambda serverless-framework serverless-architecture


【解决方案1】:

Java 是 AWS Lambda 支持的编程语言之一。可以使用 Java 运行应用程序,您只需考虑预热时间,如果这适合您的用例 - 然后使用它。如果您没有收到请求,您还可以使用 SNS 和 lambda 挂钩来保持温暖

【讨论】:

  • 我不是在谈论可能不超过 1-2 秒的 java 预热。我说的是 Spring 应用程序加载时间,它可能需要 30 秒才能启动。我在问为什么当它看起来是最糟糕的选择时他们会支持这样一个选项(也许我错过了一些东西,他们以一种不需要太多时间来加载的方式配置它)
  • 如果你的 Spring 应用上下文加载需要 30 秒,我怀疑你根本没有理解微服务的概念。
  • 应用初始加载时间在这方面与微服务几乎没有关系。我也没有在谈话的任何地方提到微服务。如果你运行一个 Spring Boot 应用程序,加载通常需要几秒钟。这只是一个事实。这不是“我的”春季申请。既然花了这么长时间,我想知道为什么有人会鼓励在环境 (Lambda) 中使用这种解决方案,其中最重要的是你启动并返回响应的速度
【解决方案2】:

将 Java 与 AWS lambda 结合使用非常好,但 Lambda 是函数而不是应用程序!

所以你应该避免使用像 Spring 这样的框架,因为你不需要它。

问题是你想在你的函数中实现什么,为什么你需要一个框架来执行这么少量的代码? 你的用例是什么?

【讨论】:

    【解决方案3】:

    就我个人而言,我会避免尽可能地为 AWS lambda 使用 java 运行时。我知道假设您正在考虑将现有实现迁移到微服务中,那么使用 java 是非常诱人的。但是与其他运行时相比,您总是要付出预热时间慢的代价。您还可能会错过 Java 编译器优化,因为 lambda 调用的次数可能不足以触发 C1 和 C2 编译。

    如果您打算编写精益实现,我的偏好是仅使用 java 进行 lambda,这意味着没有 spring、hibernate 等。

    【讨论】:

      猜你喜欢
      • 2017-10-10
      • 1970-01-01
      • 2019-10-12
      • 2020-06-20
      • 2019-02-13
      • 2020-05-18
      • 2021-10-05
      • 2019-05-28
      • 1970-01-01
      相关资源
      最近更新 更多