5

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

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

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

如此处所述,我假设 1-3 秒用于初始化一个新容器。但是,我想知道是否有办法减少这个时间,因为 1-3 秒或网关超时对于生产使用来说并不是一个理想的选择。

4

1 回答 1

5

你有两个问题:

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

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

这是一篇博客文章,其中包含有关 Lambda 容器重用的更多信息,虽然有点旧,但仍然有一些很好的信息。

于 2016-06-06T22:42:31.940 回答