分布式计算的出现以分布式文件系统的引入为标志。这样的系统涉及多个客户端计算机和一个或几个服务器。服务器将数据存储在其磁盘上,客户端可能通过某些协议消息请求数据。
分布式文件系统的优点:
- 允许在客户端之间轻松共享数据。
- 提供集中管理。
- 提供安全性,即只能保护服务器以保护数据。
分布式文件系统架构:
即使是简单的客户端/服务器体系结构,也比以前在OS中讨论的物理文件系统涉及更多的组件。该体系结构包括一个客户端文件系统和一个服务器端文件系统。客户端应用程序发出系统调用(例如read(),write(),open(),close()等)以访问客户端文件系统上的文件,从而从服务器上检索文件。有趣的是,对于客户端应用程序,此过程似乎与从物理磁盘请求数据没有什么不同,因为这样做不需要特殊的API。就文件访问而言,这种现象称为透明性。客户端文件系统执行命令来服务这些系统调用。
例如,假设客户端应用程序发出了read()系统调用。然后,客户端文件系统向服务器端文件系统发送消息,以从服务器磁盘中读取一个块,并将数据返回给客户端。最后,它将这些数据缓冲到read()缓冲区中,并完成系统调用。
服务器端文件系统也简称为文件服务器。
Sun的网络文件系统:
最早成功的分布式系统可以归功于开发网络文件系统(NFS)的Sun Microsystems。NFSv2是多年来遵循的标准协议,其设计目的是实现简单,快速的服务器崩溃恢复。在基于多客户端和单服务器的网络体系结构中,此目标至关重要,因为服务器崩溃的一瞬间意味着所有客户端都无法使用。整个系统故障。
有状态协议会使崩溃变得复杂。考虑客户端A试图从服务器访问某些数据。但是,在第一次读取后,服务器崩溃了。现在,当服务器启动并运行时,客户端A发出第二个读取请求。但是,服务器不知道客户端正在引用哪个文件,因为所有这些信息都是临时的,并且在崩溃期间丢失了。
无状态协议为我们提供了帮助。这样的协议被设计为不在服务器中存储任何状态信息。服务器不知道客户端在做什么—它们正在缓存什么块,客户端打开了哪些文件以及它们当前的文件指针在哪里。服务器仅提供服务客户请求所需的所有信息。如果发生服务器崩溃,则客户端只需要重试该请求即可。由于其简单性,NFS实现了无状态协议。
文件句柄:
NFS使用文件句柄来唯一标识正在执行当前操作的文件或目录。它由以下组件组成:
- 卷标识符– NFS服务器可能具有多个文件系统或分区。卷标识符告诉服务器正在引用哪个文件系统。
- 索引节点编号–此编号标识分区中的文件。
- 世代号–在重用inode号时使用该数字。
文件属性:
“文件属性”是NFS术语中常用的术语。这是跟踪文件元数据的统称,包括文件创建时间,最后修改时间,大小,所有权权限等。可以通过在文件上调用stat()来访问此文件。
NFSv2协议:
下面列出了一些常见的协议消息。
信息 | 描述 |
---|---|
NFSPROC_GETATTR | 给定文件句柄,返回文件属性。 |
NFSPROC_SETATTR | 设置/更新文件属性。 |
NFSPROC_LOOKUP | 给定文件句柄和要查找的文件名,返回文件句柄。 |
NFSPROC_READ | 给定文件句柄,偏移量,计数数据和属性,即可读取数据。 |
NFSPROC_WRITE | 给定文件句柄,偏移量,计数数据和属性,将数据写入文件。 |
NFSPROC_CREATE | 给定目录句柄,文件名和属性,将创建一个文件。 |
NFSPROC_REMOVE | 给定目录句柄和文件名,删除该文件。 |
NFSPROC_MKDIR | 给定目录句柄,目录名称和属性,将创建一个新目录。 |
LOOKUP协议消息用于获取文件句柄,以进一步访问数据。NFS挂载协议有助于获取文件系统中根(/)目录的目录句柄。如果客户端应用程序打开文件/abc.txt,则客户端文件系统将通过根(/)文件句柄向服务器发送LOOKUP请求,以查找名为abc.txt的文件。如果查找成功,则返回文件属性。
客户端缓存:
为了提高NFS的性能,分布式文件系统会将数据以及从服务器读取的元数据缓存到客户端上。这称为客户端缓存。这减少了后续客户端访问所花费的时间。高速缓存还用作写入的临时缓冲区。由于所有写入都一次性写入服务器,因此这有助于进一步提高效率。