【问题标题】:How to improve lambda performance?如何提高 lambda 性能?
【发布时间】:2020-03-31 09:10:42
【问题描述】:

您好,我正在尝试深入了解 lambda 架构。以下是我对 lambda 的理解。

每当我们创建 lambda 函数时,容器都会启动。如果我们选择 python 作为运行时,python 容器将启动。现在有冷启动。例如,如果我们长时间调用 lambda,容器将变为非活动状态。它将调用新容器,并且需要一些时间来启动新容器。这是冷启动。现在我在这里有点困惑。如果我想避免这种延迟,那么正确的方法是什么?我们可以使用 Cloud Watch 每 5 分钟触发一次 lambda。还有其他好的方法来处理这个吗? 还有 /tmp 文件夹,我们可以在其中存储静态文件。所以 /tmp 不是容器的一部分?每当新容器启动时,/tmp 数据会丢失还是保留?有人可以帮助我理解这些概念并告诉我使用最佳方法来处理这个问题吗?任何帮助,将不胜感激。谢谢你。

【问题讨论】:

  • 我认为在冷启动期间不会出现任何类型的容器旋转。只是将您的 python 应用程序加载到环境中,在冷启动期间可能需要一些时间,最多几秒钟。从最近开始,您可以configure Provisioned Concurrency to avoid cold starts alltogether
  • 但这意味着如果最大。您的解决方案可以接受冷启动期间的两到三秒延迟,无论如何冷启动都不应该让您担心。
  • 好的,谢谢您的回答。所以我们现在不必遵循任何最佳实践,AWS 会为我们处理吗?你能告诉我 lambda 中的 /tmp 是什么吗?
  • 我无法确定,但不希望 /tmp 中的数据在调用中可用。它可能仅在一次调用期间可用。
  • 您遇到什么问题了吗? Lambda 的强大之处在于可扩展性。默认情况下,您可以同时运行 1000 个实例。如果您担心持久性本地存储,那么您就想错了 - 您是否想要所有 1000 个实例的本地存储?

标签: amazon-web-services aws-lambda serverless


【解决方案1】:
  • 您是对的,存在冷启动问题,但据观察,这取决于很多因素(运行时、内存、zip 大小......例如,与 python 相比,java lambda 将具有更多的冷启动)和基本上,对于用户定义的 VPC 中的 lambda,这是一个大问题。其中存在创建弹性网络接口然后调用 lambda 的开销。但是最近的推出改变了这一点,现在你应该看不到这个问题。 improved-vpc-networking for lambda
  • 同样在 reinvent 2019 中,aws 宣布了Provisioned Concurrency,因此使用预置并发的 lambda 函数将以一致的启动延迟执行。
  • 使用预置并发,函数可以立即为 每次调用都具有一致的启动延迟的流量突发 到指定的比例。客户只需为其配置的并发量和配置的时间段付费。
  • 关于/tmp,请注意每个 Lambda 函数在其自己的 /tmp 目录中接收 512MB 的非持久磁盘空间。所以你不能依赖它。 Lambda limits 如果您正在寻找持久存储,您应该使用 S3。

【讨论】:

猜你喜欢
  • 2017-08-02
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 2021-06-13
  • 2020-09-09
  • 2012-06-24
  • 2021-05-28
相关资源
最近更新 更多