0

我目前在我的分布式应用程序中遇到了一些奇怪的问题。这个应用程序通常会做以下事情:

  • 从 NFSv3 文件系统读取和写入数据
  • 从 tmpfs 文件系统读取和写入数据
  • 一个进程在 tmpfs 上生成文件并使用另一个进程(或另一个最终是 pthread 的 java 线程)访问它们
  • 一个进程在 NFSv3 上生成文件并使用另一个进程(或另一个最终是 pthread 的 java 线程)访问它们
  • 将数据写入 NFSv3 并从另一台机器读取相同的数据

我们发现 NFSv3 存在许多延迟问题,但这些问题是众所周知的:如果您在 NFS 上写入文件,而不是尝试从另一台机器读取,则在另一台机器上执行 stat 系统调用时,可能需要长达 90 秒才能可用。

所以我们实现了一些重试代码来解决这个问题。

最近我们在 tmpfs 上也发现了类似的行为,但由于它在 ram 中,我认为在写入结束时,同一台机器与在写入结束时执行的另一个线程应该看到该文件,但我们得到了一个错误。

所以我们决定再次实现另一个重试块

问题是:当代码停止写入文件时,tmpfs 是事务性的吗?

更一般地说,如何在不同的文件系统上应用这个概念?

谢谢马可

4

0 回答 0