【问题标题】:Does AWS API gateway calls takes long if executed multiple times in 1 second?如果在 1 秒内执行多次,AWS API 网关调用是否需要很长时间?
【发布时间】:2021-03-22 20:01:03
【问题描述】:

API 网关连接到一个休眠 4 秒的 lambda 函数。当我在 1 秒内执行 API 20 次时,前几个调用在 5 秒内完成作业,但其他调用需要更多时间,例如:12 秒、20 秒,有时会遇到超时错误

  1. API 是否依赖于之前的调用(即第 20 次 API 调用才能执行,其他之前的调用必须完成?
  2. 如何解决这个问题?

【问题讨论】:

    标签: python amazon-web-services amazon-ec2 aws-lambda aws-api-gateway


    【解决方案1】:

    使用 AWS API Gateway 和 AWS Lambda 时需要考虑的一些事项。

    创建 Lambda 函数的实例(执行环境)需要一段时间。这称为冷启动。如果您的 Lambda 在 VPC 中运行,这可能需要更长时间。不过应该不会少于几秒钟。

    一旦 lamdba 运行,API Gateway 就可以重用这个实例。如果一段时间内没有交通,Lamdba 就会回到冷藏库。通过 API Gateway 的下一个请求将创建另一个 Lambda 实例。

    如果有足够的流量,AWS Lambda 会触发并发执行,这意味着会有更多的 Lambda 实例。这称为自动缩放。再次,它需要一个冷启动。您无法控制何时运行或运行多少 Lambda 实例。欢迎使用无服务器。

    AWS Lambda 将其执行时间限制为 15 分钟。您的函数不能超过此限制。它将被硬关机。

    API Gateway 的集成超时时间为 30 秒。这意味着您的 Lambda 需要在 30 秒内完成。否则 API Gateway 在您的函数仍在运行时返回 502。

    【讨论】:

    • 谢谢,劳帕赫。如何解决这个问题?我的 lambda 函数连接到 EFS 以获取包。我制作了一个休眠 5 秒的示例代码。当我在连接到 EFS 的情况下多次执行 API 时,API 在第 5 次调用后抛出超时错误但没有连接,即使我调用 30 次,睡眠代码也能顺利运行。我无法将 python 包直接上传到 Lambda,因为 lambda 的限制是 250MB,而我的包的大小超过 500MB。 EFS 导致延迟问题。那么如何获取 python 包以使 lambda 工作顺利呢?有其他选择吗?
    • 为什么不试试 Lambda 层?消除对 EFS 的调用以下载包。
    • 部署包中不是lambda层吗?所以再次限制 250MB 是正确的。 “函数和所有层的总解压大小不能超过解压部署包大小限制 250 MB”——AWS 网站 (docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html)
    猜你喜欢
    • 1970-01-01
    • 2021-05-23
    • 2018-08-19
    • 2020-04-27
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多