Cómo optimizar la infraestructura de producción de Node.js: mejores prácticas en 2025

Mejores prácticas de implementación de producción de Node.js de nuestra infraestructura probada que maneja millones de solicitudes diariamente.

En Forward Email, hemos dedicado años a perfeccionar la configuración de nuestro entorno de producción de Node.js. Esta guía completa comparte nuestras prácticas recomendadas para la implementación de Node.js en producción, con una eficacia comprobada, centrándose en la optimización del rendimiento, la monitorización y las lecciones aprendidas al escalar aplicaciones de Node.js para gestionar millones de transacciones diarias.

Nuestra revolución de optimización del rendimiento de un solo núcleo del 573%

Cuando migramos de procesadores Intel a AMD Ryzen, logramos un Mejora del rendimiento del 573% En nuestras aplicaciones Node.js. Esto no fue solo una optimización menor, sino que cambió radicalmente el rendimiento de nuestras aplicaciones Node.js en producción y demuestra la importancia de optimizar el rendimiento de un solo núcleo para cualquier aplicación Node.js.

[!TIP] Para las mejores prácticas de implementación de Node.js en producción, la elección del hardware es crucial. Elegimos específicamente el alojamiento de DataPacket por su disponibilidad en AMD Ryzen, ya que el rendimiento de un solo núcleo es crucial para las aplicaciones Node.js, ya que la ejecución de JavaScript es de un solo subproceso.

Por qué es importante optimizar el rendimiento de un solo núcleo para Node.js

Nuestra migración de Intel a AMD Ryzen resultó en:

  • Mejora del rendimiento del 573% en el procesamiento de solicitudes (documentado en Problema n.° 1519 de GitHub en nuestra página de estado)
  • Eliminación de retrasos en el procesamiento a respuestas casi instantáneas (mencionadas en Problema n.° 298 de GitHub)
  • Mejor relación precio-rendimiento para entornos de producción de Node.js
  • Tiempos de respuesta mejorados en todos los puntos finales de nuestra aplicación

El aumento de rendimiento fue tan significativo que ahora consideramos que los procesadores AMD Ryzen son esenciales para cualquier implementación de producción seria de Node.js, ya sea que esté ejecutando aplicaciones web, API, microservicios o cualquier otra carga de trabajo de Node.js.

Para obtener más detalles sobre nuestras opciones de infraestructura, consulte:

Configuración del entorno de producción de Node.js: nuestra pila tecnológica

Nuestras mejores prácticas para la implementación de Node.js en producción incluyen la selección de tecnologías deliberadas, basadas en años de experiencia en producción. A continuación, explicamos qué usamos y por qué estas decisiones se aplican a cualquier aplicación Node.js:

Administrador de paquetes: pnpm para la eficiencia de producción

Lo que utilizamos: pnpm (versión fijada)

Elegimos pnpm en lugar de npm y yarn para la configuración de nuestro entorno de producción Node.js porque:

  • Tiempos de instalación más rápidos en canalizaciones de CI/CD
  • Eficiencia del espacio en disco a través de enlaces duros
  • Resolución de dependencia estricta que evita dependencias fantasmas
  • Mejor rendimiento en implementaciones de producción

[!NOTA] Como parte de nuestras prácticas recomendadas para la implementación de producción de Node.js, fijamos versiones exactas de herramientas críticas como pnpm para garantizar un comportamiento consistente en todos los entornos y las máquinas de los miembros del equipo.

Detalles de implementación:

Marco web: Koa para la producción moderna de Node.js

Lo que utilizamos:

Elegimos Koa en lugar de Express para nuestra infraestructura de producción de Node.js por su moderna compatibilidad con async/await y su estructura de middleware más limpia. Nuestro fundador, Nick Baugh, contribuyó tanto a Express como a Koa, brindándonos un conocimiento profundo de ambos frameworks para su uso en producción.

Estos patrones se aplican independientemente de si estás creando API REST, servidores GraphQL, aplicaciones web o microservicios.

Nuestros ejemplos de implementación:

Procesamiento de trabajos en segundo plano: Bree para la confiabilidad de la producción

Lo que utilizamos: bree programador

