【发布时间】: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