AWS Lambda-同步与异步

use*_*673 6 asynchronous amazon-web-services aws-lambda aws-api-gateway

我最近一直在与Lambda一起玩,并且正在使用API​​ Gateway和Lambda创建API。我有一个lambda函数,该函数返回一个JSON和一个调用该函数的API网关端点。通过这种简单的设置,一切都可以正常工作。

我尝试使用loadtest npm模块对API网关端点进行负载测试。尽管Lambda处理并发请求(尽管在执行过程中平均等待时间有所增加),但当我每秒向其发送40个请求时,它开始抛出错误,仅部分完成了请求。

我在文档中读到,默认情况下,Lambda调用的类型为RequestResponse(API现在正在执行此操作),它本质上是同步的,并且看起来像是非阻塞的。对于异步调用,调用类型为事件。但是lambda放弃异步调用的返回类型,并且API不返回任何内容。

关于AWS的同步,异步或并发定义是否缺少某些内容?有没有更好的方法来解决此问题?任何见解都是有帮助的。谢谢!

Mar*_*k B 7

如果您想从 API Gateway 获取返回响应,则必须使用同步执行。在这种情况下使用异步执行是没有意义的。我认为您缺少的是,虽然每个 Lambda 执行都是阻塞的、单线程的,但您的函数的多个实例将在多个 Lambda 服务器环境中运行。

出于安全原因,默认的并发 Lambda 执行数量相当低。这是为了防止您在学习 Lambda 时意外编写出一个失控的 Lambda 进程,这会花费大量金钱。您需要请求增加您账户上的 Lambda 并发执行限制。

  • @RoyiNamir 不,亚马逊不能在您的函数等待时销毁 Lambda 实例并重用该实例底层的物理硬件,然后在“await”完成后以某种方式重建该实例及其所有内存状态。您最终需要为 Lambda 函数使用的物理硬件付费,该物理硬件是在函数调用生命周期内为该 Lambda 函数实例保留的。 (2认同)