Creamos y mantenemos Bree porque los programadores de tareas existentes no satisfacían nuestras necesidades de compatibilidad con subprocesos de trabajo y funciones modernas de JavaScript en entornos de producción de Node.js. Esto aplica a cualquier aplicación de Node.js que requiera procesamiento en segundo plano, tareas programadas o subprocesos de trabajo.

Nuestros ejemplos de implementación:

Manejo de errores: @hapi/boom para confiabilidad de producción

Lo que utilizamos: @hapi/boom

Usamos @hapi/boom para respuestas de error estructuradas en nuestras aplicaciones de producción de Node.js. Este patrón funciona para cualquier aplicación de Node.js que requiera una gestión de errores consistente.

Nuestros ejemplos de implementación:

Cómo supervisar aplicaciones Node.js en producción

Nuestro enfoque para la monitorización de aplicaciones Node.js en producción ha evolucionado a lo largo de años de ejecución a gran escala. Implementamos la monitorización en múltiples capas para garantizar la fiabilidad y el rendimiento de cualquier tipo de aplicación Node.js.

Monitoreo de producción de Node.js a nivel de sistema

Nuestra implementación principal: helpers/monitor-server.js

Lo que utilizamos: node-os-utils

Nuestros umbrales de monitorización de la producción (según nuestro código de producción real):

  • Límite de tamaño de pila de 2 GB con alertas automáticas
  • 25% de uso de memoria umbral de advertencia
  • 80% de uso de CPU umbral de alerta
  • 75% de uso del disco umbral de advertencia

[!ADVERTENCIA] Estos umbrales funcionan para nuestra configuración de hardware específica. Al implementar la monitorización de producción de Node.js, revise la implementación de monitor-server.js para comprender la lógica exacta y adaptar los valores a su configuración.

Monitoreo a nivel de aplicación para producción de Node.js

Nuestra clasificación de errores: helpers/is-code-bug.js

Este ayudante distingue entre:

  • Errores de código reales que requieren atención inmediata
  • Errores de usuario que son comportamientos esperados
  • Fallos del servicio externo que no podemos controlar

Este patrón se aplica a cualquier aplicación Node.js: aplicaciones web, API, microservicios o servicios en segundo plano.

Nuestra implementación de registro: helpers/logger.js

Implementamos una redacción de campos integral para proteger la información confidencial y al mismo tiempo mantener capacidades de depuración útiles en nuestro entorno de producción Node.js.

Monitoreo específico de la aplicación

Nuestras implementaciones de servidor:

Monitoreo de colas: Implementamos límites de cola de 5 GB y tiempos de espera de 180 segundos para el procesamiento de solicitudes para evitar el agotamiento de recursos. Estos patrones se aplican a cualquier aplicación Node.js con colas o procesamiento en segundo plano.

Monitoreo de producción de Node.js con comprobaciones de estado de PM2

Hemos perfeccionado la configuración de nuestro entorno de producción de Node.js con PM2 a lo largo de años de experiencia en producción. Nuestras comprobaciones de estado de PM2 son esenciales para mantener la fiabilidad de cualquier aplicación Node.js.

Nuestro sistema de control de salud PM2

Nuestra implementación principal: jobs/check-pm2.js

Nuestra monitorización de producción de Node.js con comprobaciones de estado de PM2 incluye:

  • Funciona cada 20 minutos a través de la programación cron
  • Requiere un mínimo de 15 minutos de tiempo de actividad Antes de considerar un proceso saludable
  • Valida el estado del proceso y el uso de la memoria.
  • Reinicia automáticamente los procesos fallidos
  • Previene bucles de reinicio a través de un control de salud inteligente

[!CAUTION] For Node.js production deployment best practices, we require 15+ minutes uptime before considering a process healthy to avoid restart loops. This prevents cascading failures when processes are struggling with memory or other issues.

Nuestra configuración de producción de PM2

Nuestra configuración del ecosistema: Estudie nuestros archivos de inicio del servidor para la configuración del entorno de producción de Node.js:

Estos patrones se aplican independientemente de si está ejecutando aplicaciones Express, servidores Koa, API GraphQL o cualquier otra aplicación Node.js.

Implementación automatizada de PM2

Implementación de PM2: ansible/playbooks/node.yml

