AWS Lambda是否适合实时API Rest?

Lea*_*dro 0 amazon-web-services aws-lambda serverless

我正在学习AWS Lambda,并且担心同步实时请求。lambda具有“冷启动”的事实,对于处理GET请求来说听起来并不好。

假设用户正在使用该应用程序并执行GET HTTP请求以获取产品或产品列表,如果lambda处于睡眠状态,则将需要10秒钟来响应,我认为这不是可接受的响应时间。使用AWS Lambda进行经典(同步响应)API Rest是好还是不好的做法?

jar*_*mod 7

像大多数事情一样,我认为您应该在决定之前进行衡量。许多AWS客户相当成功地将Lambda用作其Web应用程序的后端。

关于Lambda延迟有很多讨论,例如:

您应该衡量代表您的应用及其使用的环境的延迟。

与请求延迟相关的一些重要因素:

  • 冷启动=>更高的延迟
  • 请求模式是冷启动的重要因素
  • 如果您需要在VPC中进行部署(附加ENI =>更高的冷启动延迟)
  • 使用CloudFront-> API网关-> Lambda(更多层=>更高延迟)
  • 编程语言的选择(Java可能有最高的冷启动延迟,而Go则最低)
  • Lambda环境的大小(更多的RAM =>更多的CPU =>更快)
  • Lambda帐户和并发限制
  • 预热策略


Que*_*yot 6

作为 AWS Lambda + API Gateway 用户(使用无服务器框架),我也不得不处理这个问题。

我遇到的问题:

  • 每个 lambda 每天的请求很少(不足以让 lambda 保持温暖)
  • 时间关键型应用程序(用户正在打电话,等待文本转语音应答)

我是如何解决这个问题的:

我们的想法是找到一种方法来经常调用关键的 lambda 表达式,以免它们变冷。
如果您使用 Serverless Framework,则可以使用serverless-plugin-warmup插件来完成此操作。
如果没有,您可以通过创建一个工作程序来复制它的行为,该工作程序将每隔几分钟调用一次 lambdas 以使它们保持温暖。为此,请创建一个 lambda 来调用您的其他 lambda,并安排 CloudWatch 每 5 分钟左右触发一次。确保使用自定义调用你的 to-keep-warm lambdas,event.source这样你就可以在不运行任何实际业务代码的情况下提前退出它们,方法是将以下代码放在函数的最开头:

if (event.source === 'just-keeping-warm) {
  console.log('WarmUP - Lambda is warm!');
  return callback(null, 'Lambda is warm!');
}
Run Code Online (Sandbox Code Playgroud)

根据您必须保持温暖的 lamdas 的数量,这可能是很多“温暖”的电话。不过,AWS每月提供1.000.000 次免费 lambda 调用

  • 换句话说,您使用了 hack,让 lambda 能够处理原本无法处理的内容。 (5认同)