架构解密从分布式到微服务:经典的网络文件系统NFS
作者:互联网
经典的网络文件系统NFS
分布式文件系统是分布式系统领域发展最早、应用领域众多、不断推陈出新的基础设施之一。前面提到的NFS就是个古老并且生命力顽强的分布式文件系统,它于1984年诞生在Sun的实验室里(比HTTP还古老),因为基于TCP/IP 设计,所以成为第1个现代化的网络文件系统。时至今日,NFS已经演变成UNIX系统中强大且使用广泛的网络文件系统,并且成功进入虚拟化领域,成为虚拟化基础设施中的重要组成部分。除了虚机,当前流行的Docker容器也支持远程的NFS Volume。
如下图所示,以NFS为代表的网络文件系统的核心思想,是将某个远程 Server 上的指定文件目录映射(Mount)到本机文件系统的某个目录上,使得从客户端看来,访问远程文件与本地文件没有什么区别,并且所有针对本地文件的IO读写的程序不用修改任何代码,就可以直接用于远程文件的读写。因为对最终用户及程序开发者透明,所以NFS有扎实的群众基础,并因此而“长寿”。
那么,NFS是如何实现与Linux本地文件系统无缝对接的呢?这要从Linux 的虚拟文件系统说起。由于在 Linux世界里允许众多不同的文件系统共存,比如 EXT3、EXT4、XFS、Btrfs及特别适合Docker容器存储的Overlayfs,因此为了支持各种实际的文件系统,Linux在内核层面设计了一套虚拟文件系统(Virtual File System,VFS),VFS定义了所有文件系统都必须支持的一套与文件相关的数据结构和基本接口,每个具体的文件系统都必须实现对应的 VFS 接口,才能被VFS纳入,成为操作系统支持的文件系统。正是由于VFS的存在,NFS才可以很方便地实现与本机其他文件系统的无缝对接。如下图所示,当用户程序访问一个NFS 映射的文件时,VFS将请求转发给本机的NFS Client进程,这是NFS的一个守护进程(Daemon进程),它在收到请求以后,就通过RPC远程过程调用的方式与远程的NFS Server通信,通过网络传输方式获取远程文件的内容,最后返回给用户的进程。
NFS为了保证文件传输的效率,默认采用UDP而不是TCP,这与FTP 不同。此外,为了解决分布式情况下的文件共享冲突问题,NFS也提供了对分布式文件共享锁的支持。NFS的配置过程也不复杂,首先是在Server 服务器端启动NFS的服务端进程,确定哪些目录可以开放给客户端挂载;其次,Client客户端机器选择挂载哪些目录,一旦挂载好,访问起来就跟本地文件一样了。下面的命令是挂载192.168.0.100的/usr/local/test目录到本机的/usr/local/test目录:
mount -t nfs 192.168.0.100 :/usr/local/test /usr/local/test
从NFS 的架构体系来看,它可以把任意数量的服务器上的文件系统无缝接入本地服务器,形成一个星状的分布式文件系统。从数据分片的思想来看,NFS其实是一种完全由用户自定义分片路由的分布式文件系统,假设我们有10台服务器(192.168.0.1~192.168.0.10),每台都有2TB的本地磁盘(/storage),则为了将20TB的文件存储到这10台服务器上,我们可以在Client服务器上建立10个目录作为分片目录(/storage/1-/storage/10)分别映射到这10台服务器的某一台上。
本文给大家讲解的内容是架构解密从分布式到微服务:深入解析分布式文件存储,经典的网络文件系统NFS
- 下篇文章给大家讲解的是架构解密从分布式到微服务:深入解析分布式文件存储,高性能计算领域的分布式文件系统;
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!
标签:文件,文件系统,解密,NFS,分布式文件系统,VFS,分布式 来源: https://blog.csdn.net/stone_tmp/article/details/117855324