Es la base de PM2, que es un orquestador familiar para este tipo de aplicaciones de múltiples instancias. ¿Alguien está usando PM2 aquí? Por favor, levante la mano. Bien. Entonces sabes cómo funciona. El problema es que esta IPC, es decir, Inter-Process Communication, a través de un socket web Unix, está añadiendo a cada una de tus solicitudes un 30% de sobrecarga en el tiempo de respuesta. Estás desperdiciando un 30% de tu lógica de aplicación, lógica de negocio, y demás. Así que esa es la idea. Acabo de hablar de esto, pero esa es la representación gráfica.
Así que básicamente, el nodo maestro hablará básicamente con el sistema operativo para manejar la capa de red, aceptar conexiones, enrutarlas a uno de los posibles trabajadores, y luego eventualmente enviar la respuesta de vuelta. Pero ahí está la sobrecarga. Luego hay otro problema, que es bastante peculiar de Node.js. Cuando el sistema está sobrecargado, idealmente, en lugar de aceptar nuevas conexiones y empeorar la situación, tal vez quieras devolver al cliente una respuesta 503. El problema es que el servidor puede rechazar esto muy temprano y decir, ¿sabes qué? Estoy ocupado. Vuelve más tarde. Sé que no es agradable, pero es mejor que dejarte esperar 20 segundos.
Así que inmediatamente rechazan con 503. El problema es que esto no es posible en Node, porque la idea es que para rechazar una solicitud, tienes que rechazarla cuando realmente la procesas. Y para procesarla, tienes que aceptarla en el bucle de eventos. Para cuando llegas a procesar esa solicitud, el cliente ya ha esperado durante mucho tiempo. Y además, lo que lo hace aún peor, esta solicitud todavía está en el bucle de eventos. Así que todas las solicitudes asociadas, sockets de red, datos ya cargados, y demás, todavía están en tu RAM sin ninguna razón. Quiero decir, estás llenando tu RAM con solicitudes que ni siquiera estás procesando. Quiero decir, estamos entrando en escenarios muy horribles, ¿verdad? Y dado que acabamos de hablar de Next.js en la charla anterior con Wyatt, Next.js, pero incluso otros frameworks, solo estoy hablando de Next porque es nuestro estudio de caso hoy, pero esto es generalmente cierto para todos los demás frameworks como ese, TimeStack, Nuxt, lo que sea que quieras pensar.
Comments