从nodejs向第三方API请求的性能瓶颈

时间:2018-09-26 17:52:45

标签: node.js performance api

我在自己的nodejs应用中使用了第三方API。

首先,当我做hey -c 20 -z 30s -cpus 1 http://api_url.com时,我会得到Requests/sec: 57的信息。

原始API响应约为275000个符号(UTF8)(api响应为JSON)。

我的应用程序的简化示例:

const req = () => {
  const url = 'http://api_url.com';
  return new Promise((resolve, reject) => {
    const r = http.get(
      url,
      (res) => {
        res.setEncoding('utf8');
        let rawData = '';
        res.on('data', chunk => {
          rawData += chunk;
        });

        res.on('end', () => {
          const parsedData = JSON.parse(rawData);
          resolve(parsedData);
        });
      });
  });
}

koaRouter.get("/", async (ctx, next) => {
  ctx.type = "html";
  const data = await req();
  ctx.body = data;
});

app.use(koaRouter.routes()).use(koaRouter.allowedMethods());

app.listen(9000, () => {
  console.log("\n--------- Started ---------");
});

如果我运行hey -c 20 -z 30s -cpus 1 http://localhost:9000,那么我大概会得到Requests/sec: 15

我认为这与较大的API响应有关,因为如果我在获取第一个块后停止了每个请求:

res.on('data', chunk => {
  resolve('end');
  r.abort();
});

运行hey ....大约提供Requests/sec: 50

我知道我可以在集群模式下运行nodejs应用程序,但是就我而言,如果以Requests/sec模式运行,是否可以增加fork

0 个答案:

没有答案