![读取 NFS 文件系统是否会降低性能?](https://linux22.com/image/519286/%E8%AF%BB%E5%8F%96%20NFS%20%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%98%AF%E5%90%A6%E4%BC%9A%E9%99%8D%E4%BD%8E%E6%80%A7%E8%83%BD%EF%BC%9F.png)
如果 NFS 客户端读取文件,是否会发生任何网络流量?或者仅仅是写入(由任何节点)才会导致网络流量?
特别是,我感兴趣的是,file_exists()
如果目标文件位于 NFS 上,则在 PHP 脚本中执行调用是否会比目标文件位于本机文件系统上更昂贵?
作为参考,这是我的 NFS 配置:
服务器/etc/exports
:
/var/www/staging/uploads 192.168.0.1(rw,sync,no_root_squash)
客户/etc/fstab
:
192.168.0.1:/var/www/staging/uploads /var/www/staging/uploads nfs soft,intr,rsize=8192,wsize=8192
答案1
读取会导致流量。文件 stat() 调用也会导致流量。客户端有缓存,但缓存的寿命很短,而且确实不值得依赖。
尽管 NFS 可以进行调整,但没有人指责过它的快速性和高效性。
答案2
是的,流量确实发生了。在您的特定用例中,PHP 将测试该文件是否确实存在。
但是,您可能会惊讶于 NFS 在 Web 服务中的流行程度。我记得有一家大型博客机构将其用作图像文件存储。但是他们只从 NFS 调用文件一次,然后将其缓存。
最好的办法是多次分析您的脚本,以查看 NFS 请求与本地请求相比涉及多少开销。Xdebug 将为您提供帮助。
要确定涉及多少网络开销,请在发出请求时运行 TCPDump/Wire shark。然后查看输出。这应该可以让您了解每个请求涉及的内容。
您还可以使用 UDP 选项挂载 NFS 共享。这将大大加快速度。
如果您要将其推送到非常多的 Web 农场,则确实需要一个快速的后端网络。因此,如果您确实有能力使用本地存储,我会尝试这样做。