我使用 Spring Cloud Function 创建了一个 AWS lamnda,但我认为执行 lambda 时这种方法很慢。
我的 lambda 非常简单,它只将一个对象保存到数据库中。
对另一种语言或框架使用 Spring Boot Function 是个好主意?
例如使用 phyton、nodejs 或其他解决方案。
我使用 Spring Cloud Function 创建了一个 AWS lamnda,但我认为执行 lambda 时这种方法很慢。
我的 lambda 非常简单,它只将一个对象保存到数据库中。
对另一种语言或框架使用 Spring Boot Function 是个好主意?
例如使用 phyton、nodejs 或其他解决方案。
这是一个很难简短回答的问题。
Spring Cloud Functions 和 Spring 框架的缺点是,其固有的依赖注入机制在启动时会很快花费相当长的时间。Spring 框架的某些流行部分自然需要一些时间才能启动:数据库连接、MQ 上的消息传递等。
再加上与更轻量级的环境相比,JVM 通常需要更多时间来启动这一事实,如果您需要或想要避免几秒钟的冷启动,人们会说 Java 不是最佳选择。根据我的经验,当您开始投资 Lambda 时,冷启动通常会给您带来最大的打击,因为那时您通常会有小的非连续工作负载,因此您的函数会定期从内存中被逐出,从而导致您的用户还将定期经历冷启动。
根据我的经验,我建议对直接与用户交互的函数使用更轻量级的运行时环境。这意味着基本上所有响应 HTTP 调用的代码都应该采用 JavaScript/TypeScript/NodsJS 或 Python 之类的技术。
所以在你上面描述的情况下,绝对是的。尝试使用除 Java 之外的其他技术。
我的 lambda 非常简单,它只将一个对象保存到数据库中。
我的代码库中确实有许多具有类似功能的功能,这些功能通常会在亚秒级的时间内冷启动,并且在预热状态下需要不到 100 毫秒的时间。
一般来说,一旦无服务器应用程序发展起来,像 Spring Cloud Functions 这样的框架仍然是工具带中非常重要的工具。通常,一旦您涉足无服务器和 Lambda,您就会发现在 AWS 之上使用托管服务非常简单且有用:数据库、消息队列、电子邮件、S3 对象存储等。
然后很明显,应用程序能够被事件驱动,并且实际上引发了许多其他事件,但这些事件是由用户通过 HTTP 调用直接触发的。例如,在我的一个应用程序中,用户可以执行以下操作:
对于上面提到的用例,我已经有了 Java 代码。更具体地说是在春天。因此,仅在 Spring Cloud Function 中重用此代码,但将这些运行时间较长的任务与用户 HTTP 请求分离是完全有意义的。它们可以在后台异步运行,突然间冷启动场景不再那么重要了。
一个报告本身需要 15 秒才能生成,对于个人用户来说,如果不时需要 18 秒,这真的不是什么大问题。
请参阅 Amazon 的最佳实践文档。 https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html
最小化依赖项的复杂性。更喜欢在执行上下文启动时快速加载的更简单的框架。例如,更喜欢更简单的 Java 依赖注入 (IoC) 框架,如 Dagger 或 Guice,而不是更复杂的框架,如 Spring Framework。
尽管 Spring 解决了很多开发人员的头痛问题,但它带来了很多包袱,并且占用了 Lambda 执行时间。