如果2个或更多服务器尝试同时写入同一文件,在NFS中会发生什么?

use*_*715 2 php nfs file contention

我正在使用一个PHP Web应用程序,该应用程序会自动调整图像的大小,并且正在考虑将缓存的副本存储在安装了NFS的NAS上,因此更新图像时,我很容易刷新缓存。

我唯一担心的是,如果集群中有2个或更多服务器试图同时创建相同的图像缓存文件,那么NFS通常会发生什么情况?

当刷新内容更新的缓存时,很有可能会发生冲突,但是我没有很好的方法来测试开发中的这种情况,因为我只在一个盒子上工作。

有经验的人吗?

ste*_*esu 5

这取决于您如何打开文件。如果您以“附加”模式打开文件,则Unix / Linux实际上会将内容写入高速缓存,直到您创建换行符为止,然后它将新行粘贴到文件末尾(覆盖“文件结尾”字节模式)并写入新的“文件结尾”。在这种情况下,如果两个人试图同时写入同一文件,则两条写入行都将通过,并按接收顺序一次附加一行。因此,您可能会期望像:

This was the old contents
of the file
The first script added
The second script added
this line (script 1)
this line (script 2)
Run Code Online (Sandbox Code Playgroud)

如果两个“写入”命令恰好同时到达(精确到纳秒精度),则操作系统实际上会创建一个中断状态。操作系统的处理方式取决于操作系统,但是大多数操作系统只会生成两个随机数来决定谁先执行。

如果您以“写入”模式打开文件(例如您想在中间添加内容),则实际上您必须锁定文件才能执行此操作。第二个PHP脚本将引发错误,提示它无法打开文件。