É melhor servir um site django usando nginx + apache ou nginx + tornado?

1

Eu tenho um site django que é ajax intensive atualmente sendo executado no mod_wsgi do apache com nginx como um proxy reverso.

Agora é melhor manter minha configuração atual ou é melhor executar o meu site django no tornado com nginx como proxy reverso e balanceador de carga?

A razão pela qual estou perguntando é que eu li em algum lugar algo como mod_wsgi não foi projetado para coisas assíncronas. Eu não tenho muita certeza sobre essa parte, mas isso me fez pensar que talvez o tornado com o nginx seja bom para minha configuração desde o seu não-bloqueio.

Eu preciso do seu conselho. Obrigado.

    
por Marconi 10.02.2011 / 17:21

3 respostas

4

O Django fica no topo da interface WSGI e essa interface é, por definição, bloqueada. Por isso, você não está usando nenhum mecanismo assíncrono em seu aplicativo da Web. Os benefícios obtidos com o uso de um servidor da Web assíncrono são bastante reduzidos. Quaisquer benefícios terão mais a ver com o servidor alternativo sendo leve e não carregando muita sobrecarga e nada a ver com o fato de que o assíncrono é usado. Para obter o máximo de um servidor assíncrono, você precisaria abandonar o Django e gravar nas APIs assíncronas do servidor assíncrono específico que está usando.

Também deve ser destacado que os benchmarks iniciais que foram lançados sobre o Tornado em comparação com o Django no topo do Apache / mod_wsgi foram falhos. Eles alegaram que Tornado foi 4 vezes mais rápido. Isso pode ter sido verdade para uma simples aplicação web assíncrona gravada em APIs Tornado, em comparação com um aplicativo Django hello world, mas se você compará-lo a um programa básico WSGI hello world, o desempenho não é muita diferença. Assim, a performance do Django rodando no topo do Tornado com um adaptador WSGI não é muito diferente do Django no topo do Apache / mod_wsgi e quando eu testei no MacOS X, o Tornado ficou um pouco mais lento.

Se você ainda acha que usar um servidor mais leve trará alguns benefícios ou poderá ser mais fácil de gerenciar, sugiro gunicorn em vez de Tornado.

    
por 11.02.2011 / 05:07
1

Usamos nginx como balanceador de carga e uWSGI como servidor WSGI rápido. Até agora sem problemas

    
por 10.02.2011 / 17:29
1

Uma ótima solução para servir o Django (ou outros aplicativos WSGI), na verdade, é o Nginx + Gunicorn . Até agora, esta configuração funciona muito bem, e o software Gunicorn é recente e tem uma recepção muito boa pela comunidade Python e Django. Você deveria tentar.

Atualmente, estou usando o supervisord para lidar com meus processos de comunicação, mas outras soluções são possíveis.

    
por 10.02.2011 / 22:34