Por lo que entiendo, los contenedores Docker usan múltiples hilos, y las aplicaciones Node.js usan solo un solo hilo. Al ejecutar algo como pm2, que maneja la agrupación de Node.js, podría utilizar todos los núcleos disponibles para el contenedor Docker.

¿Significaría esto que podría tener una mayor utilización de cada instancia de Docker al agrupar los procesos de Node.js? Si es así, ¿no sería preferible simplemente ejecutar una sola instancia de Node.js por contenedor?

Una preocupación sería si esto tiene efectos secundarios causados por la posibilidad de que un contenedor Docker aumente o disminuya la cantidad de CPU que está ejecutando.

11
Sawtaytoes 30 oct. 2017 a las 10:27

3 respuestas

La mejor respuesta

Yendo directamente al grano, parece que varios contenedores funcionan mucho mejor que un solo contenedor con soporte de clúster. No es concluyente, pero mira esto: Performance y fiabilidad cuando se utilizan múltiples contenedores Docker VS clúster de nodo estándar.

11
stefanobaldo 5 nov. 2017 a las 14:19

En primer lugar, no necesita esencialmente pm2 para ejecutar clústeres de nodos. El nodo viene con un módulo de clústeres incorporado para aprovechar una máquina multinúcleo. Además, reducir la escala de una instancia realmente no tiene un impacto a menos que codifique el número de trabajadores. Consulte el código de ejemplo en el módulo de clústeres para comprender cómo puede generar trabajadores utilizando clústeres.

0
Avinash 30 oct. 2017 a las 07:37

Si está hablando de agrupar NodeJS dentro de otro componente acoplable, no creo que eso le dé un impulso adicional. NodeJS, como dijiste, se ejecuta en un solo subproceso, por lo que pm2 (en realidad lo uso) o docker tendrán el mismo efecto en términos de distribución de la carga.

NodeJS tiene un concepto de trabajadores web para manejar cómo maneja las solicitudes entrantes, pero incluso un servidor no tan rápido manejará cientos de solicitudes porque es una arquitectura sin bloqueo.

Reconozco que todavía necesito profundizar en Docker, lo que quiero pero no tengo el tiempo, pero lo que haría es tener 1 imagen de docker por servidor (virtual o físico) y luego hacer que pm2 ejecute varias instancias de nodo dentro eso.

La razón de esto es que quiero que Docker maneje las dependencias por mí y quiero que pm2 maneje la administración del clúster ya que tiene características geniales como reiniciar automáticamente cuando la memoria alcanza un objetivo o reiniciar un nodo con error

0
sfratini 5 nov. 2017 a las 18:02