00_CLASS_10_第1页
00_CLASS_10_第2页
00_CLASS_10_第3页
00_CLASS_10_第4页
00_CLASS_10_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章 分布式文件系统,分布式系统的关键部分:文件系统 文件服务和文件服务器 分布式文件系统设计 目录服务器 设计分布式文件系统的关键问题 系统结构 复制性 分布式文件系统发展趋势 分布式文件系统 - 示例:NFS体系结构,文件服务和文件服务器,文件服务:为客户所提供的内容的一种规范说明, 描述了可用的原语,使用参数以及执行的操作 文件服务确定了文件系统对客户的界面 文件服务器:运行于某些机器上的进程并帮助实现文件服务 良好的文件服务:用户不知道文件系统如何实现 系统会有多个文件服务器,提供不同的文件服务,10.1 分布式文件系统设计,两个不同的部件:文件服务和目录服务 文件服务:与单个文件上的操作相关,诸如读、写和添加 目录服务:与维护目录有关,在目录上加、删文件等等,文件服务的接口,什么是文件?有两种文件的逻辑结构 流式文件 文件是一个不加解释的字节序列 文件信息的意义与结构全部由应用程序来决定 操作系统对之无兴趣 记录式文件 文件可被组织成一串记录 可使用操作系统的调用读写某个记录 大多支持把文件视作字节序列的概念 而不是关键记录的序列,文件属性,不包括在文件内容中的 有关文件的若干条信息 常见的属性:所有者,文件大小,建立日期和访问许可 文件服务通常会提供一些对属性进行读写操作的原语,文件可否修改,文件被创建之后,是否可被修改 通常可以 “不可改变的(immutable)” 文件 仅有CREATE和READ文件操作 一个文件一旦创建,它就不能改变 易于支持文件缓存和复制 消除了由于文件改变而要更新所有副本所引起的问题,文件保护,存取能力表 每个用户持有一张称作存取能力表的票据 用于它访问的每一个对象 存取能力指定了哪种形式的访问是被允许的 存取控制表 一个文件对应一个隐式或显式的用户表 指明可能访问的用户及可能的访问形式,两种类型文件服务,文件的上载/下载模式 远程访问模式,文件上载/下载模式,只提供两种操作:读文件和写文件 读操作: 将整个文件从服务器送到申请的客户 写操作: 将整个文件从客户传递到服务器 在服务器和客户之间移动整个文件 文件可以按需要而保存在内存或本地磁盘上 只提供了物理存储和传输 优点:概念上的简洁性 没有复杂的文件服务接口 整体文件传送效率很高 缺点:客户端必须有足够的存储空间 只需文件一小部分,传整个文件浪费,(a) 上载/下载模式,(b) 远程访问模式,远程访问模式,文件服务提供: 打开和关闭文件、文件读和写、文件内的移动(LSEEK) 考察和修改文件属性等等操作 文件系统运行在服务器上,不是客户机上 优点:在客户机上无须太多的空间, 消除零碎空间中放入整个文件的问题,10. 2 目录服务器,提供创建和删除目录、对文件命名和改名 把文件从一个目录移向另一个目录 文件命名规则: 可以是从1到某个大的数字,字符或特殊字符 扩展名 文件名划分为两部分,通常用一个“.”分开 名字第二部分,称为文件扩展名,标识了文件的类型,目录和子目录,目录下包含子目录,可把相关文件放在一起 系统提供创建、删除、进入以及移动子目录 和从子目录中查找文件的功能 层次型文件系统: 子目录可再包含子目录从而形成树型目录 目录的链接: 某些系统中,能创建到任一目录的链接或指针 不仅构建树,而且构建任意目录图,功能更强,10.3 设计分布式文件系统关键问题,所有机器和进程 都应该对目录层次有相同的认识 应有一个全局性的 并为所有机器所确认的根目录,(a) 两个文件服务器。矩形是目录,而圆环是文件 (b) 所有客户机对某文件系统都有相同认识的系统 (c) 不同的客户机对某文件系统有不同认识的系统,名称解析透明性,定位透明性 服务器可以在网络中随意移动,其路径名也无需改动 文件在移动时无需改变其名称时,称为定位独立性 在路径名中嵌入了服务器名称显然不是定位独立的 定位透明性不易实现,名称解析三个处理方式:,机器路径解析,诸如/machine/path或 machine:path 把远程文件系统安装到本地文件层次中 对所有机器都视同一致的单一名称空间 前两项容易实现 后者较困难,需要仔细地设计,两级名称解析(1),二级命名法 对用户:文件(及其它对象)有符号名 对机器:有系统内部使用二进制名 要提供这两个名字解析间的一种映射 在一个有多个自含文件服务器的系统中 二进制名实质上就是一个本地的-结点数 通用名称解析方案: 二进制名指向服务器和里面的某个特定文件,两级名称解析(2),符号链 符号链是一个目录项,映射到一个(服务器,文件名)中的字符串上 通过字符串,可通过命名的服务器找到二进制名 符号链本身实际上就是路径名,两级名称解析(3),利用二进制名能力 查找一个ASCII码名字 包括物理的或逻辑的机器号 或适当的服务器网络地址 物理地址就可用来向服务器发消息 通过通过广播或者在名字服务器上查找 能够定位一个虚拟地址,文件共享的语义,多用户文件共享要严格定义读与写语义 UNIX语义学 当READ操作接着WRITE操作时 READ所返回的值正是刚写入的 类似地,当两个WRITE操作连续出现后跟一个READ操作 读的值是最后一次写的值 系统按绝对的时间序列执行所有操作 且总是返回最后一次操作的值,单一服务器文件系统,单一服务器文件系统性能,通常很差 改进:允许客户机在其私有空间中维护文件本地副本 客户在本地修改缓存区文件 接着另一个客户从服务器读取该文件 第二个客户会得到一个陈旧的文件 解决方法:向服务器播送对缓存区文件的全部修改 概念尽管简单,但处理是低效率的,(a) 单处理器上,当READ跟随WRITE,返回值是刚才写入的值 (b)有缓存区的分布式系统中,可能被返回的是陈旧值,替代解法:会话语义(session semantics),放松文件共享的语义学要求 新的规则:“对打开文件的修改,仅对修改该文件的进程是初始可见的” 重新定义了正确的操作的实际行为 当关闭文件时,它送一个副本给服务器 所以后续的READ得到了所需要的新值,会话语义的问题,更多的客户同时在同一个缓存区上修改会怎样? 一种解决方法: 当每个文件依次关闭时,其值回送给服务器 最后的结果取决于谁最后关闭,不可更改文件: 操作只有CREATE与READ 虽然文件不能更新,但可以更新目录 问题就不存在了 共享文件的第四个方法 - 原子事务: 确保在事务中的所有调用都会按序执行 不会被任何其它的、并发的事务所干扰,文件的实际使用模式,10.4 系统结构,“客户机和服务器有差别吗?” 在一些系统中(比如:NFS) 客户机和服务器之间没有差别 另一个极端 客户机和服务器在软硬件上是完全不同的 服务器甚至可以运行不同的操作系统,怎样构造文件和目录服务,一种方法:两种服务组织到单独的服务器里 用户送一个符号名给目录服务器 目录服务器返回服务器可以识别的二进制文件名,a,b,c,文件,客户机,查找a/b/c,查找b/c,查找c,回应c,目录在 服务器1,目录在 服务器2,目录在 服务器3,a,b,c,文件,客户机,查找b/c,查找c,回应c,查找a/b/c,层次化目录,层次化目录有可能分段处在多个服务器上 经常地寻找路径名,特别是多重目录服务器 费用会很昂贵 采用提示快捷栈 保存最近查找的名字以及查找的结果 另一种方法:把它们分隔开 拥有两个服务器将需要更多的通讯,客户机的状态,一派认为服务器应是无状态(stateless)的 当客户机向服务器发出请求,服务器执行了这个请求,发送回答信息,在请求之间,没有保留客户机状态信息 每个请求必须自我包含信息,包含全文件名及文件内的偏移量,以允许服务器完成工作 信息增加了消息的长度 另一派认为保留客户机请求间的状态信息是完全有必要的,服务器状态,缓存区处理(Caching),四个地方存放文件: 服务器硬盘 服务器主存 客户机硬盘(若存在的话) 客户机主存,3,4,2,1,网络,客户机主内存,客户机磁盘(可选),服务器主内存,服务器磁盘,可存放文件的四个地方,服务器硬盘: 所有文件在服务器的硬盘上 文件可被所有客户机所访问 一个文件只有一套拷贝,不存在一致性问题 服务器主存: 在服务器主存上缓存最近使用过的文件 可使性能获得高的提升 主存一般都比磁盘小 需要算法决定文件的哪部分留在缓存区,客户机的主存: 运用缓存区的不同方式 (a)无缓存区 (b)在每一进程中设缓存区 (c)在内核中设缓存区 (d)视作用户进程的缓存区管理器 方案b最简单:把缓存文件直接放在用户进程自有地址空间中 大多数进程只读一个文件一项 所以在库中设缓存区并没有多大的价值,方案c:客户机缓存区是内核 缺点,需要内核的调用 这种缓存区比在进程中设缓存区效果为好 方案d:缓存区在不同的用户缓存区管理器中 优点:内核同文件系统代码无关 容易编程,因为它它完全隔离 且更具灵活性,缓存区一致性,客户机把不一致性引入了系统,不可改变的文件,具有吸引力,有在机器上进行缓存处理的能力 不用担心机器会有改变它的可能性,10.5 复制性(replication),分布式系统常常提供文件复制服务给客户 主要原因: 可靠性:每一文件各自独立的副本增强可靠性 有效性:即使服务器关闭时,也允许访问文件 性能: 所有文件在一台服务器会造成性能瓶颈 多服务器上复制文件,最轻载的将被使用,C,S1,S2,S3,1,2,3,S1,S2,C,S3,S1,S2,C,S3,客户机,服务器,当前,稍后,稍后,(a),(b),(c),(a) 显式文件复制 (b) 空闲复制 (c) 使用组的文件复制,三种复制,复制关键问题是透明度问题 三种复制:显式文件复制;空闲复制;组通讯 显式文件复制 程序员控制整个复制进程 进程在某服务器上创建个文件 如果需要的话,可以在其他服务器上备份多份 如果目录服务器允许文件的多份拷贝同时存在 那么备份的网上地址都与文件名相关 只要给出文件名,所有的备份都能被找到,空闲复制(Lazy replication) 每个文件只在一服务器中建立 在服务器空闲时自动复制到另外的服务器中 复制过程对用户透明 在后台复制文件时,注意原文件是否已被修改过 组通讯方式 全部“写”调用同时发往所有服务器 后备文件与原件同时产生,空闲复制与组通讯方式的两个区别: 在空闲复制方式中只须一个服务器地址,而不是一个组 空闲复制空闲时在后台进行 而组通讯方式中,所有文件同时产生,如何更新,原本复制(primary copy replication) 一台服务器被指定为主机,其它的当作辅机 已复制文件需要更新时,首先告诉主机,把主机文件修改 然后主机命令辅机,要求它们修改 缺点:一旦被指定主机不能工作,对文件的修改不能进行 复制更可靠的方法:“投票表决法(voting)” 基本思想:无论读或写已复制文件时,用户应向多台服务器提出请求并获得同意,“幽灵表决法(voting with ghost)”,在多数的应用中,读比写要更为多 一般N r 很小,而N W几乎和N一样 一些服务器崩溃,法定写票权就不可能得到 一台服务器崩溃就建立一个没有存储器的哑服务器 幽灵不允许有读票权(它根本没有任何文件) 但可以参与写票权,它只是把写入的文件扔掉 存在至少一台真实的服务器时,写操作才会成功,分布式文件系统上的经验,10.6 分布式文件系统发展趋势(1),新的硬件 存储器便宜 文件系统可以永久地常驻内存 性能上的较大改进,极大的简化文件系统约结构 对文件系统可能会产生影响的技术是光盘 快速光纤网络 少量的,设计良好的硬件就可以解决用软件难于克服的困难 很有可能,未来的分布式系统会得到各种专门化硬件的支持,分布式文件系统发展趋势(2),可伸缩性 广域网 在未来各大洲的透明的分布式操作系统 什么样的文件系统将为全世界呢?现在,没有人能知道 现在的部分解是Internet 分布式系统必须处理庞杂机种的情况 - 异构网 电子邮件、电子银行、电子娱乐活动等 将改变文件应用、访问模式以及许多我们尚不知晓使用方式,分布式文件系统发展趋势(3),移动用户 发展最迅速的一个领域 设计全球的、全透明的分布式文件系统 供成百万移动的并且经常断开连接的用户使用,分布式文件系统发展趋势(4),容错 系统将在数据不完全情况下,仍可运行 随着计算机普及到非专业人群中 系统会瘫痪,难以被接受,10.7分布式文件 - 示例:NFS体系结构,基本的思想:让任意多的客户与服务器共享同一个文件系统 客户与服务器在同一个局域网上(多数情况)或在广域网上 假定:客户与服务器运行在不同的机器上,(NFS允许一台机器可以同时既是客户又是服务器),NFS体系结构,每台NFS服务器:将自己的一个或多个目录共享,以便让远程的客户能访问。 一个目录被共享时,其所有子目录就被共享 /etc/exports文件列出了一台服务器上要被共享的目录。当服务器启动时,这些目录就自动被共享,NFS体系结构,客户通过mount共享目录来访问它们。当客户mount一个远程目录时,该目录就成为本地目录树中的一部分。许多Sun工作站是无盘站。一台无盘站可以将一个远程的目录mount成它的根目录,它的整个文件系统就完全由远程的服务器来支持。而有本地硬盘的工作站则可以将远程的目录mount到本地目录树中,形成一个部分是本地、部分是远程的文件系统。对于在客户机上运行的程序来说,文件是在本地还是在远程服务器上是没有关系的。,NFS体系结构,NFS基本的体系结构:服务器将自己的目录共享,客户机mount它们 当两个或多个客户mount同一个目录时,它们就能通过共享文件进行通讯。某个客户机的程序创建一个文件后,另一个客户机上的程序就可以读该文件。共享文件就象通常的文件一样被使用,这种简单性是NFS具有吸引力的一个重要方面,NFS协议,NFS的一个目标就是支持异构系统,客户与服务器能运行在不同的操作系统和不同的硬件上,这样就需要在客户与服务器之间定义一个清晰的接口 NFS定义了两个客户服务器协议,NFS协议,协议是由客户发往服务器的请求、以及服务器返回给客户的响应组成的集合。服务器只需要能辨别和处理协议中定义的请求,它无需了解有关客户的更多信息。同样地,客户也可以将服务器当成一个接受并处理一定请求的黑盒子,NFS协议,第一条NFS协议是关于mount的。客户将一个路径名发给服务器,请求将该路径所说明的目录mount到客户的目录树中。消息中不需要包含目录将被mount的位置,因为服务器不需要关心这点。如果路径合法,并且该目录在共享目录集中,服务器就将返回一个文件指针给客户。这个指针唯一地确定了文件系统的类型、硬盘、该目录对应的I节点号(索引节点号),以及安全信息。随后对该目录的读写操作就可以通过该文件指针来进行。,NFS协议,有许多客户端可以静态mount某些远程目录。一般这些客户端都有了一个名叫/etc/rc的文件。该文件是一个包含了mount命令的shell脚本。当客户机启动时,这个shell脚本会自动执行,NFS协议,另一种情况是Sun版本的Unix支持的自动mount。它将本地的一个目录与一群远程的目录联系起来,在客户机启动时远程目录并没有被mount到客户机上,而是等到远程文件被首次打开时,操作系统才向每个指定的服务器发送一条消息,然后选择第一条响应的服务器,mount相应的目录。,NFS协议,自动mount相对于使用/etc/rc文件的静态mount有两个好处: 第一,在客户机启动时,如果/etc/rc文件中指明的某个NFS服务器没有启动,则客户机就启动不了,或者至少也要经过一定的延时,并显示出错信息。如果用户当时并不需要用到NFS服务器,那么所有这些工作都是浪费的。,NFS协议,第二,自动mount允许客户机并行地与多个NFS服务器联系,这样达到了一定程度的容错性,只要有一台NFS服务器启动就够了,而且响应速度也得到一定的改善(通过选择最先到的响应)。,NFS协议,自动mount假定:与某个目录相关连的所有远程目录是等效的。 因为NFS没有提供对文件和目录复制的自动支持,必须由用户自己来保证文件系统的一致性。因此自动mount大部分情况下针对的是只读文件系统,NFS协议,第二条NFS协议是关于目录和文件访问的。客户可以发送消息给服务器,以操作目录,或读写文件。另外,它们也可以访问到文件的属性,诸如文件的模式、大小、和最后一次修改的时间。 NFS支持大部分UNIX有关文件的系统调用,但OPEN和CLOSE例外。,NFS协议,因为在读写文件之前无需打开文件,读写完后也不需要关闭文件。 客户如果要读一个文件,它向服务器发送一条包含文件名字的消息,请求服务器查看该文件,并返回对应的文件指针。查看文件与打开文件不同,查看操作并不将信息拷贝到系统内部表中。,NFS协议,READ系统调用包含了文件指针、读的偏移地址和读取的字节数。采用这种方式的好处是服务器不需要记住任何打开的文件。当服务器崩溃再恢复时,没有丢失任何有关打开文件的信息,因为本来就没有这样的信息。这样一种不包含有关打开文件状态信息的服务器被称为是无状态的。,NFS协议,相反,在UNIX系统V中,使用了远程文件系统RFS。它要求读写文件之前必须先打开文件。服务器记录所有被打开文件的信息,如当前读写头的位置,这样不需要每条请求都带上偏移地址。这种方式的缺点是一旦服务器崩溃再重启时,所有打开了文件的连接都丢失了,客户程序将随之失败。NFS则不存在这个问题。,NFS协议,然而,NFS难以达到和UNIX完全一致的语义。 例如,在UNIX中,一个文件可以被打开,并且被锁住,这样其它进程就不能再访问它。当文件关闭时,锁也同时被解开。 而在NFS这样无状态的服务器中,锁是不能与打开的文件联系起来的,因为服务器不知道哪些文件被打开了。NFS需要另外一种机制来实现锁的功能。,NFS协议,NFS使用UNIX的保护机制,对所有者、同组人员和其他用户分别有rwx位来记录他们的权力。早期的NFS中,每个请求只是简单地包含调用者的用户标识和组标识,服务器用它们来进行权限检查。但实际上,这是基于所有客户都是可信的这一假设。,NFS协议,目前公开密钥机制可以用于客户与服务器之间的相互认证。当使用这个选项时,一个恶意的客户就无法伪装成另一个客户,因为它不知道后者的私有密钥。不过,现在密码只用作认证,数据本身还是没有加密的。,NFS的实现,客户与服务器的实现与NFS协议之间是独立的,它包含三层。 顶层是系统调用层。它负责处理象OPEN、READ、CLOSE这样的系统调用。在分析完调用和所带的参数后,它进激发第二层,虚拟文件系统层(VFS)。,NFS的实现,VFS层的任务是维护一个打开文件表,类似于UNIX中的打开文件的I节点表。在UNIX中,一个I节点用一个(设备、I节点号)对唯一标识。VFS中打开文件表的表项称为V节点(虚拟I节点),每个打开的文件都对应有一个V节点。V节点用于指明文件是本地的还是远程的。对于远程的文件,还记录了足够的信息以便访问它们。,NFS的实现,例子:一个调用MOUNT、OPEN、和READ的序列。要mount一个远程文件系统时,系统管理员调用mount程序,指明远程的目录名,将要mount到的本地目录位置,以及其他信息。Mount程序分析远程目录的名字,从中提取它所在的机器名,然后与该机器联系。如果该目录存在,并且可以被远程mount,服务器就返回该目录的文件指针。最后mount程序调用mount系统调用,将文件指针传给内核。,NFS的实现,接着内核为远程目录建立一个V节点,并让NFS客户代码在它内部创建一个R节点(远程I节点)存放这个文件指针。V节点指向R节点。这样VFS层中的每个V节点要么存放了指向NFS客户代码中R节点的指针,要么存放了指向本地操作系统中I节点的指针。从该V节点可知一个文件或目录是本地的或是远程的。如果是远程的,它能知道该文件的文件指针。,NFS的分层结构,NFS的实现,当一个远程文件被打开时,内核先分析该文件的文件名,得到它所在的远程文件系统所被mount到的本地目录名。它看到该目录是远程目录,并且通过V节点表找到该目录所对应的 R节点的指针。它接着就让NFS客户代码去打开这个远程文件。NFS客户代码请求相应的服务器查看该文件,并返回该文件的指针。客户代码接着在自己的内部表中为该远程文件添加一个R节点,并将结果返回给VFS层。VFS层在V节点表中为该远程文件构造一个V节点,存放指向R节点的指针。这里,我们又看到每个打开的文件或目录都有一个V节点,它指向一个R节点或一个I节点。,NFS的实现,调用者能得到远程文件的文件描述符。这个描述符通过在VFS层的V节点表映射到相应的V节点。请注意,在服务器端是不存在对客户打开文件的记录。尽管当接到请求时,服务器需要提供文件指针,但它不保存哪些文件被客户打开(在客户端有它的文件指针)。当一个文件指针发给服务器用于访问文件时,服务器只是检查该指针是否有效,有效的话,就使用它去访问文件。如果要求安全检查时, 服务器会确认在RPC头中的认证密钥是否有效。,NFS的实现,当文件描述符用于随后的系统调用时,例如READ调用,VFS层将找到相应的V节点,由此判定它是在本地还是在远程,是用I节点还是用R节点描述。,NFS的实现,提高性能的技术(1) 客户与服务器之间传输的是大粒度的数据,通常是8192个字节。 客户端的VFS层得到8K数据后,它会自动请求读下一个8K数据块,这样,当它需要该数据块时,数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论