DynamoDB的第一次请求非常缓慢。

0

【以下的问题经过翻译处理】 你好, 在基于Amazon APIGateway、Lambda(Java 8)和DynamoDB构建一个简单的无服务器CRUD API时,我遇到了第一个DynamoDB请求响应缓慢的问题。 通常情况下,预期响应时间在10毫秒左右. 但是当我第一次执行Lambda函数时,响应时间约为7秒。

我的Lambda函数使用了Java SDK v2,我也参照了这篇文章中的相关做法:[https://aws.amazon.com/blogs/developer/tuning-the-aws-java-sdk-2-x-to-reduce-startup-time]

以下是Lambda执行DynamoDB请求的一些测试结果:

|| 平均响应时间 | | --- | --- | --- | |Lambda 512mb| 7秒 | |Lambda 1024mb| 5秒 | |Lambda 2048mb| 3.5秒 | |仅创建DynamoDB客户端512mb Lambda| 3秒 |

注:所有这些响应都是来自冷启动Lambda。我的Java Lambdas的冷启动平均时间为1.5秒。

是否有任何官方资源表明第一个DynamoDB请求会如此缓慢呢?

谢谢。

1 回答
0

【以下的回答经过翻译处理】 值得使用类似于X-Ray的工具来确定延迟的来源。问题可能与Java SDK有关,但如果没有实际数据,很难说。我在Lambda中使用Python进行了大量的工作 - 冷启动时间非常短,使用DynamoDB的首次请求时间也非常短。

Lambda函数的响应时间随着内存的增加而降低,因为分配给它们的CPU与内存成比例 - 内存越多,CPU越多,这解释了其中一些差异。

一般来说,我建议客户优化他们的代码,以减少冷启动时间。其中的一种方法是仅在需要时才惰性加载/初始化库,而不是在函数开始时。

使用像AWS X-Ray类似的工具来精确确定延迟是从哪里产生的。

问题很可能与Java SDK有关,但是没有实际数据,我们很难下定论。我在Lambda中使用Python做了很多工作 - 冷启动时间非常短,而与DynamoDB的首次请求时间也同样非常短。

对于内存较多的Lambda函数,响应时间更低,因为分配给它们的CPU与内存成正比 - 更多的内存就意味着更多的CPU,这也解释了其中的部分差异。

总的来说,我建议优化他们的代码以减少冷启动时间。其中一个方法是仅在需要某些库时做懒加载/初始化,而不是在函数启动时就加载。

profile picture
专家
已回答 8 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则