Explica el equilibrio de carga con Nginx como si tuviera cinco años.

Explica el equilibrio de carga con Nginx como si tuviera cinco años.

Encontré muchas publicaciones y tutoriales de bricolaje sobre cómo configurar Nginx como equilibrador de carga utilizando un servidor ascendente:

upstream backend  {
  ip_hash;
  server 1.2.3.4;
  server 1.2.3.5;
  server 1.2.3.6;
}

server {
  location / {
    proxy_pass  http://backend;
  }
}

Pero eso es todo lo que puedo encontrar en cuanto a configurar esta arquitectura. Actualmente tengo una aplicación Rails implementada en 3 servidores VPS backend y estoy usando Unicorn para mi servidor HTTP. ¿Necesito instalar Ruby junto con mi aplicación Rails y Unicorn en mi servidor de equilibrio de carga? ¿Necesito que Nginx esté instalado en cada uno de los servidores ascendentes? Si es así, ¿cómo los configuro? Si introduzco algo como Varnish en la arquitectura, ¿adónde irá? ¿Frente al balanceador de carga o en cada uno de los backends?

Aquí tenéis una imagen de cómo tengo todo organizado:

                                       +---> backend1 <---+
                                       |                  |
[requests] <---> [Nginx load-balancer]-+---> backend2 <---+-[Database server]
                                       |                  |
                                       +---> backend3 <---+

Respuesta1

Respuesta corta:

NginxEn realidad, solo tiene un trabajo, y ese trabajo es aceptar una solicitud entrante y entregarla a un servidor backend.

Teniendo en cuenta eso, sus servidores front-end solo necesitan ejecutarse nginxy sus servidores backend solo necesitan ejecutarse rails. ¿Tener sentido?

Ahora, si su backend y su frontend se ejecutan en el mismo servidor, entonces sí, por supuesto, también tendría que instalarse allí, pero según su diagrama no creo que ese sea el caso.

Si introduce un software de almacenamiento en caché HTTP, como Varnish, iría entre Nginxy Rails, y lo más probable es que también se ejecute en el servidor backend. Entonces las solicitudes seguirían este camino:

Nqinx -> Varnish -> Rails

Respuesta2

Cuando se trabaja con Rails, nginxse puede utilizar para desempeñar varias funciones, generalmente como equilibrador de carga HTTP o como interfaz de servidor de aplicaciones. Su configuración es común y funcionará, pero puede imponer desafíos de escala a medida que alcanza niveles más altos de tráfico.

Cuando trabaja con un puñado de servidores VPS como lo describe, una instancia de nginx puede servir como balanceador de carga HTTP principal para el tráfico entrante y como interfaz para descargar responsabilidades de bajo nivel de los servidores de la aplicación Rails (que sirven archivos estáticos, reescrituras/redirecciones de URL, etc.).

nginx puede manejar miles de conexiones simultáneas sin muchos recursos, mientras que los servidores de aplicaciones Unicorn Rails generalmente solo pueden atender un puñado de conexiones simultáneas. A medida que escale más, necesitará más instancias de nginx de front-end/equilibrador de carga (y un método de equilibrio de carga entre ellas, como DNS round-robin u otros mecanismos).

Si utiliza Amazon AWS u otras plataformas de alojamiento más maduras, a menudo se utiliza un servicio como Elastic Load Balancing (ELB) como equilibrador de carga web principal. Cada servidor de aplicaciones ejecuta nginx/Unicorn, utilizando nginx como interfaz para descargar el procesamiento de cada Unicorn. Esto es mucho más fácil de escalar debido al ELB de gran volumen frente a cada servidor.

información relacionada