Determinando uma Medida Realística de Solicitações por Segundo para um Servidor da Web

15

Estou configurando uma pilha nginx e otimizando a configuração antes de ir ao ar. Ao executar um teste de estresse na máquina, fiquei desapontado ao ver as coisas chegando a 150 solicitações por segundo, com um número significativo de solicitações que levam> 1 segundo para retornar. Estranhamente, a máquina em si não estava respirando com dificuldade.

Finalmente pensei em fazer ping na caixa e vi tempos de ping em torno de 100-125 ms. (A máquina, para minha surpresa, está em todo o país). Então, parece que a latência da rede está dominando meus testes. Executando os mesmos testes de uma máquina na mesma rede que o servidor (tempos de ping <1ms) e vejo> 5000 solicitações por segundo, o que está mais alinhado com o que eu esperava da máquina.

Mas isso me fez pensar: como determinar e relatar uma medida "realista" de solicitações por segundo para um servidor web? Você sempre vê alegações sobre desempenho, mas a latência da rede não deve ser levada em consideração? Claro que posso atender a 5000 solicitações por segundo em uma máquina próxima ao servidor, mas não em uma máquina em todo o país. Se eu tiver muitas conexões lentas, elas eventualmente afetarão o desempenho do meu servidor, certo? Ou estou pensando nisso tudo errado?

Perdoe-me se isso é engenharia de rede 101 coisas. Sou desenvolvedor por profissão.

Atualização: Editado para maior clareza.

Don
fonte
abtem uma opção de simultaneidade. O que você definiu? Além disso, se você estiver testando a partir de uma conexão ADSL doméstica, é provável que o teste seja dominado por sua largura de banda e não estará testando nada no servidor.
Ladadadada 22/03/12
Estou familiarizado com a opção de concorrência de ab e tentei uma ampla gama de valores para descobrir os limites da caixa. Como escrevi acima, entendo que meus testes iniciais foram dominados pela rede e não refletiam a capacidade do servidor. Mas minha pergunta ainda permanece: de onde a maioria das pessoas executa seus testes para obter métricas realistas? Os testes executados a partir de uma caixa na mesma rede que o servidor (eliminando efetivamente qualquer latência de rede da equação) retornam grandes números, mas não parecem números "justos", pois usuários reais virão de fora da rede.
Don
Os testes executados na mesma rede podem, de fato, ser mais "justos", pois essencialmente ignoram a rede. Seus usuários provavelmente estão em redes diferentes - portanto, a largura de banda agregada de todas essas redes deve exceder facilmente a largura de banda disponível do servidor. Considerando todos os usuários juntos, o gargalo é, portanto, os recursos do servidor - enquanto, considerando um usuário individual, o gargalo pode ser a largura de banda do usuário único. (O teste ideal, talvez, seria executado em vários locais remotos para simular melhor as circunstâncias reais, embora a maioria dos casos não precise disso).
cyberx86
"Considerando todos os usuários juntos, o gargalo é, portanto, os recursos do servidor" - isso faz sentido e parece o caminho certo para pensar sobre isso. Suponho que o servidor possa estar sentado atrás de equipamentos de rede ruins, limitando sua taxa de resposta ao mundo exterior, mas esse não é realmente o problema do servidor e precisa ser tratado separadamente. Algo como Pingdom poderia ser usado para executar o teste ideal, suponho.
26412 Don

Respostas:

3

Se você se importa com o desempenho do seu servidor quando acessado de algum lugar do mundo, peça a um amigo em algum lugar do mundo (deve ter boa largura de banda) para instalar o sproxy + siege em sua caixa Linux. Basta baixar, configurar, fazer. Essas ferramentas são pequenas, elas compilam em segundos.

Primeiro, comece sproxyna caixa do linux. Por padrão, ele será executado na porta 9001 no host local (127.0.0.1). Se você quiser acessá-lo de fora, basta passar o endereço IP de saída como parâmetro.
Agora conecte-se ao sproxy configurando seu navegador para usar este ip e porta como proxy para HTTP. Tudo o que você faz a partir de agora é gravado por sproxy e pode ser reproduzido mais tarde. Agora navegue pelo site, faça o que seus clientes farão e tente fazer coisas "caras" que usam o servidor.
Quando terminar, finalize o sproxy pressionando CTRL ^ C. Ele registrou suas ações para $HOME/urls.txt. Mova o arquivo para o local onde o cerco reside. Para iniciar o teste de estresse, execute siege -f urls.txt -d NUM -c NUM. dsignifica atraso entre solicitações; ao fazer testes de desempenho, use 1 (segundo).csignifica o número de usuários simultâneos simulados. Escolha à vontade, mas comece baixo. O Siege mostrará o número de transações por segundo, erros, quanto tempo as solicitações médias levaram etc. É uma ferramenta poderosa e fácil de usar.
Se você precisar de mais informações sobre os parâmetros (há muitos), verifique o cerco manual de um o manual do sproxy

Para obter resultados mais realistas, permita que muitas pessoas testem seu servidor de vários países ao mesmo tempo e que enviem as estatísticas.

SebiF
fonte
2

A medida realista de solicitações / s deve ser tomada nos logs de acesso. Na IMO, a latência da solicitação não tem nada a ver com a carga do servidor, pois o servidor processa todas as solicitações na mesma velocidade, independentemente de sua origem.

ejaenv
fonte
1

Considere usar serviços como o Soasta Cloudtest . Com ele, você pode obter relatórios bastante detalhados sobre seus testes e executar testes de desempenho de vários provedores públicos de nuvem / virtualização. Você pode configurar o quão duro e por quanto tempo você deseja martelar seus servidores. Eles também têm um livre " Lite " versão que você possa ver o que pode fazer antes de cometer algum dinheiro.

Mxx
fonte