本文分享自天翼云开发者社区《浅谈网络文件系统原理》,作者:谢**云
什么是网络文件系统?
网络文件系统(Network File System, NFS)实现了一种软件协议,能将远端的文件系统映射到本地,使用者访问网络上的文件就像在使用自己的计算机一样。远端是专属存储系统,通常称为NAS存储。比较出名的网络文件系统的实现包括Sun公司的NFS,微软的CIFS(Common Internet File System)等,网络文件系统的访问示意图如下:
图1 网络文件系统挂载示意图
网络文件系统协议实现了将远端的目录树映射到本机,成为本机目录树种的一颗子树。一个实现合格的网络文件系统,实现了文件操作接口的POSIX(Portable Operating System Interface X)语义,从而使用户操作操作网络文件系统像操作本地文件系统一样,用户不会感知到操作的文件或文件夹实际存储在远端。
网络文件系统的实现也分为,客户端和服务端两部分。其中,客户端实现与本地文件系统的实现类似,其主要差异是访问数据的时候,并不是访问本地磁盘设备,而是遵从一定的协议,通过网络访问F服务端。服务端负责处理客户端的访问请求,将对应的数据和元数据保存在磁盘上。
网络文件系统的关键技术:
(1)远程过程调用,RPC协议
网络文件系统客户端与服务端之间的交互是通过一定的网络协议如NFS协议实现的。网络协议是通过函数调用的方式定义,主要内容包括ID、参数和返回值等。为降低协议封装、解析的复杂性,通常会在文件提业务层与TCP/IP层之间封装一层交互实现,称之为RPC协议。RPC(Remote Procedure Call)是一种远程调用协议,它基于Socket,位于OSI模型中会话层,客户端可以调用远程服务器上的程序或方法,并获取返回结果。
具体的,在客户端调用RPC函数时,会调用RPC库的接口将该函数转化为网络消息转发到服务端,服务端的RPC库对网络包进行解析,调用服务端注册的函数集中的函数来实现功能,然后再将执行的结果返回给客户端。
图2 RPC协议架构示意图
(2)文件系统协议
网络文件系统本质上是一个基于C/S(客户端/服务端)架构的应用,其文件系统功能是通过客户端与服务端的交互来实现的。对于网络文件系统来说,其核心是之一是服务端与客户端的交互语言,文件系统协议。
网络文件系统的协议定义类似于函数调用,包含ID,参数和返回值。
NFS协议,是SUN公司设计的网络文件系统协议,默认是*unix系统之间提供服务。包含3个版本,即1984年的NFSv2、1995年的NFSv3和2000年的NFSv4。它所有的读写都是由内核负责,因此其IO性能比较高。
SMB是Server Message Block是微软公司设计的网络系统协议,默认在Windows系统之间提供服务。包括SMB1.0,SMB2.0,SMB3.0版本。
由此可见,无论哪种协议,都有一组与文件系统语义对应的协议命令。客户端对文件系统的操作,都会通过网络文件协议封装转发到服务端,实现对文件的操作。
网络文件系统的优势:
如上,对网络文件系统的访问需要通过网络,其时延比本地文件系统大,但网络文件系统也有其优势,适合在一些场景中应用:
1.适合做数据共享:网络文件系统可以挂载在多个客户端,从而实现在多个客户端之间的数据共享。
2.存储空间大:网络文件系统服务端往往使用具有大存储空间的存储设备实现,具备海量的存储空间,远远大于本地文件系统。
3.可靠性高:网络文件系统服务端作为专用的存储系统,以一定的技术手段,如多副本等方式实现了数据的高可靠。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。