第5章分布式文件系统分布式文件系统设计分布式文件系统的实现分布式文件系统的发展趋势分布式文件系统文件服务与文件服务器文件服务文件系统提供给客户内容的详细说明。它描述了可用的原语、原语所需要的参数和执行的动作。文件服务说明了文件系统对客户的接口。文件服务器文件服务器是运行在某台机器上的一个有助于实现文件服务的进程。一个系统可以有一个或多个文件服务器,每台文件服务器提供不同的功能。5.1分布式文件系统设计5.1.1文件服务器接口文件:在许多系统中,如UNIX和MS-DOS,文件是一个未经解释的字节序列。文件中的信息的含义和结构完全取决于应用程序。文件的属性:是关于文件的一部分信息。典型的属性有所有者、大小、创建日期和访问权限。文件创建后能否修改?通常是可以的。不可变的文件:一旦文件创建,不能改变它。使得支持文件高速缓存和复制变得容易。分布式系统的保护权能存取控制表5.1分布式文件系统设计5.1.1文件服务器接口文件服务分类上载/下载模式文件服务只提供两种主要的操作:读文件和写文件。读文件将整个文件从一个文件服务器传送到提出请求的客户。写操作将整个文件从客户传送到服务器。客户机服务器1.文件移动到客户端2.在客户端进行访问3.当客户端工作完毕后,文件又移回服务器老文件新文件5.1分布式文件系统设计5.1.1文件服务器接口文件服务分类上载/下载模式优点:概念简单。使用这种模式不需要掌握复杂的文件接口。整个文件的传送是高效的。缺点:客户端必须具有足够大的存储空间来存储所需的所有文件。如果只需要文件的一小部分,移动整个文件是很浪费的。5.1分布式文件系统设计5.1.1文件服务器接口文件服务分类远程访问模式文件服务提供了大量的操作用于打开和关闭文件,读写文件的一部分,在文件中来回移动,检查和改变文件属性等。客户机服务器客户请求访问远程服务器上的文件文件保存在服务器上优点:在客户端不需要很大的空间,当仅需要文件的一小部分时,需要传送整个文件。5.1分布式文件系统设计5.1.2目录服务器接口目录服务提供诸如创建和删除目录,命名和重命名文件以及将文件从一个目录移动到另一个目录等操作。文件扩展名:prog.cman.txt分布式系统允许目录包含子目录,形成一棵目录树。通常称为分层文件系统。ABCDE一棵有5个目录的树在树型层次结构中,仅当目录为空时,才能删除指向该目录的连接5.1分布式文件系统设计5.1.2目录服务器接口目录服务对任意目录建立连接或指针。使得可以将目录组织成更强有力的任意目录图。ABCDE在两台机器中的目录图01211计算指向这个目录的目录数量机器1机器2在目录图中,一个目录只要存在至少另一条链接时就可以删除指向该目录的链接5.1分布式文件系统设计5.1.2目录服务器接口孤立目录删除A到B的连接。结果从文件系统(A)的根已不能到达B。B、D、E三个目录以及它们的所有文件实际上是孤立了。ABCDE01111计算指向这个目录的目录数量机器1机器2分布式系统中的孤立目录问题5.1分布式文件系统设计5.1.2目录服务器接口问题1:在设计分布式系统时,是否全部机器(和进程)都应该具有完全相同的分层目录结构视图?ABCDEF文件服务器1文件服务器25.1分布式文件系统设计5.1.2目录服务器接口问题1:所有客户(和其他机器)具有相同的分布式文件系统视图的情况:即如果路径/D/E/x在一台机器上有效,则在所有机器上都有效。ABCDEFRootABCDEFRoot客户1客户25.1分布式文件系统设计5.1.2目录服务器接口问题1:不同的机器可能具有不同的文件系统视图。路径/D/E/x在客户1可能是有效的,而在客户2上可能是无效的。ABCDEFRoot客户1ABCDEFRoot客户25.1分布式文件系统设计5.1.2目录服务器接口问题2:是否存在一个全局根目录,所有的机器都认为其为根。设置全局根目录的方法是使这个根只包含每个服务器的一个入口。路径的形式为:/服务器/路径5.1分布式文件系统设计5.1.2目录服务器接口命名透明性位置透明性:指路径名并不能对文件(或其他对象)存储位置给出任何提示。如路径/server1/dir1/dir2/x说明x位于服务器1上,但是并没有说明服务器1的位置。服务器在网络中可以自由的移动而无需改变路径名。如果文件x非常大而且服务器1上的空间又很紧张。需要将文件x移动到服务器2上。系统不能够自动的移动。/server1/dir1/dir2/x/server2/dir1/dir2/x?5.1分布式文件系统设计5.1.2目录服务器接口命名透明性位置独立性:在一个系统中文件能够移动而无需改变其文件名,这样的系统称之为具有位置独立性。一个明确将机器或服务器名嵌入路径名的分布式系统不是位置独立的系统。机器+路径名如/machine/path或machine:path安装远程文件系统到本地文件分层结构一个在所有机器上看上去都一样的单个名字空间分布式系统中用于文件和目录命名有以下三种方法:5.1分布式文件系统设计5.1.2目录服务器接口两级命名符号名和二进制名:文件(和其他对象)具有符号名,供用户使用,还可以具有内部的二进制名供系统使用。目录的作用是提供这两个命名层次之间的一个变换(映射)5.1分布式文件系统设计5.1.3文件共享的语义UNIX语义在READ操作紧跟在WRITE操作后执行时,READ操作返回刚刚写入的值。当一个READ操作跟在两个紧相连发生的WRITE操作后,读入的值是后一个写操作写入的值。ababcAB单处理器1.写“c”2.读出“abc”初始文件5.1分布式文件系统设计5.1.3文件共享的语义分布式系统存在的问题:分布式系统中允许客户在它们自己的高速缓存中保留经常使用的文件的局部拷贝。ababcA2.写“c”ababB1.读“ab”3.读出“ab”客户2客户1文件服务器读出了一个过时的值5.1分布式文件系统设计5.1.3文件共享的语义解决办法——对话语义立即将高速缓存文件的所有修改回写到服务器上。简单、效率低。规则:对一个打开文件的修改仅对修改该文件的进程是初始可见的,仅当文件关闭时,其修改才对其他进程可见。(对话语义)当两个或多个客户同时进行高速缓存和修改同一文件,若各个文件连续关闭,将它们的值送到服务器上,最后的结果取决于哪个文件最后关闭。5.1分布式文件系统设计5.1.3文件共享的语义不可更改文件对文件不能进行更改,只是简单的共享和复制。文件不能被更新,但是目录可以更新。事务为了存取一个文件或一组文件,进程首先执行某种类型的开始事务处理原语,以指示跟在其后的操作是不可分的。然后通过系统调用来读写一个或多个文件工作完成后,执行结束事务处理原语。关键特性:保证了包含于事务处理中的所有调用都将按顺序完成,不能有其他任何同时存在的事务处理的干扰。5.1分布式文件系统设计5.1.3文件共享的语义四种处理共享文件方法比较方法说明UNIX语义对一个文件的任何操作对所有进程都是及时可见的会话语义在文件关闭之前,对文件的修改对其他进程是不可见的不可更改语义不能进行更改,只是简单的共享和复制事务所有的更改要么都完成,要么都不能完成5.2分布式文件系统的实现5.2.2文件系统结构客户与服务器不同吗?客户和服务器没有差别。所有的机器执行基本相同的软件,任何机器都可以自由的为公众提供文件服务。文件服务器和目录服务器仅是用户程序。可根据需要配置一个系统以便在同一机器上或者不同机器上执行客户和服务器软件。系统根据硬件或软件将客户和服务器分配在完全不同的机器上。5.2分布式文件系统的实现5.2.2文件系统结构文件和目录服务如何构造?将两者合并成一个服务器来处理所有的目录和文件自身的调用。保持独立。打开一个文件需要进入目录服务器,以便将它们的符号名变换成二进制名。然后用二进制名进入文件服务器对文件进行读写。5.2分布式文件系统的实现5.2.2文件系统结构文件和目录服务器独立的情况目录分层在多个服务器之间分配的情况abc服务器1上的目录服务器2上的目录服务器3上的目录文件客户查找a/b/c查找b/c查找c带着c的响应迭代查找a/b/c5.2分布式文件系统的实现5.2.2文件系统结构文件和目录服务器独立的情况目录分层在多个服务器之间分配的情况abc文件客户查找a/b/c查找b/c查找c带着c的响应自动查找a/b/c5.2分布式文件系统的实现5.2.2文件系统结构频繁查找路径名,代价昂贵,采用高速缓存提示改善性能当一个文件打开时,先检查高速缓存中是否有该路径名,如果有,就不必逐个目录去查找,从高速缓存中直接读取其二进制地址。如果没有再进行查找。为使用名字高速缓存,基本的做法是:当无意中使用一个已过时的文件时,设法通知客户,以便它能通过逐一查找目录的方式找到文件并更新高速缓存。5.2分布式文件系统的实现5.2.2文件系统结构有状态服务器与无状态服务器无状态服务器:当客户发送一个请求到给服务器,服务器完成请求,发送一个应答,然后从内部表中移出关于该请求的所有信息。在请求之间,服务器不保存具体客户的信息。有状态服务器:服务器保存两个请求之间的客户的状态信息。无状态服务器的优点有状态服务器的优点容错请求消息比较短不需要OPEN/CLOSE调用更好的性能没有服务器表空间的浪费可以预读没有打开文件数目的限制易于幂等性客户崩溃时不会造成服务器错误可以对文件加锁5.2分布式文件系统的实现5.2.3高速缓存在一个各自有主存和磁盘的客户-服务器系统中,有四个存储文件或部分文件的地方:3421网络服务器磁盘服务器主存客户磁盘客户主存5.2分布式文件系统的实现5.2.3高速缓存存储在服务器磁盘上服务器磁盘上有充足的空间,存放在那里的所有文件对客户都是可访问的。由于文件只有一个拷贝,不会产生一致性问题。运行效率低。在客户读一个文件之前,文件必须从服务器磁盘传送到服务器主存中,然后再通过网络传送到客户的主存中。5.2分布式文件系统的实现5.2.3高速缓存服务器高速缓存将最近使用的文件保留在服务器的主存中。客户读取一个刚好在服务器主存中的文件,可以消除磁盘传送,但网络传送仍然存在。需解决的问题:1.什么是高速缓存管理单元?2.当高速缓存填满,置换算法。在服务器主存中设置高速缓存:容易、对客户是完全透明的。由于服务器可以保证其主存和磁盘拷贝同步。从客户的观点看,每个文件只有一个拷贝,不会产生一致性问题。5.2分布式文件系统的实现5.2.3高速缓存客户端高速缓存在客户主存中设置高速缓存,有三种可使用的选择来精确定义高速缓存的位置。1.在每个用户进程自己的地址空间直接进行文件高速缓存高速缓存由系统调用库管理。当打开、关闭、读和写文件时,该库只是保存最常用的文件当进程退出时,所有被修改过的文件都写回到服务器中内核进程本身的内部cacheCahce命中Cahce未命中服务器5.2分布式文件系统的实现5.2.3高速缓存客户端高速缓存2.在内核中设置高速缓存缺点是在所有情况下都需要内核调用,甚至对于高速缓存命中。内核Cahce命中Cahce未命中服务器5.2分布式文件系统的实现5.2.3高速缓存客户端高速缓存3.高速缓存管理作为一个用户进程用户级高速缓存管理者的优点是它保持了内核独立于文件系统编码。易于编程,更加灵活。Cahce命中Cahce未命中Cache管理进程用户进程服务器5.2分布式文件系统的实现5.2.3高速缓存高速缓存一致性直接写算法(WRITE-THROUG算法)当修改一个高速缓存项(文件或块)时,新的值保存在高速缓存中,并立即写到服务器。问题1:假设在机器A上的一个客户进程读文件f。客户结束但机器在其高速缓存中保存f。随后,机器B上的一个客户读同一个文件,修改它,并将它写到服务器上。最后,机器A上的一个新的客户进程开始启动。它从该机器的高速缓存中打开并读入f。(过期值)解决