在任何系统中添加缓存,导致包含多个客户端缓存,都会引入一个巨大且有趣的挑战,我们称之为缓存一致性问题(cache consistency problem)

在客户端缓冲写入,可能导致其他客户端获得文件的陈旧版本,这也许不是期望的结果。实际上,想象一下你登录机器C2,更新F,然后登录C3,并尝试读取文件:只得到了旧版本

解决方法:

当应用程序写入文件并随后关闭文件时,客户端将所有更新(即缓存中的脏页面)刷新到服务器。

C2最终将它的写入发送给文件服务器,因此服务器具有最新版本(F[v2])。但是,C1的缓存中仍然是F[v1]。

解决方法:

具体来说,在打开文件时,客户端文件系统会发出GETATTR请求,以获取文件的属性,属性包含有关服务器上次修改文件的信息。

不过这会导致NFS服务器充斥着GETATTR请求,客户因此“轰炸”了服务器,不断询问。

评价:

加入关闭时刷新的行为是因为“有意义”,但带来了一定的性能问题。