“冷”启动S3,DynamoDB,KMS或其他

时间:2018-03-08 09:10:53

标签: amazon-web-services amazon-s3 aws-lambda amazon-dynamodb

我使用NodeJs AWS Lambdas。如果我没有拨打我的S3,DynamoDB或KMS一段时间(大约8小时或更长时间),我拨打的第一个电话通常很慢 - 最多5秒。查询本身并不复杂 - 即获取0.2Kb的S3对象,按索引查询DynamoDB表。

因此,看起来AWS在没有使用这些资源时会“休眠”这些资源,而且当我们第一次打电话给他们一段时间后他们会花一些时间从“冬眠”状态返回。这是我的假设,但我在文档中找不到任何关于它的信息。所以,问题是以下两个:

  1. 我对“冬眠”的假设是否正确?
  2. 如果第一点是正确的,那么有没有办法减轻对AWS服务的这些“冷”调用,除非每隔X分钟调用一次这些服务“温暖”?
  3. 修改

    为了避免混淆 - 这不是Lambda的冷启动。我知道它们存在,它们在功能延迟方面有自己的共享。我测量的时间是调用S3 / DynamoDB等的确切时间 - 在lambda启动之后。

3 个答案:

答案 0 :(得分:3)

很可能是lambda函数正在休眠,而不是其他服务:

  

在没有调用AWS Lambda函数后发生冷启动   长时间使用导致增加   调用延迟。

https://medium.com/@lakshmanLD/resolving-cold-start%EF%B8%8F-in-aws-lambda-804512ca9b61

是的,你可以设置一个cloudwatch事件来保持你的lambda功能温暖。

答案 1 :(得分:1)

我们在调用SSM和DynamoDB时遇到了相同的问题。可能不是这些服务进入了休眠状态,而是将调用它们的参数缓存在lambda容器中,这意味着在生成新容器时需要重新创建它们。

不幸的是,除了不定期ping lambda之外,我们没有找到其他解决方案。在这种情况下,您应该在ping中执行对服务的调用,以缩短加载时间。另请参见下面的基准。

Benchmark of first-call loading times

答案 2 :(得分:0)

AWS(zoewangg)确认了1.11.x Java SDK 1中的启动缓慢问题。

主要原因之一是1.11.x SDK在以下位置使用ApacheHttpClient 引擎盖并初始化它可能会很昂贵。

签出https://aws.amazon.com/blogs/developer/tuning-the-aws-java-sdk-2-x-to-reduce-startup-time/