Nginx Varnish Nginx Django?

13

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

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

    
por Enrico 05.11.2009 / 12:13

4 respostas

10

Estamos falando de 1 a 3 servidores frontend no total, não de 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 em verniz é geralmente mantido descompactado, de modo que o ESI Includes funciona, e, portanto, você não precisa lidar com várias versões em cache do mesmo objeto, dependendo da correspondência de cabeçalho / navegador Vary.)

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

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

Para uma pequena configuração de 1-3 servidores, acho que apenas faria

Varnish --> Apache / mod_wsgi / Django

ou talvez

Squid --> Apache / mod_wsgi / Django

e ignorar a compactação HTTP para simplificar, a menos que a largura de banda seja cara.

Atualização:

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

nginx --> Apache / mod_wsgi / Django

Esta é uma solução muito boa, por algumas razões:

  1. Configuração simples
  2. O nginx, que tem alta velocidade e sobrecarga mínima, lida com a entrega de arquivos estáticos e a manutenção de atividade da conexão com o navegador.
  3. O Django roda no excelente mod_wsgi de Graham Dumpleton, a plataforma recomendada para o Django.

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

    
por 05.11.2009 / 13:01
4

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

    
por 05.11.2009 / 12:24
4

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

Nginx -> Apache/mod_wsgi/Django

Quando comecei a ver uma carga significativa no Apache, adicionei o verniz:

Nginx -> Varnish -> Apache/mod_wsgi/Django

Eu uso o Nginx como uma espécie de "roteador de URL". As solicitações do administrador do Django são enviadas diretamente do Nginx para o Apache. As solicitações de clientes são enviadas do Nginx para o Varnish, que armazena em cache as solicitações do Apache e também serve itens "graced" do cache, caso os servidores de aplicativos não estejam disponíveis.

Meu servidor Nginx também exibe determinado conteúdo estático diretamente (por exemplo, imagens, CSS e arquivos javascript).

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

  1. Em um site movimentado, reiniciar o verniz pode fazer com que a carga aumente nos servidores de aplicativos, por isso é melhor manter o verniz reinicializado ao mínimo. (Varnish não parece ter um "reload" como Nginx / Apache, onde apenas releia seus arquivos VCL). Por outro lado, recarregar uma configuração Nginx tem um impacto mínimo. Por esse motivo, faço a maioria das reescritas de URL e "roteamento" no Nginx.
  2. O
  3. Varnish é fácil de acessar entre o Nginx e o Apache. Se você começar a perceber alta carga nos seus servidores de aplicativos, adicionar verniz mesmo com a configuração padrão pode realmente fazer a diferença.
  4. Se você usa o Varnish, definitivamente precisa pensar em como vai lidar com a invalidação do cache.
  5. Minha experiência tem sido que o Varnish lida com back-ends fracassados um pouco mais graciosamente do que o Nginx (como você apontou anteriormente).
por 08.12.2009 / 15:52
2

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

    
por 11.02.2011 / 04:22