【问题标题】:Thawing Lambda functions doesn't decrease latency解冻 Lambda 函数不会减少延迟
【发布时间】:2017-10-17 08:44:49
【问题描述】:

我正在使用serverless-warmup-plugin 运行一个每 10 分钟调用一次 Lambda 函数的 cron。 Lambda 函数的代码如下所示:

exports.lambda = (event, context, callback) => {
    if (event.source === 'serverless-plugin-warmup') {
        console.log('Thawing lambda...')
        callback(null, 'Lambda is warm!')
    } else {
        // ... logic for the lambda function
    }
}

这在纸面上有效,但实际上 cron 不会保持 Lambda 函数温暖,即使它每 10 分钟成功调用一次。

当通过不同的事件源(除了 cron)调用 Lambda 时,代码执行大约需要 2-3 秒。一旦以这种方式执行,Lambda 实际上会预热并在 400 毫秒内开始响应。它会保持一段时间的温暖。

我在这里错过了什么?

【问题讨论】:

  • 10 分钟?我想在没有活动的 10 分钟内足以让 lambda 容器冷却。例如,您是否尝试减少到​​ 5 或 3 分钟?
  • 您是否还检查了 cloudwatch 事件? (就像要执行的 cron 一样)。正如汤姆所说,10 分钟可能足以让 lambda 冷却下来。刚刚在读这个medium.com/build-acl/…
  • 我认为问题与 cron 的频率无关,因为即使我在 cron 调用函数 10 秒后调用该函数,它仍然会经历冷启动(3 秒响应时间),以下调用在 400 毫秒内响应。就好像来自 cron 的调用并没有影响到这一切。
  • 检查云观察日志中插件创建的 lambda。您可能没有添加允许它连接到您的其他 lambda 的权限。
  • 插件创建的 lambda 日志看起来不错,它拥有所有必要的 IAM 权限并成功调用了它应该调用的 lambda。这些成功的调用也会出现在目标 lambda 的日志中。

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


【解决方案1】:

正如official documentation 所说:

注意

当您编写 Lambda 函数代码时,不要假设 AWS Lambda 总是重复使用容器,因为 AWS Lambda 可能会选择不重复使用容器。根据各种其他因素,AWS Lambda 可能会简单地创建一个新容器,而不是重用现有容器。

试图让 Lambda 容器保持正常运行似乎是一种“糟糕的架构设计”,但是,当不同的事件源触发一个新容器时,显然这是一种正常情况,您的加热容器没有被使用。

【讨论】:

    猜你喜欢
    • 2018-10-31
    • 2018-04-10
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多