经典分布式论文阅读:Frangipani

本文是Frangipani论文的阅读笔记,Frangipani是一个创建在Petal之上的分布式文件系统,采用分布式锁来保证一致性。其中Petal是一个增量扩展、高可用能够自动管理的分布式虚拟磁盘。缓存

总览

Frangipani最为显著的特性为——一组机器使用一个公共存储,使用锁进行同步访问。要求的其余特性包括:安全

  1. 全部用户看到文件的一致视图
  2. 更多的服务器能够很方便地添加到集群中来扩展容量和带宽而不须要改变已有服务器的配置甚至打断它们运行
  3. 管理员能够添加用户而不须要担忧数据如何被管理
  4. 能够在不打断系统运行的状况下进行全局一致备份
  5. 能够在不须要运维介入的状况下从机器故障、网络故障以及磁盘故障中恢复

系统结构

组件

用户程序使用系统调用(文件系统)访问Frangipani文件系统,任何修改缓存在内核缓冲区中,直到调用fsync或者sync才被写入,显然Frangipani文件系统模块须要运行在操做系统内核中。全部的文件系统读写Petal上相同的数据结构,可是在虚拟磁盘上独立保存各自的redo日志。Petal提供了巨大、可扩展、容错的虚拟硬盘,而锁服务实现了多读单写锁。服务器

安全性和客户端/服务器配置

Frangipani运行在可信环境中,并无设计安全措施。若是须要在不可信环境使用Frangipani,能够将包含Petal的Frangipani服务器部署在可信环境,而后将不包含Petal的客户端和Frangipani服务器链接。网络

磁盘布局

Petal为Frangipani提供了一个巨大的虚拟磁盘空间,地址空间大小为2^{64},虚拟磁盘使用方式以下:数据结构

  • 第一个区域(1TB)保存共享的配置参数和内部信息;
  • 第二个区域(1TB)保存日志,每一个服务器拥有私有的日志,目前划分了256个空间,所以最多支持256个Frangipani服务器;
  • 第三个区域(3TB)保存位图,追踪剩余区域中的空闲块;
  • 第四个区域(1TB)保存i节点,每一个i节点大小为512B;
  • 第五个区域(128TB)保存小数据块,每一个数据块为4KB;
  • 剩余区域保存大数据块,每一个数据块为1TB。

比64KB小的文件只保存在小数据块中,更大的文件保存在16个小数据块加上1个大数据块中,文件大小不能超过16个小数据块加上1个大数据块的容量。运维

日志和恢复

Frangipani保存元数据的REDO日志来简化故障恢复和提高性能,用户数据不会记录。当Frangipani奔溃以后,系统检测到故障,使用日志进行恢复。为了保证日志和恢复正常工做须要保证:分布式

  1. 不一样服务器在同一数据上的操做必须是序列化的;
  2. 只会恢复那些拥有锁状态的日志;
  3. 对于一个服务器,只有一个恢复进程在工做。

同步和缓存一致性

Frangipani使用了多读取/单写入锁来保证同步性。读取锁容许服务器从磁盘读取数据并缓存,在释放读取锁以前须要让缓存失效。写入锁容许服务器读写数据并缓存,可是在释放以前须要将缓存中的脏数据写入磁盘。做者将磁盘上的结构分割成能够加锁的分块,包括每一个日志,位图、文件、目录以及符号连接。避免死锁主要靠顺序加锁和解锁,服务器首先须要知道全部须要得到的锁,而后进行排序,按照顺序获取和解锁。布局

锁服务

锁服务提供了多读取/单写入锁,客户端会一直持有锁,直到别的有冲突的客户端请求。锁服务使用租期来处理故障,每一个客户端会请求一个租期,每一个锁会和租期对应,客户端须要在过时以前刷新租期,若是客户端租期过时,那么就认为已经崩溃了。性能

做者前后尝试了三种锁服务方案:大数据

  • 中心化的服务:缺点是难以容错
  • 保存在Petal:缺点是性能比较差
  • 容错可扩展存储:和Petal服务器绑定

增长和移除服务器

增长服务器很是简单,只须要告知使用哪一个Petal虚拟磁盘,以及如何找到锁服务。新服务器会联系锁服务得到租期,肯定日志保存位置,而后开始处理操做。移除服务器就更加简单了,直接关闭便可。

备份

Petal可以在任什么时候间建立一份虚拟磁盘的拷贝。若是想要实现文件系统层面的备份,能够阻塞文件系统调用后进行备份。

参考文献

  1. Thekkath, Chandramohan A., Timothy Mann, and Edward K. Lee. "Frangipani: A scalable distributed file system." SOSP. Vol. 97. 1997.
相关文章
相关标签/搜索