【问题标题】:How to optimize AWS Lambda?如何优化 AWS Lambda?
【发布时间】:2016-09-21 01:13:47
【问题描述】:

我目前正在使用带有 Serverless Framework 的 AWS Lambda 构建 Web API。

在我的 lambda 函数中,它们每个都连接到 Redis (elasticache) 和 RDB (Aurora, RDS) 或 DynamoDB 以检索数据或写入新数据。 我所有的 lambda 函数都在我的 VPC 中运行。

一切正常,除了当第一次执行 lambda 函数或在最后一次执行后一段时间执行时,执行 lambda 函数需要相当长的时间(1-3 秒),或者有时它甚至响应网关超时错误(大约 30 秒),即使我的 lambda 函数配置为 60 秒超时。

here 中所述,我假设 1-3 秒用于初始化新容器。但是,我想知道是否有办法减少这个时间,因为 1-3 秒或网关超时并不是真正适合生产使用的理想选择。

【问题讨论】:

  • 如果您不希望冷启动延迟,您可以尝试每分钟 ping 一次您的 API,以防止实例因空闲而进入睡眠状态。设置更高的 RAM 也会加快冷启动,因为这也会影响 CPU 分配。但是对于 30s 的超时,它肯定是有问题的。

标签: node.js aws-lambda serverless-framework


【解决方案1】:

你有两个问题:

  1. 1-3 秒延迟。在使用 Lambda 时,这是预期的并且有据可查。正如 @Nick 在 cmets 中提到的,防止容器进入睡眠状态的唯一方法是使用它。您可以使用Lambda Scheduled Events 使用速率表达式rate(1 minute) 每分钟执行一次您的函数。如果您在函数中添加一些参数来帮助您区分真实请求和这些 ping 请求之一,您可以立即返回 ping 请求,然后您就解决了您的问题。它会花费你更多,但如果有的话,我们可能会谈论每月几便士。 Lambda 有大量的免费套餐。

  2. 30 秒延迟不正常。我肯定会检查您的 CloudWatch 日志。如果您在函数正常工作时看到日志,但在看到 30 秒超时时没有日志,那么我认为问题出在 API Gateway 而不是 Lambda。如果您确实看到了日志,那么也许它们可以帮助您进行故障排除。另一个检查的地方是AWS Status Page。我有时会看到 Lambda 函数超时并间歇性地响应,我拔掉头发后才意识到 Amazon 那边出了问题,他们正在解决这个问题。

这是一个blog post with additional information on Lambda Container Reuse,虽然有点旧,但仍然有一些很好的信息。

【讨论】:

    猜你喜欢
    • 2018-11-20
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多