Automatizamos toda nuestra configuración de PM2 a través de Ansible para garantizar implementaciones de producción de Node.js consistentes en todos nuestros servidores.

Sistema de clasificación y manejo de errores de producción

Una de nuestras prácticas recomendadas de implementación de producción de Node.js más valiosas es la clasificación inteligente de errores que se aplica a cualquier aplicación Node.js:

Nuestra implementación de isCodeBug para producción

Fuente: helpers/is-code-bug.js

Este ayudante proporciona una clasificación de errores inteligente para aplicaciones Node.js en producción para:

  • Priorizar los errores reales sobre errores de usuario
  • Mejorar nuestra respuesta ante incidentes centrándose en problemas reales
  • Reducir la fatiga por alerta de errores de usuario esperados
  • Entender mejor Problemas de aplicaciones vs. problemas generados por el usuario

Este patrón funciona para cualquier aplicación Node.js, ya sea que esté creando sitios de comercio electrónico, plataformas SaaS, API o microservicios.

Integración con nuestro registro de producción

Nuestra integración de registradores: helpers/logger.js

Nuestro registrador utiliza isCodeBug para determinar los niveles de alerta y la redacción de campos, garantizando que se nos notifique sobre problemas reales mientras filtramos el ruido en nuestro entorno de producción Node.js.

Obtenga más información sobre nuestros patrones de manejo de errores:

Depuración de rendimiento avanzada con v8-profiler-next y cpupro

Utilizamos herramientas avanzadas de perfilado para analizar instantáneas del montón y depurar problemas de memoria insuficiente (OOM), cuellos de botella de rendimiento y problemas de memoria de Node.js en nuestro entorno de producción. Estas herramientas son esenciales para cualquier aplicación Node.js que experimente fugas de memoria o problemas de rendimiento.

Nuestro enfoque de creación de perfiles para la producción de Node.js

Herramientas que recomendamos:

  • v8-profiler-next - Para generar instantáneas de montón y perfiles de CPU
  • cpupro - Para analizar perfiles de CPU e instantáneas de montón

[!TIP] Utilizamos v8-profiler-next y cpupro en conjunto para crear un flujo de trabajo completo de depuración de rendimiento para nuestras aplicaciones Node.js. Esta combinación nos ayuda a identificar fugas de memoria y cuellos de botella de rendimiento, y a optimizar nuestro código de producción.

Cómo implementamos el análisis de instantáneas de montón

Nuestra implementación de monitoreo: helpers/monitor-server.js

Nuestra monitorización de producción incluye la generación automática de instantáneas del montón cuando se superan los umbrales de memoria. Esto nos ayuda a depurar problemas de memoria insuficiente (OOM) antes de que provoquen fallos en las aplicaciones.

Patrones de implementación clave:

  • Instantáneas automáticas cuando el tamaño del montón supera el umbral de 2 GB
  • Perfilado basado en señales para análisis bajo demanda en producción
  • Políticas de retención para administrar el almacenamiento de instantáneas
  • Integración con nuestros trabajos de limpieza para mantenimiento automatizado

Flujo de trabajo de depuración del rendimiento

Estudie nuestra implementación real:

Para el análisis de instantáneas del montón:

  1. Instalar v8-profiler-next para la generación de instantáneas
  2. Utilice cpupro para analizar las instantáneas generadas
  3. Implementar umbrales de monitoreo similar a nuestro monitor-server.js
  4. Configurar la limpieza automatizada Para administrar el almacenamiento de instantáneas
  5. Crear manejadores de señales para la elaboración de perfiles bajo demanda en producción

Para la creación de perfiles de CPU:

  1. Generar perfiles de CPU durante períodos de alta carga
  2. Analizar con cpupro para identificar cuellos de botella
  3. Centrarse en los caminos calientes y oportunidades de optimización
  4. Monitor antes/después mejoras de rendimiento

[!ADVERTENCIA] Generar instantáneas del montón y perfiles de CPU puede afectar el rendimiento. Recomendamos implementar la limitación y habilitar la generación de perfiles solo al investigar problemas específicos o durante periodos de mantenimiento.

Integración con nuestro sistema de monitoreo de producción

