Verniz Nginx Nginx Django?

13

Eu tenho um aplicativo django e quero configurar o Varnish em um servidor na frente dele. Em outro tópico de falha no servidor, alguém sugeriu colocar o Nginx na frente do Varnish.

Devo colocar o Nginx na frente do Varnish no servidor de cache? Em caso afirmativo, devo usar o Nginx no servidor de aplicativos?

Enrico
fonte

Respostas:

10

Estamos falando de 1 a 3 servidores front-end no total, não um grande farm de servidores com balanceamento de carga entre as camadas?

Colocar o nginx na frente do Vanish permite que você faça a compactação HTTP em tempo real. Essa é uma prática recomendada de desempenho, mas pode ser dispensada. (O conteúdo no Varnish geralmente é mantido descompactado, para que o ESI Inclui trabalho e, assim, você não precisa lidar com várias versões em cache do mesmo objeto, dependendo da correspondência do cabeçalho / navegador Vary.)

Em relação ao nginx no servidor de aplicativos - o Apache com mod_wsgi não é a maneira recomendada e mais comum de implantar novas instalações do Django hoje em dia? Não estou ciente de um motivo convincente para usar o nginx / fastcgi sobre o Apache / mod_wsgi para Django; mas você deve obter conselhos de um especialista em Django.

Quanto ao Varnish ter recursos atraentes de balanceamento de carga que o nginx não possui, não vejo o que são? O verniz possui balanceamento aleatório e round-robin. O nginx possui round-robin, IP do cliente e hash consistente - não vejo um benefício significativo para o Varnish? É a atualização graciosa da configuração do VCL ou do Varnish ou algo mais?

Para uma pequena configuração de servidor de 1 a 3, acho que eu faria

Verniz -> Apache / mod_wsgi / Django

ou talvez

Squid -> Apache / mod_wsgi / Django

e ignore a compactação HTTP por simplicidade, a menos que a largura de banda seja cara.

Atualizar:

Graham Dumpleton escreveu um comentário valioso abaixo. Ele menciona uma configuração muito comum, por exemplo, um blog em um VPS ou um pequeno web farm sem cache:

nginx -> Apache / mod_wsgi / Django

Esta é uma solução muito boa, por alguns motivos:

  1. Configuração simples
  2. O nginx, que possui alta velocidade e sobrecarga mínima, lida com a veiculação estática de arquivos e a conexão com o navegador mantida ativa.
  3. O Django roda no excelente mod_wsgi de Graham Dumpleton, a plataforma recomendada para o Django.

A razão pela qual não mencionei isso inicialmente é que o OP parecia exigir o Varnish, uma solução de cache de alto desempenho. A combinação nginx / Apache / mod_wsgi não pode fazer cache com um nível de desempenho e flexibilidade que corresponda ao Varnish.

Jesper M
fonte
2
Você pode até usar 'nginx -> Apache / mod_wsgi / Django' como muitas pessoas usam por várias boas razões.
Graham Dumpleton 5/11/2009
4
A outra coisa que o nginx fornece nesse caso de uso que muitos não perceberiam é que o nginx isola o Apache de clientes lentos. Isso ocorre porque o conteúdo da solicitação até um determinado tamanho não é transmitido pelo nginx. Em vez disso, ele armazenará em buffer os cabeçalhos e o conteúdo da solicitação e somente a solicitação de proxy quando tiver tudo. Isso significa que ele só é entregue ao Apache quando todas as informações necessárias para lidar com a solicitação estão disponíveis. Portanto, o Apache / mod_wsgi ficará ocupado pelo menor tempo possível e os processos / threads não vinculados pelo cliente lento. Uma medida de buffer também acontece no sentido inverso, para que o Apache possa terminar mais rápido também.
Graham Dumpleton 6/11/2009
2
@ Graham Dumpleton: É muito bom ter você aqui, espero que você fique por aqui. :-). Em relação à multiplexação HTTP nginx / manipulação de conexão inteligente, concordo plenamente.
Jesper M
Em primeiro lugar, obrigado Jesper e Graham por reservar um tempo para escrever respostas tão abrangentes. Estou pensando em colocar um servidor de balanceamento de carga na frente de dois servidores de aplicativos. Um servidor lidará com a maior parte do tráfego, sendo o segundo usado principalmente para failover e para testar novos recursos beta.
Enrico
O verniz é atraente porque me dá controle total sobre quais solicitações são enviadas para qual back-end. O verniz também verifica a integridade dos servidores back-end, o failover é simples de configurar e lida com back-end lento / morto normalmente (se os dois servidores morrerem).
Enrico
4

Você pode usar o nginx sem verniz para proxy e armazenar em cache o conteúdo.

silencioso
fonte
2
verniz tem alguma carga atraente balanceamento características que nginx não fora da caixa
Enrico
4
quais recursos, por exemplo?
silenciosa
4

Estou usando Nginx, Varnish e Apache / mod_wsgi / Django com sucesso. Comecei com a seguinte configuração:

Nginx -> Apache / mod_wsgi / Django

Depois que comecei a ver uma carga significativa no Apache, adicionei o Varnish:

Nginx -> Verniz -> Apache / mod_wsgi / Django

Eu uso o Nginx como um tipo de "roteador de URL". Os pedidos de administração do Django são enviados diretamente do Nginx para o Apache. As solicitações do cliente são enviadas do Nginx para o Varnish, que armazena em cache as solicitações do Apache e também serve itens "agraciados" do cache se os servidores de aplicativos não estiverem disponíveis.

Meu servidor Nginx também atende a determinados conteúdos estáticos diretamente (por exemplo, imagens, CSS e arquivos javascript).

Em geral, o desempenho tem sido excelente. Notei algumas advertências que devo mencionar:

  1. Em um site ocupado, a reinicialização do Varnish pode causar um pico na carga nos servidores de aplicativos, portanto, é melhor manter o Varnish no mínimo. (O verniz não parece ter um "recarregamento" como o Nginx / Apache, onde apenas relê seus arquivos VCL). Por outro lado, recarregar uma configuração do Nginx tem um impacto mínimo. Por esse motivo, faço a maior parte da reescrita e do "roteamento" de URL no Nginx.
  2. É fácil verniz entre o Nginx e o Apache. Se você começar a perceber uma alta carga nos servidores de aplicativos, adicionar verniz até mesmo na configuração padrão pode realmente fazer a diferença.
  3. Se você usa o Varnish, definitivamente precisa pensar em como vai lidar com a invalidação de cache.
  4. Minha experiência foi que os manipuladores de verniz falharam nos back-ends um pouco mais graciosamente que o Nginx (como você apontou anteriormente).
David Narayan
fonte
Eu nunca vi verniz por trás de outra coisa. O verniz geralmente é o balanceador de carga que executa o roteador de URL. Então você tem 2 servidores web e 1 proxy ou 2 proxies e 1 servidor web? Q
ioanb7
2

Estou usando o Nginx-> Varnish-> uWSGI-> Django

Mecanismo
fonte