node.js - instalar - node js tutorial
¿Escalar el servidor Nodejs a múltiples sistemas? (3)
Como Node.js no es compatible con la memoria compartida, la distribución de procesos Node.js en varias máquinas proporciona la misma experiencia que usar un clúster para distribuir procesos en varios núcleos: si la aplicación se puede ejecutar como múltiples procesos independientes dentro de un solo sistema, entonces también se puede distribuir para ejecutarse como múltiples procesos independientes en múltiples sistemas.
¡Genial, entonces esa es una cosa menos de la que preocuparse! Ahora, hay muchas soluciones de infraestructura que podrían abstraer clusters en ejecución en varios sistemas, pero su aplicación no tiene en cuenta a nadie que pueda elegir.
Sin embargo, lo que le preocupará, dentro del ámbito de su aplicación y de cualquier proceso individual, es descubrir servicios externos, comunicarse con procesos en toda la infraestructura y comunicarse con procesos dentro de un clúster. Una vez más, existen muchas soluciones que restringirán cualquier requisito particular que su aplicación necesite abordar.
Hasta ahora, la comunidad de Node.js ha favorecido enfoques simples que son altamente especializados para resolver un problema en particular y luego salirse de tu camino. Por ejemplo:
- Servidores y clientes de socket web: baja latencia dentro de un clúster; también funciona bien en toda la red cuando puede enviar algunos datos y continuar con su vida, pero reducirá las cosas si necesita sincronizar procesos, como enviar datos, esperar y ralentizar hasta que eventualmente un resultado Vuelve
- Redis : los clusters son fáciles de configurar, las instancias manejan el descubrimiento por sí mismas, suficientes operaciones atómicas para proporcionar un enfoque sólido para compartir datos entre diferentes instancias y el soporte de pub-sub proporciona IPC de baja latencia
- ZMQ : alabado por sus conexiones inteligentes y de alta disponibilidad, puede diseñar cualquier protocolo de mensajería con unas pocas docenas de líneas de código que el próximo ser humano que mantenga su aplicación podrá razonar sobre
- etcd : tienda de valores-clave distribuida y consistente; una baja sobrecarga de infraestructura, permite implementar un descubrimiento directo del servicio en la parte superior que se integrará muy bien con todas las soluciones de infraestructura que existen
- Cónsul : basado en siervos , como etcd, pero fuertemente obstinado, proporciona descubrimiento de servicios en esteroides con muchas sutilezas adicionales; si te gusta manejar las cosas por tu cuenta y tienes tiempo para invertir por adelantado, te recomiendo encarecidamente una mayor investigación
Si bien esto no cubre todas las opciones disponibles, debería ser suficiente para que vayas en la dirección correcta. Con solo estos simples bloques de construcción que son ridículamente fáciles de razonar, debería poder distribuir su aplicación a través de varios sistemas, corriendo a través de varias máquinas en varios centros de datos.
Quiero construir los servidores de chat en nodejs usando express.He utilizado el módulo de clúster para escalar el servidor entre los múltiples núcleos, pero ¿cómo puedo escalar a otro sistema?
En realidad, puede haber múltiples respuestas a esta pregunta porque la respuesta depende de cómo quiera comunicarse entre los nodos, cómo desea asignar tareas a los nodos y cómo se gestionan las fallas.
Es posible que desee investigar cómo funcionan otros administradores de clúster y luego intente diseñar algo similar en su aplicación.
Pocos enfoques:
1) Use un equilibrador de carga en el frente y distribuya la carga entre la máquina. Este creo que puede ser el enfoque más simple.
2) Use un sistema de mensajería como RabbitMQ / ActiveMQ (o cualquier otro sistema AMQP) para la comunicación entre nodos y permita que haya un conjunto de nodos maestros que asigne tareas a nodos específicos y se comunique al nodo a través del protocolo AMQP.
Si está utilizando un administrador de procesos como PM2 , se encargará de poner en marcha su aplicación de nodos en diferentes o mismas máquinas, pero para manejar múltiples máquinas debe mirar en Puppet, Chef o Ansible a escala. Si está en AWS, EC2 se puede configurar para hacerlo automáticamente.