Проверяет понимание модуля cluster в Node.js и умения использовать многоядерность для масштабирования серверных приложений.
Node.js выполняет JavaScript в одном потоке, поэтому одно ядро CPU обрабатывает всю нагрузку. Модуль cluster решает эту проблему: он позволяет запустить несколько процессов-воркеров, каждый из которых работает на отдельном ядре, а мастер-процесс распределяет между ними входящие соединения.
cluster.fork() и создаёт воркеров.const cluster = require('cluster');
const http = require('http');
const os = require('os');
if (cluster.isMaster) {
const cpus = os.cpus().length;
for (let i = 0; i < cpus; i++) cluster.fork();
cluster.on('exit', (worker) => {
console.log(`Worker ${worker.process.pid} died`);
cluster.fork(); // перезапуск
});
} else {
http.createServer((req, res) => {
res.end('Hello from worker ' + process.pid);
}).listen(3000);
}Такой подход даёт горизонтальное масштабирование на одном сервере. Однако cluster не заменяет полноценную оркестрацию (например, Kubernetes) и не решает проблемы с общим состоянием в памяти — воркеры изолированы.
Итог: cluster стоит применять, когда нужно задействовать все ядра CPU для повышения пропускной способности Node.js-сервера без изменения кода приложения.