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), динамические импорты и т.д.