Lambda限制低于并发限制

Mat*_*ord 9 throttling amazon-web-services aws-lambda aws-api-gateway

我们使用Lambda为通过新闻媒体网站访问的API(通过API网关)供电,接收波动但高负载的流量.我们开始体验限制,因此我们将并发限制提高到2000.但是,我们仍然每天多次经历限制.

奇怪的是,在CloudWatch指标中,当我们受到限制时,并发请求达到600或更低.请参阅此CloudWatch图表作为示例:

CloudWatch指标中的Lambda限制

有谁之前经历过这个吗?为什么你认为这种情况发生了?我们对于它可以做些什么呢?

更多信息

  • 此图表涵盖了整个地区的所有Lambdas.
  • 发生限制时,它会在所有Lambda实例中发生.
  • 我们主要通过API网关触发Lambdas,但有一些是通过SNS触发的(相当高的数据速率).
  • 我们在所有API前面都有CloudFront,其中一些我们有5秒的缓存时间(对于超级频繁请求的API - 节省我们$$$)

此外,这里的图像还显示了同一时间段内的总调用次数和平均持续时间.很难知道是什么因果关系(由于节流导致持续时间上升,反之亦然,因为一些lambdas会调用其他lambda).请查看相应的轴,因为刻度差异很大.

在此输入图像描述

Tom*_*ijs 5

这似乎很熟悉。我们遇到了完全相同的问题,我们感到困惑,因为我们增加了并发限制,但是不幸的是,这并不是无服务器应用程序无限扩展的神奇解决方案。

我的猜测是您用完了ENI(弹性网络接口),因为每个lambda函数在初始化之前都需要一个。默认限制是350个并发连接的ENI。

每分钟对600个并存的lambas进行分组,因此我想其中有两个在一分钟内重叠,因此超过350个。

要对此进行调查,请进入API网关的全局设置,并为其提供一个IAM角色arn,该角色可以访问CloudWatch的putlog。然后进入各个API网关api并启用详细日志记录。

当API Gateway尝试调用lambda函数时发生的任何错误均应显示在此处,而不是被忽略(默认情况下)。

如果错误看起来像:

{
    "Message": "Lambda was not able to create an ENI in the VPC of the Lambda function because the limit for Network Interfaces has been reached.",
    "Type": "User"
}
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,您需要请求增加ENI的限额。


Com*_*mit 3

我认为这与 Lambda 并发突发限制有关。

基本上,在突然负载下可以同时运行的 Lambda 函数实例数量是有限制的,并且此限制与每个区域的总体 Lambda 并发限制不同。

您可以在这里找到更多相关信息:

https://docs.aws.amazon.com/lambda/latest/dg/scaling.html

相关部分:

AWS Lambda 动态扩展函数执行以响应增加的流量,直至达到您的并发限制。在持续负载下,函数的并发性会突然达到 500 到 3000 个并发执行之间的初始水平,具体情况因区域而异。在初始突发之后,函数的容量每分钟额外增加 500 个并发执行,直到满足负载或该区域中所有函数的总并发数达到限制。