4

我从lambda_B22 次(异步)调用lambda_A,单次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 秒,但是当我增加呼叫次数时,时间也会增加。

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

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

4

1 回答 1

0

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

InvocationType: 'Event'

代替:

InvocationType: 'RequestResponse'

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

于 2018-09-14T01:08:32.867 回答