Eu assumi incorretamente que meu teste AB interno significa que meu servidor pode lidar com 1k de simultaneidade a 3k de hits por segundo.
Minha teoria no momento é que a rede é o gargalo. O servidor não pode enviar dados suficientes com rapidez suficiente.
Os testes externos do blitz.io com 1k de simultaneidade mostram meus hits / s atingindo o limite de 180, com páginas demorando mais e mais para responder, pois o servidor só pode retornar 180 por segundo.
Eu servi um arquivo em branco do nginx e o coloquei no banco: ele escala 1: 1 com simultaneidade.
Agora, para descartar gargalos de E / Memcached (o nginx normalmente é extraído do memcached), eu ofereço uma versão estática da página em cache do sistema de arquivos.
Os resultados são muito semelhantes ao meu teste original; Estou limitado a cerca de 180 RPS.
Dividir a página HTML ao meio me dá o dobro do RPS, por isso é definitivamente limitado pelo tamanho da página.
Se eu internamente ApacheBench do servidor local, obtenho resultados consistentes de cerca de 4k RPS na página inteira e na meia página, a altas taxas de transferência. Taxa de transferência: 62586,14 [Kbytes / s] recebidos
Se AB de um servidor externo, recebo cerca de 180RPS - o mesmo que os resultados do blitz.io.
Como sei que não é uma limitação intencional?
Se eu fizer o benchmark de vários servidores externos, todos os resultados ficarão ruins, o que me levará a acreditar que o problema está no tráfego de saída de MEUS servidores, e não na velocidade de download dos meus servidores de benchmarking / blitz.io.
Então, estou de volta à minha conclusão de que meu servidor não pode enviar dados com rapidez suficiente.
Estou certo? Existem outras maneiras de interpretar esses dados? A solução / otimização para configurar vários servidores + balanceamento de carga cada um pode atender 180 ocorrências por segundo?
Eu sou um iniciante na otimização de servidores, por isso gostaria de receber qualquer confirmação para interpretar esses dados.
Tráfego de saída
Aqui estão 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.
Devido a uma sugestão sobre a otimização, examinei isso e descobri que o linode tem um limite de 50mbps (que nem estou nem perto de acertar, aparentemente). Eu tinha aumentado para 100mbps.
Como o linode limita meu tráfego, e eu nem estou atingindo, isso significa que meu servidor deve ser capaz de produzir até 100mbps, mas é limitado por algum outro gargalo interno? Eu simplesmente não entendo como as redes dessa escala funcionam; eles podem literalmente enviar dados o mais rápido que podem ler do disco rígido? O canal de rede é tão grande?
Em conclusão
1: Com base no exposto, acho que posso aumentar definitivamente meus 180RPS adicionando um balanceador de carga nginx em cima de uma configuração de servidor multi nginx a 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 do meu servidor único. Se eu posso ler / transmitir dados rápido o suficiente localmente, e o linode ainda incomoda ter um limite de 50mbit / 100mbit, deve haver um gargalo interno que não está me permitindo atingir os limites que não tenho certeza de como detectar. Corrigir?
Sei que a pergunta é enorme e vaga agora, mas não sei como condensá-la. Qualquer contribuição é apreciada em qualquer conclusão que eu tenha feito.