NodeJS cluster. Оркестратор "ведет" активную жизнь

Решил подключить nodejs cluster.

Сделал так:

import cluster from 'cluster';
import http from 'http';
import { cpus } from 'os';
import process from 'process';
import mysqlInstance from 'mysql.js';
import redisInstance from 'redis.js';

const numCPUs = cpus().length;

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  // Fork workers.
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('fork', (worker) => {
    console.log('worker is dead:', worker.isDead());
  });

  cluster.on('exit', (worker, code, signal) => {
    console.log('worker is dead:', worker.isDead());
  });
} else {
  // Workers can share any TCP connection. In this case, it is an HTTP server.
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end(`Current process\n ${process.pid}`);
    process.kill(process.pid);
  }).listen(8000);
}

Заменил isPrimary на isMaster. Все работает.

Для теста ограничил количество воркеров до одного. Но параллелизм - два процесса. Один орекстратор, второй - наш, "один" воркер.

Только вот нюанс - у меня с оркестратора проходит подключение к redis и mysql. Но ведь он должен только распределять работу между воркерами. То есть при одном воркере должно быть одно подключение.

Это чем-то грозит? Стоит ли это убирать, делать проверки в сервисах, if (!cluster.isMaster), динамические импорты и т.д.


Ответы (0 шт):