Clustering en Node.js permite crear múltiples procesos de trabajadores que comparten el mismo puerto de servidor. Cada trabajador ejecuta su propia instancia de la aplicación y Node.js distribuirá automáticamente las solicitudes entrantes entre ellos.
La idea básica detrás de esto es que Node.js, siendo un entorno de un solo hilo, no puede aprovechar al máximo las CPU de múltiples núcleos. Pero con el clustering, puedes crear una aplicación que haga justamente eso.
Aquí te dejo un ejemplo básico de cómo implementar clustering en una aplicación Node.js:
```javascript
const cluster = require(‘cluster’);
const http = require(‘http’);
const numCPUs = require(‘os’).cpus().length;
if (cluster.isMaster) { console.log(`Master ${process.pid} is running`);
// Creamos tantos trabajadores como núcleos de CPU for (let i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on(‘exit’, (worker, code, signal) => { console.log(`Worker ${worker.process.pid} died`); }); } else { // Los trabajadores pueden compartir cualquier conexión TCP // En este caso es un servidor HTTP http.createServer((req, res) => { res.writeHead(200); res.end(‘Hello from Node.js\n’); }).listen(8000); console.log(`Worker ${process.pid} started`); } ```En el código anterior, primero verificamos si el proceso actual es el proceso maestro. Si es así, creamos tantos trabajadores como núcleos de CPU disponibles. Si el proceso actual no es el maestro, simplemente creamos un nuevo servidor HTTP que escucha en el puerto 8000.
Por lo tanto, cuando arrancas esta aplicación y haces solicitudes a tu servidor, Node.js distribuirá automáticamente estas solicitudes entre los trabajadores.
Clustering es una característica bastante avanzada y a menudo no es necesaria, especialmente para aplicaciones más pequeñas. Pero si estás lidiando con una gran carga de trabajo, puede ser muy útil para mejorar el rendimiento de tu aplicación.