
Tenemos nuestro propio rack en Amsterdam, Leaseweb.
Realizamos equilibrio de carga HTTP (a través de Cloudflare) con 3 servidores IIS de Windows 2019:
- Servidor 1: servidor supermicro básico. Ejecuta IIS, MySQL8 y Redis.
- Servidor 2: VM en el servidor Dell. Ejecuta IIS.
- Servidor 3: VM en el servidor Dell (copia exacta del servidor 2). Ejecuta IIS.
Los archivos se sirven localmente en todas las causas (mediante replicación)
Ahora el problema es que el TTFB, comomedido localmente en el servidores mayor en el servidor 2 y el servidor 3 (VM).
Ejecutar (múltiples) pruebas LOCALMENTE con Chrome:
Servidor 1:
- Espera (TTFB): 269 ms
- Espera (TTFB): 255 ms
- Espera (TTFB): 253 ms
Servidor 2:
- Espera (TTFB): 379 ms
- Espera (TTFB): 376 ms
- Esperando (TTFB): 369ms
Servidor 3:
- Espera (TTFB): 374 ms
- Espera (TTFB): 381 ms
- Espera (TTFB): 378 ms
Como puede ver, el servidor uno tiene un TTFB significativamente menor. En términos de CPU, los servidores 2 y 3 son en realidad más rápidos:
GUIÓN DE REFERENCIA PHP
Servidor1 Tiempo total: : 4.022 seg.
Servidor2 Tiempo total: : 2.866 seg.
Servidor3 Tiempo total: : 2.936 seg.
La E/S es aproximadamente la misma para todos los servidores. Todos tienen nuevos SSD con controladores raid de hardware.
Probé mover Redis a una de las máquinas virtuales para poder determinar si la latencia adicional proviene de Redis, pero no hace la menor diferencia.
Mi suposición es que la latencia adicional en TTFB proviene de MySQL que se ejecuta en el servidor 1. La ejecución de MySQL en el mismo servidor produce TTFB significativamente más pequeños aunque la CPU sea más lenta.
¿Hay alguna solución para esto?
En realidad, la pregunta adecuada es: ¿cómo puedo identificar cuál es la causa de la latencia adicional?