Node.js Балансировка нагрузки кластера на уровне конечной точки

#node.js #express #cluster-computing #load-balancing #node-cluster

#node.js #экспресс #кластерные вычисления #балансировка нагрузки #узел-кластер

Вопрос:

Я использую кластер и имею 2 запущенных узла. у каждого узла есть один API, который выполнял задачу около 5-6 секунд.

Например

в cluster.js

 const cluster = require("cluster");

if (cluster.isMaster) {
  for (let i = 0; i < 2; i  ) {
    cluster.fork();
  }
} else {
  require("./server");
}
  

и здесь в server.js

   const express = require("express");
  const app = express();
  const port = 8080;

  app.get("/", async (req, res) => {
   await sleep(5000);
   res.send('handled by process: '   process.pid);
  });

  async function sleep (ms){
    if (ms <= 0) return;
    return new Promise((resolve) => {
      setTimeout(resolve, ms);
    });
  };

  app.listen(port, () => console.log(`port: ${port}`));
  

если я запрашиваю API. Первый узел получил запрос и обработал его примерно за 5-6 секунд. Прежде чем он завершит процесс и ответ, я отправляю второй запрос в API. Но запрос отправляется на первый узел, а не на второй узел. Как реализовать кластер узлов для этого?

Комментарии:

1. Как вы используете кластер? Можете ли вы опубликовать соответствующий код?

2. Хорошо, я только что отредактировал код.

3. Это нормально. Первый процесс не перегружен, поэтому он все еще может легко обрабатывать запрос. Согласно документам «». nodejs.org/api/cluster.html#cluster_how_it_works

4. Просто попробуйте перегрузить его, и вы увидите, что два узла приступят к работе.

5. Спасибо, но знаете ли вы какие-либо node.js функция или библиотека, которые могут сделать это без перегрузки?