¿Qué es clúster en Node.js?

| Última modificación: 18 de marzo de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En el mundo del desarrollo web y la programación, Node.js se ha convertido en una herramienta fundamental para crear aplicaciones eficientes y escalables. Una de las características más interesantes y útiles de Node.js es el concepto de clúster, que permite aprovechar al máximo el potencial de los sistemas multinúcleo de los ordenadores modernos. En este artículo, exploraremos en detalle qué es un clúster en Node.js, cómo funciona y cuáles son sus beneficios.

cluster en Node.js

El trabajador y el clúster en Node.js: fundamentos del clustering

El trabajador (también conocido como worker process) es la piedra angular del concepto de clúster en Node.js. Un trabajador es esencialmente una instancia independiente de la aplicación Node.js que se ejecuta en su propio hilo de procesamiento. Los trabajadores pueden compartir el mismo código base, pero cada uno opera de forma aislada y se ejecuta en un núcleo de CPU separado.

El módulo de clúster es el encargado de facilitar el clustering en Node.js. Con este módulo, es posible crear múltiples trabajadores que comparten el mismo servidor para procesar solicitudes entrantes. El módulo de clúster también proporciona herramientas para gestionar la comunicación entre los diferentes trabajadores y el proceso principal (conocido como el proceso primario).

Beneficios del clustering en Node.js

La principal ventaja del clustering en Node.js es la capacidad de escalar una aplicación y aprovechar los sistemas multinúcleo de manera efectiva. Al utilizar varios trabajadores que comparten el mismo servidor, Node.js puede manejar más solicitudes simultáneamente y, por lo tanto, mejorar el rendimiento y la capacidad de respuesta de la aplicación.

Otro beneficio importante es la mejora en la tolerancia a fallos. Si uno de los trabajadores falla o se bloquea, los demás pueden continuar funcionando sin interrupciones, lo que garantiza una mayor disponibilidad y estabilidad del sistema.

Creación de un clúster en Node.js

Crear un clúster en Node.js es un proceso sencillo gracias al módulo de clúster incorporado en la plataforma. A continuación, se muestra un ejemplo básico de cómo se puede implementar un clúster en una aplicación Node.js:

//Clúster en Node.js
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

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

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

  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} died`);
  });
} else {
  // Worker process
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hello, world!');
  }).listen(8000);

  console.log(`Worker ${process.pid} started`);
}

En este ejemplo, el proceso primario crea un trabajador por cada núcleo de CPU disponible en el sistema. Cada trabajador inicia un servidor HTTP y escucha en el puerto 8000. Si alguno de los trabajadores falla por alguna razón, el evento de salida (exit event) se activa en el proceso primario, lo que permite reemplazar al trabajador caído y mantener la aplicación en funcionamiento.

Comunicación entre procesos

En una aplicación clusterizada, es posible que los diferentes trabajadores necesiten comunicarse entre sí o con el proceso primario para compartir información o coordinar tareas. Para facilitar esta comunicación, Node.js proporciona un sistema de mensajería integrado.

El método cluster.on('message') le permite a los trabajadores recibir mensajes enviados desde otros trabajadores o desde el proceso primario. Por ejemplo, si queremos que los trabajadores realicen una tarea específica en respuesta a un mensaje, podríamos utilizar el siguiente código:

//Clúster en Node.js
// En el proceso primario
const worker = cluster.fork();

worker.on('message', (message) => {
  console.log(`Message from worker: ${message}`);
});

worker.send('Hello from the primary!');
//Clúster en Node.js
// En el trabajador
process.on('message', (message) => {
  console.log(`Message from primary: ${message}`);
  process.send('Hello from the worker!');
});

Esta capacidad de comunicación entre procesos permite una mayor flexibilidad en el diseño de aplicaciones clusterizadas y facilita la distribución de tareas y datos entre los diferentes trabajadores.

¿Qué sigue?

Si estás interesado en sumergirte en el mundo del desarrollo web y aprender sobre tecnologías de vanguardia, el Desarrollo Web Full Stack Bootcamp de KeepCoding es la oportunidad perfecta para ti. En este bootcamp, te sumergirás en un entorno de aprendizaje práctico y colaborativo, guiado por expertos en la industria.

Aprenderás a desarrollar aplicaciones web completas, desde el frontend hasta el backend, utilizando tecnologías modernas y en demanda, como Node.js y su sistema de clustering. En pocos meses, al finalizar esta formación intensiva, estarás preparado para entrar en el sector IT con confianza, aprovechando las numerosas oportunidades laborales que ofrece la industria tecnológica. ¡Inscríbete hoy mismo y da el primer paso hacia tu transformación profesional!

Alberto Casero

Alberto Casero es CTO en Watium, Fundador de Kas Factory & Coordinador del Bootcamp en Desarrollo Web.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Desarrollo Web

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado