我正在开发一个自动调整图像大小的 PHP webapp,我正在考虑将缓存的副本存储在 NFS 挂载的 NAS 上,这样我可以在更新图像时轻松刷新缓存。
我唯一担心的是,如果集群中的 2 个或更多服务器试图同时创建相同的图像缓存文件,NFS 通常会发生什么?
很有可能当缓存被刷新以进行内容更新时,它们可能会发生这样的冲突,但是我没有很好的方法来测试开发中的这种场景,因为我只在一个盒子上工作。
有这方面经验的人吗?
我正在开发一个自动调整图像大小的 PHP webapp,我正在考虑将缓存的副本存储在 NFS 挂载的 NAS 上,这样我可以在更新图像时轻松刷新缓存。
我唯一担心的是,如果集群中的 2 个或更多服务器试图同时创建相同的图像缓存文件,NFS 通常会发生什么?
很有可能当缓存被刷新以进行内容更新时,它们可能会发生这样的冲突,但是我没有很好的方法来测试开发中的这种场景,因为我只在一个盒子上工作。
有这方面经验的人吗?
这取决于您打开文件的方式。如果您以“追加”模式打开文件,那么 Unix/Linux 实际上会将内容写入缓存,直到您创建一个换行符,然后它将新行粘贴到文件末尾(覆盖“ end-of-file”字节模式)并写入一个新的“end-of-file”。在这种情况下,如果两个人同时尝试写入同一个文件,那么两条写入行都会通过,按照接收到的顺序一次附加一行。因此,您可以期待以下内容:
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 脚本会抛出一个错误,说它无法打开文件。