Вызов лямбды в лямбду в 22 раза одновременно занимает слишком много времени - PullRequest
0 голосов
/ 07 сентября 2018

Я вызываю lambda_B 22 раза (асинхронно) из lambda_A, Одиночный lambda_B вызов завершает выполнение за 3 секунды, поэтому в соответствии с этим, когда я вызываю 22 лямбды асинхронно, так что это должно занять около 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 параллельно, равен UV_THREADPOOL_SIZE, а значение по умолчанию UV_THREADPOOL_SIZE равно 4.

Я также увеличил размер UV_THREADPOOL_SIZE, но он не работает.

1 Ответ

0 голосов
/ 14 сентября 2018

У вас есть проблема в параметрах вашего процесса вызова. Ссылка на AWS: лямбда-документы для асинхронного вызова, который вы должны установить

InvocationType: 'Event'

Вместо:

InvocationType: 'RequestResponse'

Взгляните на https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...