
Temos nosso próprio rack em Amsterdã, Leaseweb.
Fazemos balanceamento de carga HTTP (via Cloudflare) com 3 servidores IIS Windows 2019:
- Servidor 1: Servidor supermicro bare-metal. Executa IIS, MySQL8 e Redis.
- Servidor 2: VM no servidor Dell. Executa o IIS.
- Servidor 3: VM no servidor Dell (cópia exata do servidor2). Executa o IIS.
Os arquivos são servidos localmente em todas as causas (via replicação)
Agora o problema é que o TTFB, comomedido localmente no servidoré maior no servidor 2 e no servidor 3 (VMs).
Executando (múltiplos) testes LOCALMENTE com o Chrome:
Servidor1:
- Espera (TTFB): 269ms
- Espera (TTFB): 255ms
- Espera (TTFB): 253ms
Servidor 2:
- Espera (TTFB): 379ms
- Espera (TTFB): 376ms
- Espera (TTFB): 369ms
Servidor 3:
- Espera (TTFB): 374ms
- Espera (TTFB): 381ms
- Espera (TTFB): 378ms
Como você pode ver, o servidor um tem TTFB significativamente menor. Em termos de CPU, os servidores 2 e 3 são realmente mais rápidos:
SCRIPT DE REFERÊNCIA PHP
Tempo total do servidor1: : 4,022 seg.
Tempo total do servidor2: : 2,866 seg.
Tempo total do servidor3: : 2,936 seg.
A E/S é praticamente a mesma para todos os servidores. Todos eles têm novos SSDs com controladores RAID de hardware.
Testei a mudança do Redis para uma das VMs para descobrir se a latência extra vem do Redis, mas isso não faz a menor diferença.
Minha suposição é que a latência extra no TTFB vem do MySQL que roda no servidor 1? Executar o MySQL no mesmo servidor produz TTFB significativamente menor, mesmo que a CPU seja mais lenta.
Existe uma solução alternativa para isso?
Na verdade, a pergunta correta é: como posso identificar qual é a causa da latência extra?