【问题标题】:Reason for slow upload time to s3 from lambda从 lambda 到 s3 的上传时间缓慢的原因
【发布时间】:2022-06-14 20:19:55
【问题描述】:

我们在 ec2 上有一个服务,我们需要将 许多 个文件上传到 s3 存储桶,但请求数小于 s3 上配置的最大数量。当我们使用 ec2 实例上传时,它在将近 200 毫秒内上传每个文件。具有相同内容长度的相同文件在 AWS lambda 上花费更多时间。时间增加有什么特别的原因吗? 我发现某些文件的时间有所增加,而其他文件则没有。对于相同的内容长度,有些文件需要大约 3-4 秒。 ec2 实例是 c5.large,我为 AWS lambda 函数配置了 10 GB。 存储桶与 lambda 函数位于同一区域。此时间是通过测量要上传数据之前和上传完成之后的时间从日志中获得的。这些文件是通过处理应用程序内部数据库调用的数据生成的。

【问题讨论】:

  • 这些文件来自哪里?您的 lambda 是否必须先从其他存储下载它们,然后再上传到 S3?
  • 看看这是否是 lambda 的冷启动问题这里是问题和缓解措施的相关链接aithority.com/it-and-devops/cloud/…
  • @Marcin 数据是从数据库中检索的,但是从数据库中检索数据的时间没有区别
  • 你怎么知道的?也许你的 lambda 做一些不同的事情来访问数据库然后你的实例,例如使用不同的编程语言、库等。
  • 您是在 api 调用之前和之后进行记录,还是在多行执行过程中记录?我建议使用 X 射线来获取有关每个过程需要多长时间的详细信息

标签: java amazon-web-services amazon-s3 amazon-ec2 aws-lambda


【解决方案1】:

很遗憾,冷启动时间没有好办法。

您可以使用预配置并发,但这意味着要为永远在线的 Lambda 付费,而 Java 的“仅在需要时加载类”设计意味着您需要编写显式代码以在第一次执行环境之前“预热”执行环境请求进来了。

可能有用的一件事是限制并发 Lambda 的数量。如果您向 Lambda 发起请求,请it will spin up as many execution environments as it can 处理这些请求。因此,您将为每个新的调用环境支付冷启动时间。

但是,如果您使用 reserved concurrency,则指定最大并发实例数。您将为每个实例支付冷启动罚款,但随后 Lambda 将尝试重用实例而不是启动新实例。但是,如果没有任何请求,它将关闭环境(因此您无需为它们付费,但会在下一次爆发时产生冷启动时间)。

您还可以使用 SQS 队列来平滑突发:将每个文件添加到队列中,配置具有保留并发的并发 Lambda 的数量,并让它们慢慢地通过队列。

最后,如果您所做的只是上传文件,那么值得考虑使用不同的实现语言,例如 Python。

【讨论】:

    猜你喜欢
    • 2015-12-19
    • 2015-09-21
    • 2019-09-13
    • 2011-02-15
    • 2014-07-29
    • 2014-09-16
    • 2016-03-29
    • 1970-01-01
    • 2020-05-11
    相关资源
    最近更新 更多