node.js - 调用 lambda 到 lambda 22 次并发花费太多时间
问题描述
我从lambda_B
22 次(异步)调用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_SIZE
4。
我也增加了大小,UV_THREADPOOL_SIZE
但它不起作用。
解决方案
您的调用过程的参数有问题。参考 AWS:您必须设置的异步调用的 Lambda 文档
InvocationType: 'Event'
代替:
InvocationType: 'RequestResponse'
看看https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html
推荐阅读
- python - 使用装饰器函数递增自变量
- sas - 在SAS中获取特定单词之前的所有单词
- flutter - 带有 ListView 的自动空间
- laravel - laravel scout:导入不会更新现有文档
- jestjs - 我可以在 NestJS 的 .spec.ts 之外使用 Jest 的 expect() 吗?
- angularjs - 如何在 Yocto 中安装 Angular js
- assembly - 如何在汇编中将整数与小数相乘?8086
- node.js - 如何使用 Typescript 正确创建自定义 Express.js 请求接口?
- wpf - 如何更新 DataTemplate 中的绑定?
- powerbi - Power BI 中正确年份桶中的溢出收入百分比