接着上一篇博客Distributed Systems 分布式系统来扯淡,之前的博客一再在写文件系统,这次继续,只不过是分布式文件系统。

1. 这篇文章讲什么

这篇文章介绍一种分布式文件系统,名字叫Network File Sytem(NFS),翻译过来就是网络文件系统。NFS是一种分布式文件系统,大概的样子是这样的:

这里多说一句,NFS可不是仅仅指图中那个server,它包含了图中的所有部件 ,client中也有NFS的组件。
在细一点看client与server之间的数据通信,是这样子的:

现在大概知道NFS的基本架构了吧。下面开始具体介绍了。

2. NFS的设计目标

每一种文件系统的设计都有它自己的考虑,NFS的主要考虑是简单而快速的故障恢复。这可能考虑到分布式系统因为机器多,故而故障是经常发生的。况且,这里面只有一个server,而server是系统的核心,这个server一旦出问题怎么办。

3. 核心设计思路

有了基本的设计,那就到了具体的设计环节了,如何达到目的呢?快速恢复要求“隔离”,也就是说系统各个部件之间尽量减少“共享信息”,因为有了共享信息,恢复起来也就复杂了。
Client和Server之间的发生的操作主要是读写,因为读写一般都不是一次性完成的,需要多次操作,那么有两种方式,一种是双方之间保存读取状态,也就是说server保存了每个client的读取状态记录,比如说读到文件的哪个位置了,这种方式称之为stateful;还有一种是 stateless,也就是说server跟client之间没有什么共享信息,server压根就不知道client读取到了文件的什么位置,每次client读取数据,都是自己提供完整的参数,server按照提供的参数进行操作、返回结果就好了。
那么基于设计目标来看的话,第一种方式不是一个好的选择,很大的一个缺点就是client或者server宕机了的话怎么处理,是不是还得同步一下状态,client的话还好说,server恢复过程中还额外需要恢复跟各个client之间的共享状态,简直复杂啊!!所以NFS选择第二种方式,用户操作指令提供server完成操作所需的所有信息,简单直白效率高。
事实上这是NFS的核心设计思路。

3. 具体系统设计

写了这么多,大概是吧NFS介绍完了,注意的是这个只是NFS的框架介绍,跟具体的实现可能有点区别,况且NFS不断更新。

4. 参考文献

  1. http://pages.cs.wisc.edu/~remzi/OSTEP/dist-nfs.pdf