Recargando un servidor de Node.js con WebSocket

Un sencillo servidor corriendo sobre Node.js puede permitir la recarga sin interrupciones, de manera amistosa, algo parecido al reload de Apache u otros demonios en Linux. Para ello sólo es necesario que haya un proceso padre que lance hijos y les envíe señales según sea necesario. Sin embargo el cierre de las conexiones esperando a que estas terminen puede dar algunas complicaciones cuando hay un WebSocket.

La gestión de padre e hijos se puede hacer con el módulo cluster. En este ejemplo el script a lanzar manualmente es master.js. Él a su vez lanzará al script server.js y le pasará las señales SIGHUP para recargar el servidor (terminar amistosamente) o SIGTERM para terminar sin piedad.

master.js:

'use strict';

var cluster = require('cluster');
const path = require('path');

cluster.setupMaster({
  exec: path.join(__dirname, 'server.js')
});

//fork the first process
cluster.fork();

process.on('SIGHUP', function () {
  var new_worker = cluster.fork();
  new_worker.once('listening', function () {
    //stop all other workersS
    for (var id in cluster.workers) {
      if (id === new_worker.id.toString()) continue;
      cluster.workers[id].process.kill('SIGHUP');
    }
  });
}).on('SIGTERM', function () {
  for (var id in cluster.workers) {
    cluster.workers[id].process.kill('SIGTERM');
  }
});

[…] (continuar leyendo)

Anotaciones para un CPD

Montar un centro de procesamiento de datos o una sala de máquinas es de esas cosas sobre las que todo el mundo sabe pero que pocos quieren echarse al hombro. Es fácil acabar aglutinando a un montón de empresas de distinto oficio y beneficio, cada una encargándose de una cosa, pero sin una supervisión común ni fina. Lo cual suena a tiquismiquis, pero asegurarse de que todo quede como debe ahorrará muchos quebraderos de cabeza y misterios a futuro.

El que escribe esto es como todos, con muchas ideas, pero que tampoco sabe diseñar la construcción de un Centro de Procesamiento de Datos de principio a fin. Sin embargo puedo aportar algunos detalles.

Ubicación. Partimos de la base de que vamos a tener una sala llena de máquinas con un considerable valor económico, pero que a su vez van a albergar una información y prestar un servicio con mucho más valor, que es el que realmente va a dar dinero. De manera que es necesario elegir un lugar con:

  • Acceso restringido. Que no sea el c**o de la Bernarda.
  • Unas variables físicas estables. No como el desierto con sus cambios de temperatura.
  • Una temperatura del aire que absorben las máquinas comprendida entre 24 ºC y 26 ºC o incluso mayor. Es una moda de los últimos años a favor de un menor derroche energético, que depende también de las máquinas y sus especificaciones. En CPD de lugares públicos, esos cuya factura de la luz pagamos entre todos, siguen con configuraciones de 19 ºC y tan pichis.
  • Una humedad relativa en torno a un 50 %. Este valor también depende de las especificaciones de las máquinas, pero si es baja pueden soltarnos chispotazos porque se carguen de electricidad estática, y si es alta los componentes empezarán a enrobinarse y tendrán una vida útil menor, cuando no empiecen antes a dar problemas misteriosos que nos hagan perder muchas horas intentado resolverlos.
  • Un entorno con bajo riesgo de catástrofes. Poco importa ponerle la puerta de un búnker, si luego está en un sótano, vienen lluvias torrenciales, el alcantarillado se inunda, los sumideros empiezan a expulsar agua en lugar de succionarla, las bombas de achique no dan abasto o se quedan sin suministro de electricidad,.. Como levantino sé bien que eso puede pasar.

[…] (continuar leyendo)