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
clusteri 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
clusterpot 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,httpios. - Verificació del Procés Master: Utilitzem
cluster.isMasterper 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:8000per 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
