Hola, tengo una pregunta sobre el rendimiento, la confiabilidad y el potencial de crecimiento de dos configuraciones que he encontrado. Estoy lejos de Docker o un experto en clústeres, por lo que agradecería mucho cualquier consejo o sugerencia.
Aplicación web típica de la pila MEAN que se ejecuta en Node v6.9.4 . Nada lujoso, configuración estándar.
a) Servidor Linux estándar con NGINX (proxy inverso) y NodeJS
b) Servidor Linux estándar con NGINX (proxy inverso) y clúster NodeJS. Usando el módulo de clúster de Node
c) Aplicación NodeJS "dockerizada" clonada 3 veces (3 contenedores) usando el balanceador de carga de NGINX. El crédito por la idea es para Anand Sankar
// Example nginx load balance config server app1:8000 weight=10 max_fails=3 fail_timeout=30s; server app2:8000 weight=10 max_fails=3 fail_timeout=30s; server app3:8000 weight=10 max_fails=3 fail_timeout=30s; // Example docker-compose.yml version: '2' services: nginx: build: docker/definitions/nginx links: - app1:app1 - app2:app2 - app3:app3 ports: - "80:80" app1: build: app/. app2: build: app/. app3: build: app/.d) Todos juntos. Aplicación NodeJS "dockerizada" (múltiples contenedores) con clúster configurado dentro y encima de los 3 contenedores: el balanceador de carga de NGINX.
Si obtengo esto correctamente, tener 3 x contenedores NodeJS ejecutando la aplicación, donde cada una de estas réplicas de la aplicación admite la agrupación en clústeres de NodeJS, debería conducir a un rendimiento increíble.
3 x contenedores x 4 trabajadores, debería significar 12 nodos para manejar todas las solicitudes/respuestas. Si eso es correcto, el único inconveniente sería la máquina más poderosa, en términos de hardware, para soportar esto.
De todos modos, mi lógica puede estar totalmente equivocada, ¡así que estoy buscando comentarios o comentarios al respecto!
Mi objetivo es tener entornos estables y listos para la producción, que estén listos para soportar algo de carga. No estamos hablando de miles de conexiones concurrentes al mismo tiempo, etc. Mantener la infraestructura escalable y flexible es un gran "+".
Con suerte, la pregunta tiene sentido. Lo siento por la larga publicación, pero quería dejarlo claro.
¡Gracias!
Según mi experiencia, creo que las opciones C o D son las más fáciles de mantener y, suponiendo que tuviera los recursos disponibles en el servidor D, probablemente sería la de mayor rendimiento.
Dicho esto, ¿ha investigado Kubernetes? Descubrí que hay una ligera curva de aprendizaje, pero es un gran recurso que permite el escalado dinámico, el equilibrio de carga y ofrece opciones de implementación mucho más fluidas que Docker Compose. El más grande es alojar un clúster de Kubernetes, es más caro que un solo servidor.