网路档案系统


网路档案系统

文章插图
网路档案系统【网路档案系统】网路档案系统,英文Network File System(NFS) 。是由SUN公司研製的UNIX表示层协定(pressentation layer protocol),能使使用者访问网路上别处的档案就像在使用自己的计算机一样 。
基本介绍中文名:网路档案系统
外文名:Network File System
简称:NFS
拼音:wangluo wenjian xitong
性质:UNIX表示层协定
相关机制:远程过程调用RPC机制
定义NFS是基于UDP/IP协定的套用,其实现主要是採用远程过程调用RPC机制,RPC提供了一组与机器、作业系统以及低层传送协定无关的存取远程档案的操作 。RPC採用了XDR的支持 。XDR是一种与机器无关的数据描述编码的协定,他以独立与任意机器体系结构的格式对网上传送的数据进行编码和解码,支持在异构系统之间数据的传送 。特点① 提供透明档案访问以及档案传输;② 容易扩充新的资源或软体,不需要改变现有的工作环境;③ 高性能,可灵活配置 。演化网路档案系统(NFS)是档案系统之上的一个网路抽象,来允许远程客户端以与本地档案系统类似的方式,来通过网路进行访问 。虽然 NFS 不是第一个此类系统,但是它已经发展并演变成 UNIX系统中最强大最广泛使用的网路档案系统 。NFS 允许在多个用户之间共享公共档案系统,并提供数据集中的优势,来最小化所需的存储空间 。网路档案系统(NFS)从1984 年问世以来持续演变,并已成为分散式档案系统的基础 。当前,NFS(通过 pNFS 扩展)通过网路对分布的档案提供可扩展的访问 。探索分散式档案系背后的理念,特别是,最近 NFS 档案进展 。NFS 的简短历史第一个网路档案系统 — 称为 File Access Listener — 由 Digital Equipment Corporation(DEC)在 1976 年开发 。Data Access Protocol(DAP)的实施,这是 DECnet 协定集的一部分 。比如 TCP/IP,DEC 为其网路协定发布了协定规範,包括 DAP 。NFS 是第一个现代网路档案系统(构建于 IP 协定之上) 。在 20 世纪 80 年代,它首先作为实验档案系统,由 Sun Microsystems 在内部完成开发 。NFS 协定已归档为 Request for Comments(RFC)标準,并演化为大家熟知的 NFSv2 。作为一个标準,由于 NFS 与其他客户端和伺服器的互操作能力而发展快速 。标準持续地演化为 NFSv3,在 RFC 1813 中有定义 。这一新的协定比以前的版本具有更好的可扩展性,支持大档案(超过 2GB),异步写入,以及将 TCP 作为传输协定,为档案系统在更广泛的网路中使用铺平了道路 。在 2000 年,RFC 3010(由 RFC 3530 修订)将 NFS 带入企业设定 。Sun 引入了具有较高安全性,带有状态协定的 NFSv4(NFS 之前的版本都是无状态的) 。今天,NFS 是版本 4.1(由 RFC 5661 定义),它增加了对跨越分散式伺服器的并行访问的支持(称为 pNFS extension) 。令人惊讶的是,NFS 已经历了几乎 30 年的开发 。它代表了一个非常稳定的(及可移植)网路档案系统,它可扩展、高性能、并达到企业级质量 。由于网路速度的增加和延迟的降低,NFS 一直是通过网路提供档案系统服务具有吸引力的选择 。甚至在本地网路设定中,虚拟化驱动存储进入网路,来支持更多的移动虚拟机 。NFS 甚至支持最新的计算模型,来最佳化虚拟的基础设施 。NFS 架构NFS 允许计算的客户 — 伺服器模型(见图 2) 。伺服器实施已分享档案系统,以及客户端所连线的存储 。客户端实施用户接口来已分享档案系统,并载入到本地档案空间当中 。在 Linux中,虚拟档案系统交换(VFS)提供在一个主机上支持多个并发档案系统的方法(比如 CD-ROM 上的 International Organization for Standardization [ISO] 9660,以及本地硬碟上的 ext3fs) 。VFS 确定需求倾向于哪个存储,然后使用哪些档案系统来满足需求 。由于这一原因,NFS 是与其他档案系统类似的可插拔档案系统 。对于 NFS 来说,唯一的区别是输入/输出(I/O)需求无法在本地满足,而是需要跨越网路来完成 。一旦发现了为 NFS 指定的需求,VFS 会将其传递给核心中的 NFS 实例 。NFS 解释 I/O 请求并将其翻译为 NFS 程式(OPEN、ACCESS、CREATE、READ、CLOSE、REMOVE 等等) 。这些程式,归档在特定 NFS RFC 中,指定了 NFS 协定中的行为 。一旦从 I/O 请求中选择了程式,它会在远程程式调用(RPC)层中执行 。正如其名称所暗示的,RPC 提供了在系统间执行程式调用的方法 。它将封送 NFS 请求,并伴有参数,管理将它们传送到合适的远程对等级,然后管理并追蹤回响,提供给合适的请求者 。进一步来说,RPC 包括重要的互操作层,称为外部数据表示(XDR),它确保当涉及到数据类型时,所有 NFS 参与者使用相同的语言 。当给定架构执行请求时,数据类型表示可能不同于满足需求的目标主机上的数据类型 。XDR 负责将类型转换为公共表示(XDR),便于所有架构能够与已分享档案系统互操作 。XDR 指定类型位元组格式(比如 float)和类型的位元组排序(比如修复可变长数组) 。虽然 XDR 以其在 NFS 中的使用而闻名,当您在公共应用程式设定中处理多个架构时,它是一个有用的规範 。一旦 XDR 将数据转换为公共表示,需求就通过网路传输给出传输层协定 。早期 NFS 採用 Universal Datagram Protocol(UDP),但是,今天 TCP 因为其优越的可靠性而更加通用 。在伺服器端,NFS 以相似的风格运行 。需求到达网路协定栈,通过 RPC/XDR(将数据类型转换为伺服器架构) 然后到达 NFS 伺服器 。NFS 伺服器负责满足需求 。需求向上提交给 NFS 守护进程,它为需求标示出目标档案系统树,并且 VFS 再次用于在本地存储中获取档案系统 。整个流程在图 3 中有展示 。注意,伺服器中的本地档案系统是典型的 Linux 档案系统(比如 ext4fs) 。因此,NFS 不是传统意义上的档案系统,而是访问远程档案系统的协定 。对于高延迟网路,NFSv4 实现称为 compound procedure 的程式 。这一程式从本质上允许在单个请求中嵌入多个 RPC 调用,来最小化通过网路请求的 transfer tax 。它还为回响实现回调模式 。NFS 协定从客户端的角度来说,NFS 中的第一个操作称为 mount 。Mount 代表将远程档案系统载入到本地档案系统空间中 。该流程以对 mount(Linux 系统调用)的调用开始,它通过 VFS 路由到 NFS 组件 。确认了载入连线埠号之后(通过 get_port 请求对远程伺服器 RPC 调用),客户端执行 RPC mount 请求 。这一请求发生在客户端和负责 mount 协定(rpc.mountd)的特定守护进程之间 。这一守护进程基于伺服器当前导出档案系统来检查客户端请求;如果所请求的档案系统存在,并且客户端已经访问了,一个 RPC mount 回响为档案系统建立了档案句柄 。客户端这边存储具有本地载入点的远程载入信息,并建立执行 I/O 请求的能力 。这一协定表示一个潜在的安全问题;因此,NFSv4 用内部 RPC 调用替换这一辅助 mount 协定,来管理载入点 。要读取一个档案,档案必须首先被打开 。在 RPC 内没有 OPEN 程式;反之,客户端仅检查目录和档案是否存在于所载入的档案系统中 。客户端以对目录的 GETATTR RPC 请求开始,其结果是一个具有目录属性或者目录不存在指示的回响 。接下来,客户端发出 LOOKUP RPC 请求来查看所请求的档案是否存在 。如果是,会为所请求的档案发出 GETATTR RPC 请求,为档案返回属性 。基于以上成功的 GETATTRs 和 LOOKUPs,客户端创建档案句柄,为用户的未来需求而提供的 。利用在远程档案系统中指定的档案,客户端能够触发 READ RPC 请求 。READ 包含档案句柄、状态、偏移、和读取计数 。客户端採用状态来确定操作是否可执行(那就是,档案是否被锁定) 。偏移指出是否开始读取,而计数指出所读取位元组的数量 。伺服器可能返回或不返回所请求位元组的数量,但是会指出在 READ RPC 回覆中所返回(随着数据)位元组的数量 。NFS 中的创新NFS 的两个最新版本(4 和 4.1)对于 NFS 来说是最有趣和最重要的 。让我们来看一下 NFS 创新最重要的一些方面 。在 NFSv4 之前,存在一定数量的辅助协定用于载入、锁定、和档案管理中的其他元素 。NFSv4 将这一流程简化为一个协定,并将对 UDP 协定的支持作为传输协定移除 。NFSv4 还集成支持 UNⅨ 和基于 Windows? 的档案访问语义,将本地集成 NFS 扩展到其他作业系统中 。NFSv4.1 介绍针对更高扩展性和更高性能的并行 NFS(pNFS)的概念 。要支持更高的可扩展性,NFSv4.1 具有脚本,与集群化档案系统风格类似的拆分数据/元数据架构 。如 图 4 所展示的,pNFS 将生态系统拆分为三个部分:客户端、伺服器和存储 。您可看到存在两个路径:一个用于数据,另一个用于控制 。pNFS 将数据布局与数据本身拆分,允许双路径架构 。当客户想要访问档案时,伺服器以布局回响 。布局描述了档案到存储设备的映射 。当客户端具有布局时,它能够直接访问存储,而不必通过伺服器(这实现了更大的灵活性和更优的性能) 。当客户端完成档案操作时,它会提交数据(变更)和布局 。如果需要,伺服器能够请求从客户端返回布局 。pNFS 实施多个新协定操作来支持这一行为 。LayoutGet 和 LayoutReturn 分别从伺服器获取发布和布局,而 LayoutCommit 将来自客户端的数据提交到存储库,以便于其他用户使用 。伺服器採用 LayoutRecall 从客户端回调布局 。布局跨多个存储设备展开,来支持并行访问和更高的性能 。数据和元数据都存储在存储区域中 。客户端可能执行直接 I/O,给出布局的回执,而 NFSv4.1 伺服器处理元数据管理和存储 。虽然这一行为不一定是新的,pNFS 增加功能来支持对存储的多访问方法 。当前,pNFS 支持採用基于块的协定(光纤通道),基于对象的协定,和 NFS 本身(甚至以非 pNFS 形式) 。通过 2010 年 9 月发布的对 NFSv2 的请求,继续开展 NFS 工作 。其中以新的提升定位了虚拟环境中存储的变化 。例如,数据複製与在虚拟机环境中非常类似(很多作业系统读取/写入和快取相同的数据) 。由于这一原因,存储系统从整体上理解複製发生在哪里是很可取的 。这将在客户端保留快取空间,并在存储端保存容量 。NFSv4.2 建议用共享块来处理这一问题 。因为存储系统已经开始在后端集成处理功能,所以伺服器端複製被引入,当伺服器可以高效地在存储后端自己解决数据複製时,就能减轻内部存储网路的负荷 。其他创新出现了,包括针对 flash 存储的子档案快取,以及针对 I/O 的客户端提示 (潜在地採用 mapadvise 作为路径) 。NFS 的替代物虽然 NFS 是在 UNⅨ 和 Linux 系统中最流行的网路档案系统,但它当然不是唯一的选择 。在 Windows? 系统中,ServerMessage Block [SMB](也称为 CIFS)是最广泛使用的选项(如同 Linux 支持 SMB一样,Windows 也支持 NFS) 。最新的分散式档案系统之一,在 Linux 中也支持,是 Ceph 。Ceph 设计为容错的分散式档案系统,它具有 UNⅨ 兼容的 Portable Operating System Interface(POSⅨ) 。您可在 参考资料 中深入了解 Ceph 。其他例子包括 OpenAFS,是 Andrew 分散式档案系统的开源版(来自 Carnegie Mellon 和 IBM),GlusterFS,关注于可扩展存储的通用分散式档案系统,以及 Lustre,关注于集群计算的大规模并行分散式档案系统 。所有都是用于分散式存储的开源软体解决方案 。更进一步NFS 持续演变,并与 Linux 的演变类似(支持低端、嵌入式、和高端性能),NFS 为客户和企业实施可扩展存储解决方案 。关注 NFS 的未来可能会很有趣,但是根据历史和近期的情况看,它将会改变人们查看和使用档案存储的方法 。