¿Cómo se puede descartar una solicitud al enviar una solicitud a NodeJS?

¿Cómo se puede descartar una solicitud al enviar una solicitud a NodeJS?

Tengo un AWS ALB que equilibra la carga de solicitudes por turnos en cuatro servidores.

Cada servidor utiliza pm2 para realizar una operación por turnos de esas solicitudes en seis CPU.

Los procesos de NodeJS (react NextJS) se ejecutan en cada una de esas seis CPU, atendidas por Express.js. Una de las primeras cosas que hacen es registrar la solicitud entrante. (No están gestionados por un servidor web como Apache o nginx, va directamente a Express.js).

Por lo general, cada solicitud que llega al ALB se reenvía con éxito y el proceso NodeJS la registra. Sin embargo, a veces, en momentos de mucho tráfico, algunas solicitudes simplemente se descartan y nunca llegan al proceso de NodeJS. Obviamente, los registros de nuestro servidor no registran estas fallas ya que, en primer lugar, nunca llegan allí; Solo vemos esta brecha al compararla con los recuentos de solicitudes de ALB.

Estoy tratando de comprender el mecanismo que podría provocar que se eliminen. ¿Podría ser que se agote el tiempo de espera de una cola interna de NodeJS? ¿O podría ser una cuestión del kernel de Linux? Estamos viendo indicios de que durante los períodos de mayor tráfico, algunas CPU están ocupadas mientras que otras están inactivas, lo que me hace pensar en la longitud de la cola (fórmula de Kingman, ley de Little, etc.). Puedo pensar en algunas formas de disminuir la probabilidad de que esto suceda, desde aumentar la capacidad del servidor hasta reducir el tiempo de respuesta y cambiar la estrategia de equilibrio de carga a nivel del servidor, pero lo que estoy tratando más bien es de entender dónde se atasca realmente la solicitud y qué determina si cae/desaparece y cómo, especialmente si puedo registrarlo o enviar algún tipo de señal cuando sucede.

Fragmentos de configuración de pm2:

module.exports = {
  apps: [
    {
      name: 'community',
      script: 'dist/server.js',
      instances: -1,
      exec_mode: 'cluster',
      autorestart: true,
      watch: false,
      log_date_format: 'YYYY-MM-DD HH:mm Z',
      max_memory_restart: '2G',
// ...
// and env-specific configs, such as
      env_production: {
        NODE_ENV: 'production',
        NODE_OPTIONS: '--max-old-space-size=3584 --max-http-header-size=16380',
        LOG_LEVEL: 'INFO',
        PORT: 3000,
      },
    },
  ],
  deploy: {
// ...
  },
};

información relacionada