NodeJS에 요청을 보낼 때 어떻게 요청을 삭제할 수 있나요?

NodeJS에 요청을 보낼 때 어떻게 요청을 삭제할 수 있나요?

요청 라운드 로빈을 4개의 서버로 로드 밸런싱하는 AWS ALB가 있습니다.

각 서버는 pm2를 사용하여 해당 요청을 6개의 CPU로 라운드 로빈합니다.

NodeJS 프로세스(React NextJS)는 Express.js가 제공하는 6개의 CPU 각각에서 실행됩니다. 그들이 가장 먼저 하는 일 중 하나는 들어오는 요청을 기록하는 것입니다. (아파치나 nginx와 같은 웹 서버가 앞에 있지 않으며 바로 Express.js로 이동합니다.)

일반적으로 ALB에 도달하는 모든 단일 요청은 성공적으로 전달되고 NodeJS 프로세스에 의해 기록됩니다. 그러나 때로는 트래픽이 많은 시간에 일부 요청이 삭제되어 NodeJS 프로세스에 도달하지 못하는 경우가 있습니다. 분명히 우리 서버 로그는 이러한 실패를 처음부터 기록하지 않기 때문에 기록하지 않습니다. ALB 요청 수와 비교하여 이러한 차이를 확인할 수 있습니다.

나는 그것들이 떨어질 수 있는 메커니즘을 이해하려고 노력하고 있습니다. NodeJS 내부 대기열이 시간 초과될 수 있나요? 아니면 리눅스 커널 일 수 있습니까? 트래픽이 많은 기간 동안 CPU 중 일부는 바쁘고 다른 CPU는 유휴 상태라는 징후가 나타나고 있습니다. 이는 대기열 길이(킹맨 공식, 리틀의 법칙 등)를 생각하게 합니다. 서버 용량 늘리기, 응답 시간 줄이기, 서버 수준 로드 밸런싱 전략 변경 등 이런 일이 발생할 확률을 줄이는 몇 가지 방법을 생각해 볼 수 있지만 요청이 실제로 어디서 멈추는지 이해하려고 더 노력하고 있습니다. 그것이 떨어지거나 사라지는지 여부와 방법을 결정하는 것은 무엇입니까? 특히 그것이 일어날 때 그것을 기록하거나 어떤 종류의 신호를 보낼 수 있다면 더욱 그렇습니다.

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: {
// ...
  },
};

관련 정보