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

StackOverflow https://stackoverflow.com/questions/3832646

  •  26-09-2019
  •  | 
  •  

我工作的一个PHP Web应用程序,做影像的自动调整大小和我想存储在NFS缓存副本的安装NAS所以很容易让我刷新缓存,当图像被更新。

我担心的唯一的事情是,如果2什么一般情况与NFS或多个集群中的服务器都试图在同一时间创造相同的图像缓存文件?

有是一个非常好的机会,当缓存被刷新的内容更新,他们可以碰撞这样的,但我没有一个伟大的方式发展,以测试这种情况下,因为我只在一个盒子工作。

任何具有这方面的经验?

有帮助吗?

解决方案

这要看你如何打开该文件。如果你在“追加”方式打开该文件,那么在您创建一个新的行字符的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)

在难得的机会的两个“写”命令在完全相同的时间(下降到纳秒精度)到达则操作系统实际上创建中断状态。这取决于它如何处理这个操作系统,但大多数人会仅仅产生两个随机数来决定谁先走。

如果您打开“写”模式下的文件(比如你想将内容添加到中间的),那么你确实有锁定文件做到这一点。第二个PHP脚本将抛出一个错误,指出它无法打开该文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top