Explique balanceamento de carga com Nginx como se eu tivesse cinco

3

Encontrei muitos posts e tutoriais sobre como configurar o Nginx como um balanceador de carga usando o servidor upstream:

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;
  }
}

Mas esse é o tamanho do que posso encontrar para configurar essa arquitetura. Atualmente eu tenho um aplicativo rails implantado em 3 servidores VPS backend e estou usando Unicorn para o meu servidor HTTP. Eu preciso do meu ruby instalado junto com o meu aplicativo de trilhos e unicórnio no meu servidor de balanceamento de carga também? Preciso que o Nginx seja instalado em cada um dos servidores upstream? Se sim, como eu configuro eles? Se eu introduzir algo como o verniz na arquitetura, para onde isso vai? Na frente do load-balancer ou de cada um dos backends?

Veja um exemplo de como organizo tudo:

                                       +---> backend1 <---+
                                       |                  |
[requests] <---> [Nginx load-balancer]-+---> backend2 <---+-[Database server]
                                       |                  |
                                       +---> backend3 <---+
    
por Cyle 24.12.2013 / 17:52

2 respostas

4

Resposta curta:

Nginx realmente tem apenas um trabalho, e esse trabalho é aceitar um pedido recebido e entregá-lo a um servidor de back-end.

Dado que, seu (s) servidor (es) front-end (s) só precisa executar nginx e seus servidores de backend precisam executar apenas rails . Faz sentido?

Agora, se o back-end e o frontend estiverem em execução no mesmo servidor, é claro que sim, também teria que ser instalado lá, mas, no seu diagrama, não acredito que seja o caso.

Se você introduzir um software de armazenamento em cache de HTTP, como Varnish , ele ficará entre Nginx e Rails , provavelmente também em execução no servidor de back-end. Então, as solicitações seguiriam esse caminho:

Nqinx -> Varnish -> Rails
    
por 26.12.2013 / 22:24
3

Ao trabalhar com o Rails, nginx pode ser usado para atender a várias funções, na maioria das vezes como um balanceador de carga HTTP ou como um front-end de servidor de aplicativos. Sua configuração é comum e funcionará, mas pode impor desafios de dimensionamento à medida que você cresce para níveis mais altos de tráfego.

Quando você está trabalhando com um punhado de servidores VPS, como descrito por você, uma instância nginx pode ser o balanceador de carga HTTP primário para tráfego de entrada e um front-end para descarregar responsabilidades de baixo nível do aplicativo Rails servidores (servindo arquivos estáticos, reescritas / redirecionamentos de URL, etc.).

O nginx pode manipular muitas milhares de conexões simultâneas sem muitos recursos, enquanto os servidores de aplicativos do Unicorn Rails normalmente só podem atender a um punhado de conexões simultâneas. À medida que você dimensiona mais, precisará de mais instâncias nginx load balancer / front-end (e um método de balanceamento de carga entre elas, como round-robin de DNS ou outros mecanismos).

Se você usa o Amazon AWS ou outras plataformas de hospedagem mais maduras, o uso de um ELB (Elastic Load Balancing - Balanceamento de Carga Elástico) como o principal balanceador de carga da Web é usado com frequência. Cada servidor de aplicativos executa nginx / Unicorn, utilizando o nginx como um processamento de front-end para descarregamento de cada Unicorn. Isso é muito mais fácil de dimensionar, devido ao ELB de alto volume na frente de cada servidor.

    
por 27.12.2013 / 15:18