我们在阿姆斯特丹有自己的机架,Leaseweb。
我们使用 3 台 Windows 2019 IIS 服务器进行 HTTP 负载平衡(通过 Cloudflare):
- 服务器 1:裸机超微服务器。运行 IIS、MySQL8 和 Redis。
- 服务器 2:戴尔服务器上的 VM。运行 IIS。
- 服务器 3:戴尔服务器上的 VM(服务器 2 的精确副本)。运行 IIS。
所有文件均在本地提供(通过复制)
现在的问题是 TTFB,因为在服务器本地测量在服务器 2 和服务器 3 (虚拟机) 上更高。
使用 Chrome 在本地运行(多个)测试:
服务器 1:
- 等待(TTFB):269毫秒
- 等待(TTFB):255毫秒
- 等待(TTFB):253毫秒
服务器2:
- 等待(TTFB):379毫秒
- 等待(TTFB):376毫秒
- 等待(TTFB):369毫秒
服务器 3:
- 等待(TTFB):374毫秒
- 等待(TTFB):381毫秒
- 等待(TTFB):378毫秒
如你所见,服务器 1 的 TTFB 明显更低。从 CPU 角度来看,服务器 2 和 3 实际上更快:
PHP 基准测试脚本
服务器1总时间::4.022秒
服务器2 总时间::2.866秒。
服务器3总时间::2.936秒。
所有服务器的 I/O 大致相同。它们都配有带硬件 RAID 控制器的新 SSD。
我确实测试过将 Redis 移动到其中一台虚拟机,这样我就可以弄清楚额外的延迟是否来自 Redis,但这并没有什么区别。
我的假设是 TTFB 中的额外延迟来自在服务器 1 上运行的 MySQL?在同一台服务器上运行 MySQL 会产生明显较小的 TTFB,即使 CPU 较慢。
有办法解决这个问题吗?
实际上,正确的问题是,我如何确定额外延迟的原因是什么?