node.js - 并发调用 lambda 到 lambda 22 次花费太多时间

标签 node.js aws-lambda aws-sdk-js aws-sdk-nodejs

我正在从 lambda_A 调用 lambda_B 22 次(异步),单个 lambda_B 调用在 3 秒内完成执行所以根据这个当我我异步调用 22 lambda,所以它应该需要大约 3 秒的时间。但它需要时间 16-20 秒

这是我正在使用的示例代码

async callingLambda(arrayvalue) {
  try {
    const lambdaResponse = await BPromise.all(
      arrayvalue.map((leg) => {
        return new BPromise((resolve, reject) => {
          const FunctionName = 'Lambda_B';
          lambda.invoke({
            FunctionName: FunctionName,
            InvocationType: 'RequestResponse',
            LogType: 'Tail',
            Payload: JSON.stringify(reqParmaters)
          }, function(error, data) {
            if (error) {
              reject(error);
            } else {
              resolve(body.errors.length ? null : body.data);
            }
          });
        });
      })
    );
    return lambdaResponse;
  } catch (error) {
    return BPromise.reject(error);
  }
}

我几乎没有观察到,如果我将调用次数减少到 4-6,那么它大约需要 3 秒,但是当我增加调用次数时,时间也会增加。

根据我的研究,这个问题可能是由于没有。 nodejs 并行处理的 I/O 操作数等于 UV_THREADPOOL_SIZEUV_THREADPOOL_SIZE 默认值为 4。

我还增加了 UV_THREADPOOL_SIZE 的大小,但它不起作用。

最佳答案

您的调用过程的参数有问题。 引用 AWS:您必须设置的异步调用的 Lambda 文档

InvocationType: 'Event'

代替:

InvocationType: 'RequestResponse'

看看https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html

关于node.js - 并发调用 lambda 到 lambda 22 次花费太多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52221930/

相关文章:

node.js - 有什么方法可以为用户生成认知身份验证 token 而无需在 aws-sdk 或 aws-amplify 中提供密码?

node.js - 阻止发布 Node 应用程序

javascript - AWS Lambda - 如果 S3 中存在对象,则无法执行操作

amazon-web-services - 在 AWS Lambda 中处理事件之前,是否有一种惯用的方法来聚合事件?

php - 无服务器框架,处理程序不存在

typescript - 由于 s3key 哈希值更改,为 AWS CDK 编写的单元测试失败

javascript - Node.js 中的 ajax 响应有问题吗?

node.js - 如何使用 node.js/mongodb 在 HTML 中显示任意的无模式数据

typescript - AWS SDK v3 - 如何让 TypeScript 编译具有自定义超时的 DynamoDB 客户端的构建?

node.js - AWS-SES : Adding link in my email template