我有一个用javascript(node)编写的lambda函数,它接受大的有效负载,分解它,命中多个API,构建响应,然后返回。
代码的要点如下:
'use strict';
let API_KEY = '';
exports.createObjects = (event, context, callback) => {
let promises = createObject(event);
Promise.all(promises).then(results => {
let res = [];
results.forEach((r) => {
res.push(r.obj);
});
callback(null, {"message" : res});
})
.catch((e) =>{
console.log('Error Creating obj ', e);
});
};
const createObject = (req) => {
let objects = req.body.obj;
let promiseReturn = [];
if(req.headers.Authorization === undefined)
return promiseReturn;
API_KEY = req.headers.Authorization;
objects.forEach((s) => {
let newPromise = create(s);
promiseReturn.push(newPromise);
});
return promiseReturn;
};
const create = (object) => {
return new Promise((resolve, reject) => {
let chain = createObject(s);
chain
.then((res)=>{
return updateObject(s);
})
.then((res)=>{
return createAttribute1(object.x, object.y);
})
.then((res)=>{
return createAttribute2(object.z, object.q);
})
.then((res)=>{
return createAttribute3(object.s, object.t);
})
.then((res)=>{
return createAttribute4(object.v, object.c);
})
.then((finalResponse)=>{
resolve(finalResponse);
})
.catch((e)=>{
return rollBack(object);
})
});
};
我在处理并发请求时遇到问题。例如,如果我使用10 mb有效负载命中lambda函数它处理得很好,但如果3个用户同时使用10mb有效负载命中lambda函数,我会看到错误"Endpoint request timed out"
。
使用lambda“并行化”并将其移出Web服务器的最佳方法是什么?我不知道如何处理这个问题...我已经将响应时间从3秒增加到最多30秒,但这只会花费一点时间并且无法解决问题。