一个分布式系统本质上就是一段程序能够存储和访问远程文件就像访问本地文件类似,能够允许任何连上网络上的用户都可以访问。在后面的记录中,主要是对2大文件系统NFS和AFS做详细的介绍和分析。
1、文件系统在最初的设计时往往是按照中心结点服务的方式构建,在中心节点服务器中保持着大量的文件资源。
2、对于文件系统的分块有下面的分法:1、目录模块。2、文件模块。3、访问控制模块。4、文件访问模块。5、Block文件块模块。6、设备模块,主要指的是磁盘IO,和缓存。
3、文件系统的作用主要有:组织,存储,命名,共享和保护文件的作用。
4、一个文件包括数据和属性,而一个目录是一个特殊类型的文件,本身不包含数据,他提供了一个文本名字对于一组内部文件标识符的映射。
5、在一个文件系统中,为了对于里面所有的文件进行有效的管理,在系统的元数据中会保存额外的一些文件信息。
6、对于一个分布式文件系统,有许多的要求:1、透明度,包括访问透明,扩展性透明。2、并发更新的控制。3、文件副本的存放。4、硬件操作系统的异构性。5、容错性。6、数据一致性问题。7、安全。8、效率性能方面,
7、一个文件服务的结构一般包括一个客户端模块和一个服务端模块。
一个文件服务对于内部的组件构成进行了清晰的划分,包括3个组件1、纯文件的服务。2、目录服务。3、客户端模块。3个模块之间相互关联,其中文件服务和模块服务都是放在Server模块的。
1、在file Service中用UFID来标示每个独有的文件。
2、目录服务就提供一个name到一组UFID组的映射。
3、客户端模块只要通过和服务端定义好的一系列的接口的形式与服务端进行交互。
4、与文件对应的一系列定义的接口类似,对于目录服务也定义了一组接口。
5、在早起的模型中,对于文件的操作接口,每次都要在请求的时候额外传用户ID做认证检验,后来这种方式可以被kerberos认证所取代。
6、在文件系统中有文件组的概念,就是一堆文件的集合,文件组的标示采用了32位的IP的地址+16位的date时间加以区分,如果纯用IP地址是有问题的,因为文件组可以被移动到不同的机子上。
NFS中文叫做网络文件系统,计算机可以通过网络对于文件进行操作。
1、在NFS中,客户端和服务端模块是通过RPC的方式进行交互的。
2、在NFS中,为了实现访问的透明性,增加了VFS虚拟文件系统一层,在虚拟文件系统的下面,有对应的各个具体的文件系统的实现。
3、在NFS中,每个file的标识符用file Handles。
4、不同于传统的Unix文件系统,NFS文件系统是无状态的,他不保留客户端中打开的文件列表,在访问控制的检测时需要每次刷新请求,检测里面的用户标示。
5、NFS客户端中的本地文件挂载可以挂载在服务端文件系统的某个子树下,但是到时路径名字的转换得在客户端中进行转换,才能保证与服务端中的一致。
6、文件系统的挂载分为软挂载和硬挂载。
7、自动挂载技术。当客户端中存在一个空的挂载点时,服务端会发送消息,第一个回复的将会进行挂载操作。
8、服务端缓存策略,传统的Unix系统常用的办法就是主内存buffer空间,NFS服务端采取的策略是read ahead读优先和delayed-write延时写的策略,在客户端中则会维持着一系列客户端最近操作过的文件的结果,避免客户端的再次调用。
9、客户端的本地缓存的数据项,存在一定过期时间,超过一定时间会进行更新。NFS的性能通过在客户端缓存了文件块因而提升了许多。
AFS文件系统也是一个分布式文件系统。AFS最初的设计目标就是为了服务于大规模的用户和节点,他的高扩展性是器一大特点。他的其中非常有效的策略是在在客户端缓存了数百个用户最近用过的文件。
1、AFS中包括了2个重要组件,Venus和Vice,前者存在客户端,后者在Server中。文件服务在Vice中实现,目录在Venu中实现,AFS中的文件标识符采用96位的fid表示,类似于NFS的UFID。
2、AFS中缓存一致性的实现是基于call-base回调的方式。当服务端的文件发生update操作之后,他会发送请求给所有持有此文件副本的客户端,进行更新操作。
许多要求和性能已经在AFS和NFS中都得到了实现和改进,但是分布式文件系统的发展还是有很长的一段要走,比如在NFS中也可以实现类似于AFS的基于回调方式的更新操作。
参考文献:<