узкое место в производительности с запросами к стороннему API от nodejs - PullRequest
0 голосов
/ 26 сентября 2018

Я использую сторонний API в своем приложении nodejs.

Первое, когда я делаю 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)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...