Introducció

El mòdul cluster de Node.js permet crear aplicacions que poden aprofitar els múltiples nuclis d'una CPU. Això és especialment útil per a aplicacions que necessiten gestionar moltes connexions simultànies, ja que permet distribuir la càrrega de treball entre diversos processos.

Objectius del Mòdul

  1. Entendre què és el mòdul cluster i per què és útil.
  2. Aprendre a crear un clúster de processos en Node.js.
  3. Gestionar la comunicació entre els processos del clúster.
  4. Implementar un exemple pràctic d'un servidor HTTP que utilitza el mòdul cluster.

Què és el Mòdul Cluster?

El mòdul cluster permet crear fàcilment processos fills que comparteixen el mateix port del servidor. Això és útil per aprofitar els múltiples nuclis d'una CPU i millorar el rendiment de les aplicacions Node.js.

Característiques Clau

  • Multiprocés: Permet crear múltiples processos fills (workers) que poden gestionar peticions simultàniament.
  • Compartició de Port: Tots els processos fills poden compartir el mateix port del servidor.
  • Gestió de Fallades: Si un procés fill falla, el mòdul cluster pot crear-ne un de nou automàticament.

Crear un Clúster de Processos

Pas 1: Importar el Mòdul Cluster

Primer, hem d'importar el mòdul cluster i altres mòduls necessaris com http i os.

const cluster = require('cluster');
const http = require('http');
const os = require('os');

Pas 2: Verificar si el Procés és el Master

El procés principal (master) és responsable de crear els processos fills (workers).

if (cluster.isMaster) {
  // Codi per al procés master
} else {
  // Codi per als processos fills
}

Pas 3: Crear els Processos Fills

Utilitzem os.cpus().length per determinar el nombre de nuclis de la CPU i crear un procés fill per a cada nucli.

if (cluster.isMaster) {
  const numCPUs = os.cpus().length;
  console.log(`Nombre de nuclis de la CPU: ${numCPUs}`);
  
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} ha mort`);
    cluster.fork(); // Crear un nou worker si un falla
  });
} else {
  // Crear un servidor HTTP en cada procés fill
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hola, món!\n');
  }).listen(8000);
}

Explicació del Codi

  1. Importació de Mòduls: Importem cluster, http i os.
  2. Verificació del Procés Master: Utilitzem cluster.isMaster per verificar si el procés actual és el master.
  3. Creació de Processos Fills: Utilitzem cluster.fork() per crear un procés fill per a cada nucli de la CPU.
  4. Gestió de Fallades: Si un procés fill falla, el master en crea un de nou.
  5. Servidor HTTP: Cada procés fill crea un servidor HTTP que escolta al port 8000.

Exercici Pràctic

Objectiu

Crear un servidor HTTP que utilitzi el mòdul cluster per gestionar múltiples connexions simultànies.

Instruccions

  1. Crea un fitxer anomenat cluster_server.js.
  2. Implementa el codi proporcionat anteriorment.
  3. Executa el fitxer amb node cluster_server.js.
  4. Obre diverses pestanyes del navegador i accedeix a http://localhost:8000 per veure com es gestionen les peticions.

Solució

const cluster = require('cluster');
const http = require('http');
const os = require('os');

if (cluster.isMaster) {
  const numCPUs = os.cpus().length;
  console.log(`Nombre de nuclis de la CPU: ${numCPUs}`);
  
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} ha mort`);
    cluster.fork(); // Crear un nou worker si un falla
  });
} else {
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hola, món!\n');
  }).listen(8000);
}

Resum

En aquest mòdul, hem après què és el mòdul cluster i com utilitzar-lo per crear un clúster de processos en Node.js. Hem vist com distribuir la càrrega de treball entre múltiples processos fills i gestionar la comunicació entre ells. També hem implementat un exemple pràctic d'un servidor HTTP que utilitza el mòdul cluster.

En el següent tema, explorarem els Worker Threads per a tasques de computació intensiva.

Curs de Node.js

Mòdul 1: Introducció a Node.js

Mòdul 2: Conceptes Bàsics

Mòdul 3: Sistema de Fitxers i I/O

Mòdul 4: HTTP i Servidors Web

Mòdul 5: NPM i Gestió de Paquets

Mòdul 6: Framework Express.js

Mòdul 7: Bases de Dades i ORMs

Mòdul 8: Autenticació i Autorització

Mòdul 9: Proves i Depuració

Mòdul 10: Temes Avançats

Mòdul 11: Desplegament i DevOps

Mòdul 12: Projectes del Món Real

© Copyright 2024. Tots els drets reservats