Ответ
Cluster — это встроенный модуль Node.js, который позволяет создавать несколько дочерних процессов (воркеров) для параллельного выполнения кода на многоядерных процессорах. Поскольку Node.js работает в одном потоке, кластеризация — это основной способ горизонтального масштабирования приложения на уровне ОС.
Как это работает:
- Главный процесс (master) создаёт несколько воркеров с помощью
cluster.fork(). - Все воркеры выполняют один и тот же исходный код сервера.
- Входящие соединения распределяются между воркерами (по умолчанию — алгоритм round-robin).
- Воркеры используют общий серверный порт через механизм IPC (Inter-Process Communication).
Пример базовой реализации:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isPrimary) {
console.log(`Primary process ${process.pid} is running`);
// Создаём воркеров по количеству ядер CPU
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died. Restarting...`);
cluster.fork(); // Автоматический перезапуск упавшего воркера
});
} else {
// Код, выполняемый воркерами
http.createServer((req, res) => {
res.writeHead(200);
res.end(`Response from worker ${process.pid}`);
}).listen(3000);
console.log(`Worker ${process.pid} started`);
}
Практическое применение: Кластеризация критически важна для веб-серверов (например, на Express.js или Fastify), чтобы полностью использовать ресурсы сервера и повысить отказоустойчивость. В продакшене часто используется в связке с менеджером процессов PM2, который предоставляет более удобный интерфейс для кластеризации.