
Wir haben unser eigenes Rack in Amsterdam, Leaseweb.
Wir führen einen HTTP-Lastenausgleich (über Cloudflare) mit 3 Windows 2019 IIS-Servern durch:
- Server 1: Bare-Metal-Supermikroserver. Führt IIS, MySQL8 und Redis aus.
- Server 2: VM auf Dell-Server. Führt IIS aus.
- Server 3: VM auf Dell-Server (exakte Kopie von Server 2). Führt IIS aus.
Die Dateien werden in jedem Fall lokal bereitgestellt (über Replikation).
Das Problem ist nun, dass die TTFB, wiegemessen lokal auf dem Serverist auf Server 2 und Server 3 (VMs) höher.
(Mehrere) Tests LOKAL mit Chrome ausführen:
Server 1:
- Warten (TTFB): 269 ms
- Warten (TTFB): 255 ms
- Warten (TTFB): 253 ms
Server 2:
- Warten (TTFB): 379 ms
- Warten (TTFB): 376 ms
- Warten (TTFB): 369 ms
Server 3:
- Warten (TTFB): 374 ms
- Warten (TTFB): 381 ms
- Warten (TTFB): 378 ms
Wie Sie sehen, hat Server 1 eine deutlich niedrigere TTFB. In Bezug auf die CPU sind Server 2 und 3 tatsächlich schneller:
PHP-BENCHMARK-SKRIPT
Server1 Gesamtzeit: 4,022 Sek.
Server2 Gesamtzeit: 2,866 Sek.
Server3 Gesamtzeit: 2,936 Sek.
Die I/O ist bei allen Servern ungefähr gleich. Sie verfügen alle über neue SSDs mit Hardware-RAID-Controllern.
Ich habe testweise Redis auf eine der VMs verschoben, um herauszufinden, ob die zusätzliche Latenz von Redis herrührt, aber es macht keinen Unterschied.
Ich gehe davon aus, dass die zusätzliche Latenz in TTFB von MySQL herrührt, das auf Server 1 ausgeführt wird. Wenn MySQL auf demselben Server ausgeführt wird, ist die TTFB erheblich kürzer, obwohl die CPU langsamer ist.
Gibt es hierfür eine Problemumgehung?
Die richtige Frage wäre eigentlich: Wie kann ich die Ursache für die zusätzliche Latenz ermitteln?