部署Java AWS Lambda的最佳方式是什么?

8

有两种部署Java Lambda的方法:

  • 创建一个包含所有(未打包)依赖项的“fat” jar,例如使用maven-shade-plugin。
  • 创建一个zip文件,其中包含我的代码和一个lib目录,其中包含所有依赖项作为jar文件。

由于执行我们的简单Lambda所需的环境“启动”需要很长时间(20-30秒),我想知道这两种方法是否比另一种方法更“快”,或者能否进一步加速?


1
我只尝试过fat jar方法,我认为这种方法更快,因为要解压缩的文件较少...但你可以尝试并自行测试;)。我真的不认为任何一种方法会明显更快,但你可以试试看。 - Augusto
我使用Maven shade插件部署了许多“Fat jar” lambdas,大多数在<200ms内启动,具体取决于lambda大小,后续执行在<100ms内运行。你需要看一下以下几点:你的lambda大小是多少?我发现使用1024mb级别可以获得良好的性能。在你启动应用程序时发生了什么。你是否在运行Spring或其他框架? - djhworld
尝试了两种方法,没有注意到区别。但是,我可以区分出3种不同的行为:最初的20-30个“实例”并行处理事件(约150-250/分钟),需要30秒以上的“启动时间”;常规事件处理时间少于100毫秒;在接下来的几个小时里,会有一些孤立的“引导事件”需要约5秒钟。 - skirsch
@djhworld:只有老派的Java东西。 我使用AWS SDK使用KMS解密凭据,然后访问RDS MySQL。 后者似乎需要大约3秒钟的时间才能第一次访问,这可能解释了5秒钟的“启动事件”。 - skirsch
@djhworld 只是出于好奇,我删除了数据库访问。然而,当创建多个实例时,我仍然遇到了巨大的实例化时间。不过,现在分散的实例创建只需要1-1.5秒,这显然少了很多。不知道KMS交互是否也会在客户端或服务器端花费一些一次性的创建时间... - skirsch
显示剩余4条评论
1个回答

4
我发现对于占用空间小于兆字节限制的Lambda函数来说,使用FAT JAR是最佳选择。如果超出兆字节限制,请将库添加到Lambda的lib文件夹中并进行读取。
当JAR包在lib文件夹中时,Lambda函数在容器中首次启动时加载速度会稍微慢一些......第一次会比较慢,后续在同一个容器中的启动非常快......如果进入新容器,则再次变成一次性慢速加载。
这里有一些关于冷启动的好信息: https://hackernoon.com/im-afraid-you-re-thinking-about-aws-lambda-cold-starts-all-wrong-7d907f278a4f

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接