2月12日分布式学习笔记|青训营笔记

193 阅读4分钟

这是我参与【第五届青训营】伴学笔记创作活动的第十一天

1. 分布式文件系统的需求


透明性:

  1. 访问透明性:客户不需要了解你内部的结构,只需要一组文件操作命令访问本地/远程文件即可。
  2. 位置透明性:客户使用单一的文件命名空间,使所有用户能够看到同样的命名空间
  3. 移动透明性:当文件移动时,客户的系统管理表可以不用修改,多个文件(卷)可以被系统管理员任意修改。
  4. 性能透明性:系统提供一定的性能,能够负载一些
  5. 伸缩透明性:可以扩充服务

并发的文件更新:客户修改文件不影响其他用户 文件复制:会分担对一个文件的并发访问量,分担文件服务负载 硬件和操作系统的异构性:接口定义是明确的,可以在不同的计算机和操作系统上实现 容错:能够处理瞬时故障,在崩溃后无恢复重启 一致性、安全性、效率

2. 文件服务体系结构,即三个组件、作用、接口、设计理念


文件服务的三个组件:
	1. 客户模块
	2. 目录服务
	3. 平面文件服务
	

2.1 客户模块


  1. 运行在客户计算机上
  2. 提供应用程序来供用户来对文件透明存取
  3. 缓存最近使用的文件块提高性能

2.2 目录服务


提供文件名到UFID的映射

2.3 平面文件服务


基于UFID,对文件内容进行操作

![[Pasted image 20230212213731.png]]

其中read、write是最重要的文件操作,均需要一个参数i来指定文件的读写位置

平面文件服务操作和UNIX进行比较: 1. 平面文件服务操作无open和close操作,通过引用合适的UFID可以立即访问文件 2. read和write操作需要一个开始位置,UNIX的read和write操作不需要此参数 分布式文件系统(DFS)和UNIX在容错方面比较: 1. 除了create操作,其他操作都是幂等的(执行一次和多次的效果一致) 2. 在文件上操作不需要读写指针,故障后无需客户或者服务器恢复任何状态 分布式文件系统(无状态DFS)和UNIX在访问控制方面比较: 1. UNIX文件系统中,用户通过open调用时,系统会核对其权限 2. DFS接口对大众公开,存在安全隐患。文件服务器不能保存用户标识(UID),否则就变成有状态,那么怎么样实现访问控制呢: 1. 基于权能的认证(每个主体添加一个可以访问该主体的明细表) 2. 将每个请求与UID关联起来,每次请求都进行访问检查 3. NFS和AFS(早期的分布式文件系统)使用Kerberos认证来解决伪造用户标识的安全问题 ![[Pasted image 20230212215603.png]]

3. NFS体系结构、NFS服务器操作、路径解析、缓存机制


NFS的体系结构图如下所示: ![[Pasted image 20230212215740.png]]

应用程序将数据传给虚拟文件系统(VFS),下面介绍VFS

3.1 虚拟文件系统(VFS)


定义:VFS是UNIX内核的一个转换层,支持挂载不同的文件系统,不同的文件系统可以共存,同时区分本地和远程文件。跟踪本地和远程可用的文件系统,将请求传递到适当的本地或者远程的文件系统。

每个远程文件在文件系统中的存储标识结构(文件句柄)如下: ![[Pasted image 20230212220226.png]]

  • 文件系统标识:是指服务器服务哪一个文件系统
  • i节点数:用于标识和定位文件的数值且唯一
  • i节点产生数:文件被删除后可被重用,重用时加1;i节点被回收时,但文件仍被打开,抛出异常
  • 客户与服务器之间传递文件句柄时,句柄对客户不透明就是说客户不可见句柄。

3.2 设计要点


  1. 访问控制及认证:NFS服务器是无状态的,那么如何设计呢
  2. 将用户ID绑定到每个请求
  3. 在NFS中嵌入Kerberos认证,在加载的同时认证用户,凭据,认证和安全通道
  4. 将客户端集成到内核
  5. 用户程序可以调用UNIX系统调用访问文件,不需要重新编译或者加载库
  6. 一个客户模块通过使用一个共享缓存存储最近使用的文件块
  7. 传输给服务器用户认证用户ID的密钥,由内核保存,防止用户级用户冒充用户