Gestor de procesos para NodeJS

¿Cuál es la mejor manera de ejecutar una aplicación NodeJS en un servidor? Durante mucho tiempo, me limité a utilizar el comando "pantalla", que no tenía control de procesos ni nada parecido. El siguiente intento fue "para siempre", que ahora asegura que el proceso se reinicie automáticamente si muere.

Pero la mejor solución que encontré fue"pm2". El "Gestor de procesos avanzado y de producción para Node.js" ofrece monitorización de procesos, así como soporte para el equilibrio de carga, gestión de archivos de registro, git pull, y mucho más.

pm2 se instala de forma muy sencilla con
> npm install pm2 -g

Nuestra aplicación NodeJS puede entonces ser iniciada:
> pm2 start app.js

La mayor parte de esto ya ha ocurrido. Pm2 ahora ejecuta la aplicación y la reinicia si es necesario.

Puede listar todos los procesos con
> lista pm2
![Lista](storage/list.PNG)

Puede obtener detalles sobre un proceso concreto introduciendo
> pm2 show appName/appId
Información](storage/info.PNG)

Y un seguimiento de todos los procesos puede mostrarse así
> pm2 monit
Monit](storage/monit.PNG)

A mí me convenció especialmente pm2 si quieres utilizar el equilibrio de carga. Para ello, sólo hay que iniciar la aplicación con un parámetro adicional:
> pm2 start app.js -i 4

Con "-i 4", pm2 recibe instrucciones para iniciar 4 instancias de trabajo de la aplicación. El número de trabajadores puede modificarse en cualquier momento con
> pm2 scale appName 2

(en cuyo caso el número de trabajadores se reduce a 2).
Lo bueno de esto es que pm2 se encarga de la agrupación. No tienes que usar una función de balanceo de carga en la aplicación NodeJS, el llamado "clustering" es completamente hecho por pm2.

Esto significa que este código se vuelve superfluo:


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

var numCPUs = os.cpus().length;

if (cluster.isMaster) {  
  // Master:
  // Let's fork as many workers as you have CPU cores

  for (var i = 0; i < numCPUs; ++i) {
    cluster.fork();
  }
} else {
  // Worker:
  // Let's spawn a HTTP server
  // (Workers can share any TCP connection.
  //  In this case its a HTTP server)

  http.createServer(function(req, res) {
    res.writeHead(200);
    res.end("hello world");
  }).listen(8080);
}

En cambio, puedes concentrarte en lo esencial:


var http = require('http');

http.createServer(function(req, res) {  
  res.writeHead(200);
  res.end("hello world");
}).listen(8080);

Deja un comentario ahora

Deja un comentario

La dirección de correo electrónico no se publicará.


*