我们有一个Node / Express API,该API调用SAP端点并解析响应,并将解析后的有效负载放入redis。该api在docker容器中运行,并使用AWS ECS进行部署。我正在使用请求模块来调用SAP端点,使用JSON流传递响应,并在收到的每个块上运行一个映射。该API一经部署,响应速度很快,但随着时间的推移(超过10小时)逐渐变慢。 ECS指标表明CPU负载增加。我还设置了新的文物监视,该监视表明在调用SAP API上花费了大量时间,但是在检查SAP的网关日志时,我们发现API在每次调用中都在同一时间响应。我已经尝试了几乎所有的东西,但还是空白。我正在使用节点高山图像(如果有区别的话)。
我在New Relic上看到的是,该请求在等待下游调用(SAP API)解析时被保留。等待时间逐渐增加,这会导致总体延迟。
这是我的代码来调用SAP api并解析响应:
return new Promise((resolve, reject) => {
const url = `<COMPUTE SAP-URL>`;
logger.debug(`Sending request : ${url}`);
const options = {
url,
auth: {
user: <username>
pass: <password>
},
json: true
};
const stream = request.get(options)
.pipe(JSONStream.parse('*.*'))
.pipe(es.mapSync((data) => {
// process data here
}));
stream.on('error', reject).on('end', () => {
logger.debug('Completed the processing of the response from SAP');
return resolve(formattedResponse);
});
});
我添加了新的Relic交易明细和ECS CPU使用情况图表以供参考。
有人能指出我发生了什么事吗?