Я вызываю 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
, но это не работает.
https://stackoverflow.com/questions/43213250/nodejs-cluster-on-aws-lambda
- person IftekharDani   schedule 11.09.2018