Básicamente, estoy construyendo un servidor express y recientemente investigué el tema de escalar aplicaciones NodeJS. Una de las primeras cosas que vi fue el módulo de cluster incorporado para aprovechar todos los subprocesos del procesador de la máquina. Aquí está mi código de la implementación que he hecho:
import cluster from "cluster"; import { cpus } from "os"; import dotenv from "dotenv"; dotenv.config(); import express, { Express } from "express"; import log from "./logger"; import database from "./database"; import router from "./router"; const app: Express = express(); // Middleware app.use(express.json()); app.use(express.urlencoded({ extended: false })); const port = <number>(<unknown>process.env.PORT); const host = <string>process.env.HOST; const numCPU = cpus().length; if (cluster.isPrimary) { for (let i = 0; i < numCPU; i++) { cluster.fork(); } cluster.on("listening", (worker) => { // Not printing anything console.log(worker.process.pid); }); cluster.on("exit", (worker, code, signal) => { log.error(`Worker ${worker.process.pid} died. Starting a new worker...`); cluster.fork(); }); } else { app.listen(port, host, () => { // Only prints this once. log.info(`Server ${process.pid} listening at http://${host}:${port}`); database(); router(app); }); } El problema es que el bloque cluster.isPrimary nunca se ejecuta , lo que significa, por supuesto, que el clúster no bifurca ningún otro proceso. Sin embargo, cuando uso cluster.isMaster , todo funciona exactamente como se esperaba. Pero dado que isMaster está en desuso y se reemplaza por isPrimary, eso es lo que estoy tratando de usar, pero simplemente no funciona.
Soluciones que he probado que no funcionan:
¿Qué estoy haciendo mal?
Lo más probable es que sea la versión del nodo que está ejecutando. isPrimary solo está disponible en las versiones 16+ y lo más probable es que tenga la versión LTS que es v14
Hace algún tiempo, cluster.isMaster agregado en NODE versión v0.8.1 está obsoleto desde la versión 16.0.0. Simplemente reemplace el obsoleto cluster.isMaster por cluster.isPrimary (como lo hizo) solo si su versión de NODE es al menos 16.0.0.
Si no conoce su versión, ingrese node -v y presione enter en su terminal. Si necesitas actualizar tu versión de NODE, tienes diferentes opciones dependiendo de tu sistema operativo. En caso de que ejecute Windows o Mac en su PC, puede, por ejemplo, ir al sitio web oficial de NODE y descargar e instalar la versión más reciente: https://nodejs.org/en/download/current/
El fondo cluster.isPrimary devuelve verdadero si el proceso es primario. Por el contrario, puede usar cluster.isWorker para devolver verdadero si el proceso no es primario. Entonces es la negación de cluster.isPrimary .
Muchas publicaciones de blog, artículos y tutoriales aún aplican el cluster.isMaster obsoleto.isMaster. Esto provoca irritaciones entre los usuarios de nodos que tratan por primera vez con la agrupación en clústeres de NODOS.
NODE proporciona información oficial aquí: https://nodejs.org/api/cluster.html#clusterismaster