O site Nginx / uWsgi / Django pode manipular mais tráfego com URL de regravação

3

Estou executando um aplicativo do Django, usando o uWsgi por trás do Nginx. Eu tenho feito algum ajuste de desempenho e teste de carga usando o ApacheBench e descobri algo inesperado que eu me pergunto se alguém poderia explicar para mim. Na minha configuração do Nginx eu tenho uma diretiva de reescrita que pega muitas permutações de URL diferentes e então as encaminha para o URL canônico que eu quero usar, por exemplo, ele captura www.mysite.com/whatever, www.mysite.co.uk/whatever e encaminha todos eles para o link .

Se eu carregar o teste em qualquer um dos URLs listados com um redirecionamento (ou seja, NÃO o URL canônico para o qual ele será encaminhado), ele poderá atender 15000 conexões simultâneas sem suar a camisa.

Se eu carregar o teste contra a URL canônica, para a qual o teste acima eu esperava ser encaminhado de qualquer maneira, ele não aguenta tanto. Ele derrubará cerca de 4.000 das 15.000 solicitações e poderá manipular apenas cerca de 9000 de maneira confiável.

Esta é a linha de comando que estou usando para testar:

ab -c15000 -n15000 http://www.mysite.com/somepath/

e

ab -c15000 -n15000 http://mysite.com/somepath/

Eu tentei vários tipos diferentes - não faz diferença em qual ordem eu os incluo. Isso não faz sentido para mim - eu posso entender por que as solicitações envolvendo um redirecionamento podem não lidar com tantas conexões simultâneas, mas está acontecendo ao contrário. Alguém pode explicar? Eu realmente preferiria se a URL canônica fosse a que pudesse lidar com mais tráfego.

Vou postar minha configuração do Nginx abaixo.

Obrigado por qualquer ajuda!

server {
    server_name www.somesite.com  somesite.net www.somesite.net somesite.co.uk www.somesite.co.uk;
    rewrite ^(.*) http://somesite.com$1 permanent;
}

server {
    root   /home/django/domains/somesite.com/live/somesite/;

    server_name  somesite.com somesite-live.myserver.somesite.com;

    access_log  /home/django/domains/somesite.com/live/log/nginx.log;

    location / {
        uwsgi_pass unix:////tmp/somesite-live.sock;
        include    uwsgi_params;
    }

    location /media {
        try_files $uri $uri/ /index.html;
    }

    location /site_media {
        try_files $uri $uri/ /index.html;
    }

    location = /favicon.ico {
        empty_gif;
    }
}
    
por Ludo 08.12.2010 / 11:02

2 respostas

4

A resposta é bem simples, na verdade. No seu primeiro teste (o redirecionamento) ab está apenas comparando uma solicitação "301 Moved Permanently". O segundo teste está testando seu conteúdo real.

Para ilustrar o que quero dizer, enrole seu URL de redirecionamento. Você terá algo como:

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/0.8.52</center>
</body>
</html>

Não é difícil lidar com 15000 solicitações simultâneas por apenas isso! ;)

    
por 16.12.2010 / 01:26
0

Você já apresentou isso à lista de discussão dev? Muito interessante, com certeza. Você já tentou ativar a depuração completa; você pode ter que ativá-lo durante a compilação. Uma vez ativado, faça um pedido para o canônico e um para o outro. Talvez os logs de depuração lançem alguma luz. Você já tentou remover o segundo domínio server_name (somesite-live ..)? Boa sorte, deixe-nos saber se você descobrir isso!

    
por 08.12.2010 / 12:02