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.
Contenido relacionado
Para obtener más detalles sobre nuestras opciones de infraestructura, consulte:
- El mejor servicio de reenvío de correo electrónico - Comparaciones de rendimiento
- Solución autoalojada - Recomendaciones de hardware
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:
- Configuración del servidor web
- Configuración del servidor API
- Guía de implementación de formularios de contacto
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:
- Configuración del servidor Bree
- Todas nuestras definiciones de trabajo
- Trabajo de verificación de salud de PM2
- Implementación del trabajo de limpieza
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.
Contenido relacionado
Obtenga más información sobre nuestros patrones de manejo de errores:
- Construyendo un sistema de pago confiable - Patrones de manejo de errores
- Protección de la privacidad del correo electrónico - Manejo de errores de seguridad
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 CPUcpupro
- 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:
- Supervisar la implementación del servidor - Monitoreo de montón y generación de instantáneas
- Trabajo de limpieza - Retención y limpieza de instantáneas
- Integración del registrador - Registro de rendimiento
Implementación recomendada para su aplicación Node.js
Para el análisis de instantáneas del montón:
- Instalar v8-profiler-next para la generación de instantáneas
- Utilice cpupro para analizar las instantáneas generadas
- Implementar umbrales de monitoreo similar a nuestro monitor-server.js
- Configurar la limpieza automatizada Para administrar el almacenamiento de instantáneas
- Crear manejadores de señales para la elaboración de perfiles bajo demanda en producción
Para la creación de perfiles de CPU:
- Generar perfiles de CPU durante períodos de alta carga
- Analizar con cpupro para identificar cuellos de botella
- Centrarse en los caminos calientes y oportunidades de optimización
- 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:
- Las mejores empresas de auditoría de seguridad
- Correo electrónico cifrado Quantum Safe
- ¿Por qué la seguridad del correo electrónico de código abierto?
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:
- Configuración:
config/index.js
- Escucha:
helpers/monitor-server.js
- Manejo de errores:
helpers/is-code-bug.js
- Explotación florestal:
helpers/logger.js
- 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:
- Ecosistema de paquetes NPM
- Construcción de sistemas de pago
- Implementación de la privacidad del correo electrónico
- Formularios de contacto de JavaScript
- Integración de correo electrónico de React
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:
- Estudio de caso de la Fundación Linux
- Caso práctico de Ubuntu de Canonical
- Reenvío de correo electrónico de exalumnos
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
- Configuración principal
- Dependencias del paquete
- Monitoreo de servidores
- Clasificación de errores
- Sistema de registro
- Controles de salud de PM2
- Limpieza automatizada
Nuestras implementaciones de servidores
Nuestra automatización de infraestructura
- Todos nuestros playbooks de Ansible
- Fortalecimiento de la seguridad
- Configuración de Node.js
- Configuración de la base de datos
Nuestras publicaciones de blog técnico
- Análisis del ecosistema de NPM
- Implementación del sistema de pago
- Guía técnica de privacidad del correo electrónico
- Formularios de contacto de JavaScript
- Integración de correo electrónico de React
- Guía de soluciones autoalojadas