Eu assumi incorretamente que meu teste AB interno significa que meu servidor pode lidar com 1k simultaneidade @ 3k acessos por segundo.
Minha teoria no momento é que a rede é o gargalo. O servidor não pode enviar dados suficientes com rapidez suficiente.
O teste externo do blitz.io com 1k de simultaneidade mostra meus hits / s em 180, com páginas demorando mais e mais para responder, pois o servidor só pode retornar 180 por segundo.
Euserviumarquivoembrancodonginxeoanotei:eleescala1:1comsimultaneidade.
Agora, para descartar afunilamentos de IO / memcached (o nginx normalmente puxa do memcached), eu sirvo uma versão estática da página em cache do sistema de arquivos.
Osresultadossãomuitosemelhantesaomeutesteoriginal;Estoucomcercade180RPS.
AdivisãodapáginaHTMLaomeiomedáodobrodoRPS,porissoédefinitivamentelimitadopelotamanhodapágina.
Se eu internamente o ApacheBench do servidor local, obtenho resultados consistentes de cerca de 4k RPS na página inteira e na meia página, com altas taxas de transferência.
Taxa de transferência: 62586,14 [Kbytes / seg] recebidos
Se eu for AB de um servidor externo, recebo cerca de 180RPS - o mesmo que os resultados de blitz.io.
Como sei que não é o afogamento intencional?
Se eu fizer benchmarks de vários servidores externos, todos os resultados se tornarão insatisfatórios, o que me leva a acreditar que o problema está no tráfego de saída dos meus servidores, não um problema de velocidade de download com meus servidores de benchmarking / blitz.io.
Estou de volta à conclusão de que meu servidor não consegue enviar dados com rapidez suficiente.
Estou certo? Existem outras maneiras de interpretar esses dados? A solução / otimização é usada para configurar vários servidores + balanceamento de carga que podem ter 180 visitas por segundo?
Sou muito novo na otimização de servidores, por isso gostaria de receber qualquer confirmação para interpretar esses dados.
Tráfego de saída
Veja mais informações sobre a largura de banda de saída: O gráfico de rede mostra uma saída máxima de 16 Mb / s: 16 megabits por segundo. Não parece muito em tudo.
Devido a uma sugestão sobre afogamento, eu olhei para isso e descobri que o linode tem um limite de 50mbps (que eu nem estou perto de acertar, aparentemente). Eu tinha aumentado para 100mbps.
Como o linode limita meu tráfego, e eu nem o estou atingindo, isso significa que o meu servidor deve realmente ser capaz de gerar até 100mbps, mas é limitado por algum outro gargalo interno? Eu simplesmente não entendo como as redes desse tamanho funcionam; eles podem literalmente enviar dados tão rápido quanto podem ler do HDD? O pipe de rede é grande?
Em conclusão
1: Com base no acima, eu estou pensando que posso definitivamente aumentar o meu 180RPS, adicionando um balanceador de carga nginx em cima de uma configuração de servidor multi nginx em exatamente 180RPS por servidor atrás do LB.
2: Se o linode tiver um limite de 50 / 100mbit que não estou atingindo, deve haver algo que eu possa fazer para atingir esse limite com a configuração de um único servidor. Se eu puder ler / transmitir dados rápido o suficiente localmente, e o linode se incomodar em ter um limite de 50mbit / 100mbit, deve haver um gargalo interno que não me permita atingir os limites que não tenho certeza de como detectar. Correto?
Eu percebo que a pergunta é enorme e vaga agora, mas não tenho certeza de como condensá-la. Qualquer entrada é apreciada em qualquer conclusão que eu tenha feito.