如果我使用 ECR 映像/容器,AWS Lambda 函数的冷启动会花费更长的时间吗?

use*_*676 21 amazon-web-services aws-lambda amazon-ecr

如果我使用 ECR 中的图像而不是 S3 中的 jar 作为源代码,AWS Lambda 函数的冷启动是否会花费更长的时间?我认为是的,因为由于额外的操作系统层,图像更大(尽管......常规 Lambda 也应该有一些操作系统层),但我找不到任何性能基准。

谢谢!

nit*_*jri 17

我对这里其他答案的结论感到惊讶。

这取决于

这篇博文之前链接过,它执行数据测试。从那篇文章:

在此输入图像描述 在此输入图像描述

如果你的函数是纯函数。正如大多数人所说,它的性能会更好(第一张图),但是一旦你的函数更像一个框架,zip 的大小就会增加,所需的只是几兆,而 S3 太慢了。

需要明确的是,您的容器/程序需要具有快速启动时间,但这与大小或 lambda 无关。

第二张图令人难以置信,5GB 容器装载在< 2s.


小智 8

“Lambda 还优化图像并将其缓存在函数运行的位置附近,因此冷启动时间与 .zip 存档相同”来自https://aws.amazon.com/blogs/compute/working-with-lambda-layers -和容器图像中的扩展/


Erm*_*ary 7

是的,您将有更长的冷启动时间,从而导致更长的响应时间

它实际上取决于您从 ECR 下载的映像,但一般来说,它会更慢,因为使用 Docker 容器而不是 Lambda 为您管理运行时环境(这减少了启动新执行所需的时间)冷 Lambda 环境)。

主要原因是ECR 映像的大小,这也是大型 Lambda ZIP 档案受到限制的原因。

您可以在此处查看大小将如何影响冷启动期间运行的 2 个任务,AWS 将其定义为“下载代码启动新的执行环境”

冷启动持续时间任务和调用持续时间任务

我建议您绝对使用托管运行时而不是容器,除非您需要使用它们,因为它将自动导致更快的执行速度。

  • 从理论角度来看,这是有道理的(至少就冷启动而言),但是您有任何证据支持“延迟更高”的说法吗? (6认同)

Luc*_*asz 3

Docker 镜像冷启动肯定会更慢。这是因为更大的尺寸和额外的操作系统。Lambda 将您的代码加载到其托管环境中,而不是加载整个 docker 映像。

参考链接:比较 docker 与本机 java lambda 的一些图表: https: //mikhail.io/serverless/coldstarts/aws/

有关 lambda 容器的其他信息: https://chariotsolutions.com/blog/post/getting-started-with-lambda-container-images/