将 aws lambda 与 java 和 Spring Cloud Functions 用于其他语言是个好主意?



我用Spring Cloud Function创建了一个AWS lamnda,但我认为在执行lambda时这种方法很慢。

我的lambda非常简单,它只将一个对象保存到数据库中。

将Spring Boot函数用于另一种语言或框架是个好主意吗?

例如,使用phyton、nodejs或其他解决方案。

这是一个很难简单回答的问题。

冷启动

Spring Cloud函数和Spring框架的缺点是,其固有的依赖注入机制在启动时可能会很快花费相当长的时间。Spring框架的某些流行部分自然需要一些时间才能启动:数据库连接、MQ上的消息传递等。

与更轻量级的环境相比,JVM通常需要更多的时间来启动,再加上这一事实,如果您需要或希望避免几秒钟的冷启动,Java并不是最好的选择。根据我的经验,当你开始投资Lambda时,冷启动通常对你打击最大,因为那时你通常会有小的非连续工作负载,这样你的功能就会定期从内存中被逐出,导致你的用户也会定期经历冷启动。

根据我的经验,我建议对直接与使用接口的函数使用更轻量级的运行时环境。这意味着,基本上所有对HTTP调用做出反应的代码都应该使用JavaScript/TypeScript/NodsJS或Python之类的技术。

所以在你上面描述的情况下,肯定是的。尝试使用除Java之外的其他技术。

我的lambda非常简单,它只将对象保存到数据库中。

我的代码库中确实有许多具有类似功能的函数,这些函数通常会在几秒钟内冷启动,在预热状态下需要不到100毫秒的时间。

体系结构

一般来说,一旦无服务器应用程序发展壮大,像Spring Cloud Functions这样的框架仍然是一个工具带中非常重要的工具。通常,一旦你在无服务器和Lambda中站稳脚跟,你就会发现在AWS之上使用托管服务非常简单和有用:数据库、消息队列、电子邮件、S3对象存储等。

很明显,应用程序可以是事件驱动的,并且实际上会引发很多其他事件,但这些事件是由用户通过HTTP调用直接触发的。例如,在我的一个应用程序中,用户可以做以下事情:

  • 上传文件并触发对这些文件的病毒扫描
  • 将消息推入消息队列并生成PDF报告

对于上面提到的用例,我已经有了Java代码。更具体地说是在春天。因此,在Spring Cloud Function中重用这些代码,但将这些运行时间较长的任务与用户的HTTP请求解耦,是完全有意义的。它们可以在后台异步运行,突然冷启动场景就不再那么重要了。

一个本身需要15秒才能生成的报告,对于单个用户来说,如果有时需要18秒,那么它真的不是一个停止。

请参阅亚马逊的最佳实践文档。https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html

将依赖关系的复杂性降至最低。更喜欢在执行上下文启动时快速加载的更简单的框架。例如,比起像Spring Framework这样更复杂的框架,更喜欢像Dagger或Guice这样更简单的Java依赖注入(IoC(框架。

尽管Spring解决了很多开发人员的头痛问题,但它带来了很多包袱,占用了Lambda的执行时间。

最新更新