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
- Entendre què és el mòdul
cluster
i per què és útil. - Aprendre a crear un clúster de processos en Node.js.
- Gestionar la comunicació entre els processos del clúster.
- 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
.
Pas 2: Verificar si el Procés és el Master
El procés principal (master) és responsable de crear els processos fills (workers).
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
- Importació de Mòduls: Importem
cluster
,http
ios
. - Verificació del Procés Master: Utilitzem
cluster.isMaster
per verificar si el procés actual és el master. - Creació de Processos Fills: Utilitzem
cluster.fork()
per crear un procés fill per a cada nucli de la CPU. - Gestió de Fallades: Si un procés fill falla, el master en crea un de nou.
- 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
- Crea un fitxer anomenat
cluster_server.js
. - Implementa el codi proporcionat anteriorment.
- Executa el fitxer amb
node cluster_server.js
. - 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
- Introducció a Express.js
- Configuració d'una Aplicació Express
- Middleware
- Routing en Express
- Gestió d'Errors
Mòdul 7: Bases de Dades i ORMs
- Introducció a les Bases de Dades
- Utilitzar MongoDB amb Mongoose
- Utilitzar Bases de Dades SQL amb Sequelize
- Operacions CRUD
Mòdul 8: Autenticació i Autorització
Mòdul 9: Proves i Depuració
- Introducció a les Proves
- Proves Unitàries amb Mocha i Chai
- Proves d'Integració
- Depuració d'Aplicacions Node.js
Mòdul 10: Temes Avançats
Mòdul 11: Desplegament i DevOps
- Variables d'Entorn
- Utilitzar PM2 per a la Gestió de Processos
- Desplegar a Heroku
- Integració i Desplegament Continu