Nuestras herramientas de elaboración de perfiles se integran con nuestra estrategia de monitoreo más amplia:

  • Activación automática basado en umbrales de memoria/CPU
  • Integración de alertas cuando se detectan problemas de rendimiento
  • Análisis histórico Para realizar un seguimiento de las tendencias de rendimiento a lo largo del tiempo
  • Correlación con las métricas de la aplicación para una depuración integral

Este enfoque nos ha ayudado a identificar y resolver fugas de memoria, optimizar rutas de código activo y mantener un rendimiento estable en nuestro entorno de producción Node.js.

Seguridad de la infraestructura de producción de Node.js

Implementamos una seguridad integral para nuestra infraestructura de producción de Node.js mediante la automatización de Ansible. Estas prácticas se aplican a cualquier aplicación de Node.js:

Seguridad a nivel de sistema para la producción de Node.js

Nuestra implementación de Ansible: ansible/playbooks/security.yml

Nuestras medidas de seguridad clave para entornos de producción de Node.js:

  • Intercambio deshabilitado para evitar que se escriban datos confidenciales en el disco
  • Volcados de memoria deshabilitados para evitar volcados de memoria que contengan información confidencial
  • Almacenamiento USB bloqueado para evitar el acceso no autorizado a los datos
  • Ajuste de parámetros del kernel Tanto para la seguridad como para el rendimiento

[!ADVERTENCIA] Al implementar las mejores prácticas de implementación de producción de Node.js, deshabilitar el intercambio puede causar interrupciones por falta de memoria si la aplicación excede la RAM disponible. Monitoreamos cuidadosamente el uso de memoria y dimensionamos nuestros servidores adecuadamente.

Seguridad de aplicaciones para aplicaciones Node.js

Redacción de nuestro campo de registro: helpers/logger.js

Reducimos los campos sensibles de los registros, como contraseñas, tokens, claves API e información personal. Esto protege la privacidad del usuario y mantiene la capacidad de depuración en cualquier entorno de producción de Node.js.

Automatización de la seguridad de la infraestructura

Nuestra configuración completa de Ansible para la producción de Node.js:

Nuestro contenido de seguridad

Obtenga más información sobre nuestro enfoque de seguridad:

Arquitectura de bases de datos para aplicaciones Node.js

Utilizamos un enfoque de base de datos híbrida optimizado para nuestras aplicaciones Node.js. Estos patrones se pueden adaptar a cualquier aplicación Node.js:

Implementación de SQLite para producción en Node.js

Lo que utilizamos:

Nuestra configuración: ansible/playbooks/sqlite.yml

Usamos SQLite para datos específicos del usuario en nuestras aplicaciones Node.js porque proporciona:

  • Aislamiento de datos por usuario/inquilino
  • Mejor rendimiento para consultas de un solo usuario
  • Copia de seguridad simplificada y la migración
  • Complejidad reducida en comparación con las bases de datos compartidas

Este patrón funciona bien para aplicaciones SaaS, sistemas multiinquilino o cualquier aplicación Node.js que necesite aislamiento de datos.

Implementación de MongoDB para la producción de Node.js

Lo que utilizamos:

Nuestra implementación de configuración: helpers/setup-mongoose.js

Nuestra configuración: config/mongoose.js

Usamos MongoDB para los datos de la aplicación en nuestro entorno de producción Node.js porque proporciona:

  • Esquema flexible para la evolución de estructuras de datos
  • Mejor rendimiento para consultas complejas
  • Escala horizontal capacidades
  • Lenguaje de consulta enriquecido

[!NOTA] Nuestro enfoque híbrido se optimiza para nuestro caso de uso específico. Analice nuestros patrones de uso de la base de datos en el código fuente para comprender si este enfoque se adapta a las necesidades de su aplicación Node.js.

Procesamiento de trabajos en segundo plano de producción de Node.js

Desarrollamos nuestra arquitectura de trabajos en segundo plano en torno a Bree para una implementación de producción confiable de Node.js. Esto aplica a cualquier aplicación Node.js que requiera procesamiento en segundo plano:

Nuestra configuración del servidor Bree para producción

Nuestra implementación principal: bree.js

Nuestra implementación de Ansible: ansible/playbooks/bree.yml

Ejemplos de trabajos de producción

Vigilancia de la salud: jobs/check-pm2.js

Automatización de la limpieza: jobs/cleanup-tmp.js

