我观察到 EFS 在检测文件是否被重新创建(即删除然后再次创建)时出现了非常大的延迟。
在这个简单的测试示例中,我有一个文件,该文件在大约 5 秒后被删除并重新创建。我有两个 EC2 实例挂载到同一个 EFS:
EC2-1:负责读取文件
EC2-2:负责删除和创建文件。
我看到的问题是,当 EC2-2 删除文件时,EC2-1 会正确更新以表明该文件不再存在。然后,EC2-2 会在大约 5 秒后重新创建该文件。EC2-1 不会检测到该文件已在 25 到 30 秒内返回。
现在,如果我在重新创建之后立即对 EC2-1 上的文件系统运行某种查询(如 LS 命令),它会立即更新以表明文件已创建。
需要说明的是,我通过运行 LS 直观地看到文件在创建后立即在 EC2-1 FS 上创建。它以编程方式读取失败。在我的测试用例中,我有一个 Node.js 脚本,它实际上每秒只调用一次 readFileSync()。我也在 Python 中测试了同样的脚本,得出结论这是一个 EFS 问题。
如果我在 EC2-2 上运行相同的脚本,则会看到预期结果,即文件丢失一秒钟,然后在重新创建后立即可用。因此,在执行删除和创建的实例上读取此文件,工作正常。
就好像 EFS 根本没有检测到文件删除/创建一样。
两个 EC2 VM 上的操作系统都是 Ubuntu Server 18.04。在“通用”和“高 I/O”类型的新 EFS 上进行了测试。
答案1
感谢@kofemann 向我指出了这个noac
选项,让我能够了解文件系统属性缓存,并找到下面很好地总结了这些选项的帖子。