【问题标题】:Should only one Spring Cloud Function exist within a Spring Boot application?Spring Boot 应用程序中应该只存在一个 Spring Cloud Function 吗?
【发布时间】:2018-10-16 00:41:33
【问题描述】:

Spring Cloud Functions 引入了 Spring 功能,如自动配置、依赖注入、指标等,但与 Java 中的普通 AWS lambda 函数相比,它们感觉相当重量级。

启动时间要长得多等等。所以,我很好奇这个想法是让 Spring Boot 应用程序提供多个功能,其中包含 Spring Cloud Functions,还是每个应用程序应该有一个功能?

两个示例项目来演示启动时间的差异: - https://github.com/marcthomas2013/simple-aws-spring-cloud-function - https://github.com/marcthomas2013/simple-aws-lambda

将这两个项目分别部署为 AWS Lambda 函数并保持环境详细信息(内存等)相同,但 Spring Cloud 函数的超时需要增加到 30-45 秒。

【问题讨论】:

  • 我很想看到一些证据表明启动时间更长(比什么?)。除此之外,我不太确定这个问题是什么意思:AWS 每次部署只运行一个函数,但很明显 Spring Cloud Function 允许您根据需要将它们打包在一起。这与对启动时间的关注有什么关系?
  • 感谢您对戴夫的评论。当我谈到启动时间时,我指的是 Spring Cloud Function vs Pure AWS Lambda。与普通的 AWS lambda 函数相比,spring 云函数的第一次调用的预热时间要慢一些。将功能捆绑在一个 Spring Boot jar 中的能力似乎确实有益,但最好了解这是否是最佳实践。作为开发人员,我们可以做很多事情,但这并不一定意味着这是一件好事。
  • 我将尝试创建几个类似的项目来演示加载时间差异。这不是很大的区别,但有区别。我在想,如果我要创建一个包含许多功能和支持代码的 Spring Cloud 功能应用程序,那可能会开始增加 Spring Boot 进一步启动的时间。我只是想在发现问题之前了解是否存在问题。
  • JVM 的启动时间与加载的类数量高度相关,与 Spring 应用程序中的 bean 数量完全无关。所以我认为包装不会有任何不同。你不应该做出那样的假设。
  • 我用两个示例项目更新了原始问题,以展示普通 Java AWS Lambda 函数和 Spring Cloud 函数之间的启动时间差异。

标签: java spring-boot aws-lambda spring-cloud


【解决方案1】:

我正在考虑自己的交易。快速预热 vs Spring Universe。

SpringBoot 项目需要(很多)更长的时间来初始化,因为 Spring 需要做很多工作才能开始。优点当然是现在您拥有 Spring 的强大功能和便利性,而不是自己实现所有内容。

我缺少的是一种在一个 Lambda 中部署一整套函数的方法,该 Lambda 可以服务于许多不同的请求。我正在考虑实现一种调度模式,我只注册一个接收事件的函数。然后它分析事件,将其分派到同一个 lambda 中的正确处理程序以进行进一步处理。这样,我注册的 lambdas 就少了很多(每个应用程序 1 个,每个函数 1 个)。预热时间不是一个大问题,因为有不同的预热和保持 lambda 温度的方法。

因此我会选择 SpringBoot,多功能 Lambda

【讨论】:

  • 感谢您的回复。春天宇宙肯定有好处,但问题是你需要多少简单的 lambda 表达式。我不是专家,但您的第二点似乎有点缺少 lambda 函数存在于一份工作和一份工作的意义。
  • 我也在寻找一种在同一个 aws lambda 函数中使用 Spring Cloud Function 部署多个函数的方法。事实上,ExpressJS+NodeJS 等其他技术也允许这样做。有什么解决办法吗?
猜你喜欢
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2015-12-26
  • 2018-08-28
  • 2017-11-22
  • 2020-01-19
相关资源
最近更新 更多