2016-05-24 61 views
4

我目前正在建设使用AWS LAMBDA与Serverless Framework网络API。如何优化AWS Lambda?

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

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

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

+3

如果你不想让冷启动延迟,你可以尽量保持平的API每分钟,以防止实例去因闲置睡觉。设置更高的RAM也会加速冷启动,因为这也会影响CPU的分配。但是对于30多岁的超时,它绝对是错误的。 – Nick

回答

3

你已经走两个问题:

  1. 1-3秒的延迟。在使用Lambda时,这是预期的和有据可查的。正如@Nick在评论中提到的那样,阻止你的容器进入睡眠状态的唯一方法就是使用它。您可以使用Lambda Scheduled Events来使用速率表达式rate(1 minute)每分钟执行一次您的功能。如果向函数添加一些参数以帮助区分实际请求和这些ping请求之一,则可以立即返回ping请求,然后解决了问题。它会让你付出更多,但如果有的话,我们可能每个月都会讲便士。 Lambda有一个慷慨的免费层。

  2. 的30秒延迟是不寻常的。我一定会检查你的CloudWatch日志。如果您看到日志来自您的函数正常工作但没有从您看到30秒超时的日志,那么我会认为问题出在API网关上,而不是用于Lambda。如果你确实看到日志,那么他们可以帮助你排除故障。另一个要检查的地方是AWS Status Page。我有时会看到Lambda函数在什么时候超时并且间歇性地响应,我只是为了认识到亚马逊最终存在一个问题,他们正在努力。

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