【发布时间】:2022-01-13 07:26:52
【问题描述】:
我已经设置了一个 lambda A (Nodejs),它通过同步调用其他 lambdas B、C、D、...来收集数据。这些其他 lambda 调用外部 API。问题是当有流量时,这些其他 lambdas (B,C,D, ...) 会超时他们对这个外部 API 的请求。只需一次调用 Lambda A,这些其他 Lambda 将在不到一秒的时间内执行其外部 api http 请求,但在负载下,时间不断增加。
超时设置为 10 秒,因此可以重新尝试,但我尝试将其更改为一分钟,以查看是否得到响应,并且确实发生了。似乎没有足够的 something 可用并且后续请求排队。
日志中没有错误(关于达到 AWS 限制)并且我没有达到 AWS 并发限制。我还认为我可能会达到突发并发限制,但日志中没有错误。
(图表显示每分钟的总和)
如果只有 366 次调用,ConcurrentExecutions 怎么会这么高?
我已经开始摆弄 maxSockets(我不知道 Infinity 仅等于 50),但我认为它目前设置不正确。然而,这可能是这种情况吗?一次只能处理 50 个连接,其余的要排队?
下面的代码(模拟)。
const soapConfig = {
endpoint: 'https://soapapi.com',
options: { timeout: 29000, time: true, pool: { maxSockets: Infinity },
wsdl: `${__dirname}/ASC2021.wsdl`
}
}
const handler = (event, context, callback) => {
let processed = (async function () {
let params = Object.assign({}, event.pathParameters, event.queryStringParameters)
const client = await soap.createClientAsync(soapConfig.wsdl,
soapConfig.options, soapConfig.endpoint)
const result = await client.GetData(params, soapConfig.options)
return result
})()
postProcess(processed, context, callback)
}
AWS_NODEJS_CONNECTION_REUSE_ENABLED 设置为 1
我正在打的some队列某处可以吗?
编辑:我忘了补充一点,我已经与 API 维护者进行了详细的讨论,并且调用甚至没有到达所述 api。如果超时提高到所述 1 分钟,则 api 接收请求但接近请求结束。 API 也没有限制。
【问题讨论】:
标签: amazon-web-services aws-lambda concurrency timeout