当 Redis 非本地时,负载平衡(http)节点速度较慢

当 Redis 非本地时,负载平衡(http)节点速度较慢

我们运行 3 台 Windows 2019 服务器的负载平衡。其中一台是“主”服务器,为其他节点提供 SMB 共享,它也是运行 Redis 的服务器(Redis 用于会话和缓存)。但这个主服务器也是一个 HTTP 节点。

我们的问题是,在主服务器上,我们的网站运行速度比在其他节点上快得多,差异是 1 秒,非常大。

事实上,其他(非主)节点有更快的 CPU,并且在 PHP 基准测试中它们的表现更好:

主服务器(Redis、SMB、IIS):

PHP version : 7.4.16
Platform : WINNT
--------------------------------------
test_math                 : 0.396 sec.
test_stringmanipulation   : 2.818 sec.
test_loops                : 0.304 sec.
test_ifelse               : 0.374 sec.
--------------------------------------
Total time:               : 3.892 sec.

其他节点:

PHP version : 7.4.16
Platform : WINNT
--------------------------------------
test_math                 : 0.311 sec.
test_stringmanipulation   : 2.334 sec.
test_loops                : 0.234 sec.
test_ifelse               : 0.191 sec.
--------------------------------------
Total time:               : 3.07 sec.

所以这肯定不是 CPU 问题,因为主节点速度较慢。所以这要么是网络、SMB 或 Redis 问题。

我倾向于使用 Redis,因为我们对节点使用 Wincache 和 Opcache,所以基本上所有 .php 文件都在每个节点本地缓存(SMB 仅用于每隔几分钟重新验证)。

然而我不知道如何确切地找出瓶颈在哪里,以及如何解决它。

有人可以帮忙吗?

谢谢亚历克斯

答案1

我其实完全搞错了,是 SMB 共享造成了问题。我通过将文件复制到从属节点来验证这一点,其性能与主服务器相同,甚至略好(因为 CPU 更快)。

所以这确实是 SMB 问题。SMB 可能仍在来回发送数据。

SMB 共享位于非常快的 SSD 存储上,我怀疑这仅仅是因为 SMB 不够快,或者存在配置问题。

如果有人对这种情况有关于 SMB 的任何建议,请告诉我们 :)

谢谢亚历克斯

相关内容