Todos nuestros trabajos: Explora nuestro directorio completo de empleos

Estos patrones se aplican a cualquier aplicación Node.js que necesite:

  • Tareas programadas (procesamiento de datos, informes, limpieza)
  • Procesamiento en segundo plano (cambio de tamaño de imágenes, envío de correo electrónico, importación de datos)
  • Vigilancia y mantenimiento de la salud
  • Utilización de subprocesos de trabajo para tareas que requieren un uso intensivo de la CPU

Nuestros patrones de programación de trabajos para la producción de Node.js

Estudie nuestros patrones reales de programación de trabajos en nuestro directorio de trabajos para comprender:

  • Cómo implementamos la programación similar a cron en la producción de Node.js
  • Nuestra lógica de manejo de errores y reintentos
  • Cómo usamos subprocesos de trabajo para tareas que requieren un uso intensivo de la CPU

Mantenimiento automatizado para aplicaciones Node.js de producción

Implementamos mantenimiento proactivo para prevenir problemas comunes en producción de Node.js. Estos patrones se aplican a cualquier aplicación Node.js:

Nuestra implementación de limpieza

Fuente: jobs/cleanup-tmp.js

Nuestro mantenimiento automatizado para aplicaciones de producción Node.js tiene como objetivo:

  • Archivos temporales mayor de 24 horas
  • Archivos de registro más allá de los límites de retención
  • Archivos de caché y datos temporales
  • Archivos subidos que ya no son necesarios
  • Instantáneas de montón de la depuración del rendimiento

Estos patrones se aplican a cualquier aplicación Node.js que genere archivos temporales, registros o datos almacenados en caché.

Gestión del espacio en disco para la producción de Node.js

Nuestros umbrales de seguimiento: helpers/monitor-server.js

  • Límites de cola para procesamiento en segundo plano
  • 75% de uso del disco umbral de advertencia
  • Limpieza automática cuando se superan los umbrales

Automatización del mantenimiento de infraestructura

Nuestra automatización de Ansible para la producción de Node.js:

Guía de implementación de producción de Node.js

Estudie nuestro código actual para conocer las mejores prácticas de producción

Comience con estos archivos clave para la configuración del entorno de producción de Node.js:

  1. Configuración: config/index.js
  2. Escucha: helpers/monitor-server.js
  3. Manejo de errores: helpers/is-code-bug.js
  4. Explotación florestal: helpers/logger.js
  5. Salud del proceso: jobs/check-pm2.js

Aprenda de nuestras publicaciones de blog

Nuestras guías de implementación técnica para la producción de Node.js:

Automatización de infraestructura para la producción de Node.js

Nuestros playbooks de Ansible para estudiar para la implementación de producción de Node.js:

Nuestros casos de estudio

Nuestras implementaciones empresariales:

Conclusión: Mejores prácticas para la implementación en producción de Node.js

Nuestra infraestructura de producción Node.js demuestra que las aplicaciones Node.js pueden lograr una confiabilidad de nivel empresarial a través de:

  • Opciones de hardware probadas (AMD Ryzen para una optimización del rendimiento de un solo núcleo del 573%)
  • Monitoreo de producción de Node.js probado en batalla con umbrales específicos y respuestas automatizadas
  • Clasificación inteligente de errores para mejorar la respuesta a incidentes en entornos de producción
  • Depuración de rendimiento avanzada con v8-profiler-next y cpupro para la prevención de OOM
  • Refuerzo integral de la seguridad a través de la automatización de Ansible
  • Arquitectura de base de datos híbrida optimizado para las necesidades de la aplicación
  • Mantenimiento automatizado para evitar problemas comunes de producción de Node.js

Conclusión clave: Estudie nuestros archivos de implementación y publicaciones de blog en lugar de seguir las mejores prácticas genéricas. Nuestro código base proporciona patrones reales para la implementación en producción de Node.js, adaptables a cualquier aplicación Node.js: aplicaciones web, API, microservicios o servicios en segundo plano.

Lista completa de recursos para la producción de Node.js

Nuestros archivos de implementación principales

Nuestras implementaciones de servidores

Nuestra automatización de infraestructura

Nuestras publicaciones de blog técnico

Nuestros estudios de caso empresariales