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 Antwort
0

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

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

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

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

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

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

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

profile picture
EXPERTE
beantwortet vor 8 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen