代码之家  ›  专栏  ›  技术社区  ›  Matthew Blackford Raphael R.

lambda限制低于并发限制

  •  8
  • Matthew Blackford Raphael R.  · 技术社区  · 6 年前

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

    奇怪的是,在cloudwatch度量中,当我们受到限制时,并发请求的峰值约为600或更低。以这个云表为例:

    Lambda Throttling in CloudWatch Metrics

    以前有人经历过吗?你认为这是为什么?我们能怎么办?

    更多信息

    • 这个图表覆盖了我们整个地区的所有lambda。
    • 当节流发生时,它发生在所有lambda实例上。
    • 我们主要通过api网关触发lambdas,但也有一些是通过sns(相当高的数据速率)触发的。
    • 我们在所有API面前都有CyrdFrand,并且其中一些我们有5秒的缓存时间(对于超级频繁请求的API——节省了$$)。

    另外,这里还显示了在同一时间段内的总调用计数和平均持续时间。很难知道什么是因果关系(因为节流而延长持续时间,反之亦然,因为有些lambda确实调用了其他lambda)。请参阅合适的轴,因为刻度是非常不同的。

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  2
  •   Commit    6 年前

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

    基本上,您的lambda函数有多少实例可以在突发负载下并发运行,这个限制不同于每个区域的lambda并发限制。

    你可以在这里找到更多关于它的信息:

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

    相关部分:

    aws lambda动态地扩展函数执行以响应增加的通信量,直到达到您的并发限制。在持续的负载下,函数的并发性会爆发到初始级别,即每个区域500到3000个并发执行。在初始突发之后,函数的容量每分钟增加500个并发执行,直到负载被容纳,或者区域中所有函数的总并发性达到极限。

        2
  •  5
  •   Tom Nijs    6 年前

    这似乎很熟悉。我们有完全相同的问题,我们感到困惑,因为我们的并发限制已经增加,但不幸的是,这不是神奇的修复无限可扩展的无服务器应用程序。

    我猜你已经用完了EnI(弹性网络接口),因为每个lambda函数在初始化之前需要一个。默认限制为350个同时附加的ENI。

    您的600个并发lamba是每分钟分组的,所以我想一分钟有两个lamba重叠,因此超过350个。

    为了研究这一点,进入API网关的全局设置,并为它提供一个IAM角色ARN,它可以访问PuthLoCo到CuldWAT。 然后进入单独的api网关api并启用详细日志记录。

    当api网关试图调用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"
    }
    

    如果是这样的话,你就需要要求增加埃尼集团的限额。