Explicar el apagado elegante en Express.js

¿Qué es el apagado elegante?

Cuando trabajamos con aplicaciones rápidas, a menudo usamos administradores de programas como Forever, PM2, SystemD, etc. Cuando el usuario quiere finalizar la conexión o detener el servidor, primero todas las conexiones y requests deben cerrarse o completarse antes de apagar el aplicación Esto significa que no debe permanecer abierto ningún tráfico o datos y los recursos de la aplicación que estaban en uso deben cerrarse.  

Procedimiento de Graceful Shutdown: Para este propósito, se envía una señal SIGTERM (el administrador del programa lo envía) a la aplicación que le dice que se va a matar. Después de recibir esta señal, la aplicación deja de aceptar las nuevas requests y le informa al balanceador de carga que no aceptará ninguna solicitud nueva. Todas las requests activas están finalizadas. Se limpian todos los datos y el tráfico que incluye las conexiones de la base de datos. Después de todo, este proceso ocurre cuando la aplicación sale del proceso con un estado de salida de 0.

Este es todo el procedimiento de un apagado ordenado. Esto evita efectos colaterales de conflictos que puedan ocurrir al cerrar el servidor y se puede iniciar el nuevo deployment sin ningún tipo de dificultad.

Entendamos con la ayuda de un ejemplo.

Paso 1: Primero, necesitamos captar la señal SIGTERM que enviamos a la aplicación. Usamos la función process.on() para este propósito.

function gracefulshutdown() {
    console.log("Shutting down");
    myApp.close(() => {
        console.log("HTTP server closed.");
        
        // When server has stopped accepting 
        // connections exit the process with
        // exit status 0        
        process.exit(0); 
    });
}

process.on("SIGTERM", gracefulshutdown);

Paso 2: cuando se detecta la señal SIGTERM, llamamos a la función de apagado correcto donde cerramos la aplicación con éxito.

Ejemplo: en esto, iniciamos un servidor express básico. Su aplicación se cerrará correctamente.

Javascript

const express = require("express");
const myApp = express();
const port = 3000;
  
// Starting the server
myApp.get("/", (req, res) => { 
    res.send("Your express app has started!"); 
});
  
// App listening on port 3000
myApp.listen(port, () => {
    console.log(`App running at http://localhost:${port}`);
});
  
  
function gracefulshutdown() {
    console.log("Shutting down");
    myApp.close(() => {
        console.log("HTTP server closed.");
          
        // When server has stopped accepting connections 
        // exit the process with exit status 0
        process.exit(0); 
    });
}
  
process.on("SIGTERM", gracefulshutdown);

Publicación traducida automáticamente

Artículo escrito por mittalvidhi130 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *