Frangipani: A Scalable Distributed File System
Abstract
Frangipani 是一个两层架构的文件系统:
- 底层为Petals :一个分布式虚拟磁盘
- 顶层为Frangipani file system,在每台机器上运行同样的代码,利用分布式锁来保证一致性
系统中的节点相互之间拥有信任权限,分享虚拟磁盘
对外界根据协议暴露接口,可通过网络调用访问文件
1. Introduciton
-
面对逐日增长的文件存储需求,增加机器是必须要做的事。这就引出了一下问题:机器的人工管理
-
Frangipani是一种新的可扩展分布式文件系统,将多台计算机上的磁盘集合作为共享存储池进行管理。
2. System Structure
Figure 2 :一种典型的机器功能分配,实际上Frangipani不是必须与Petal分离
2.1 Components
-
如图2所示, 用户程序通过标准操作系统接口访问Frangipani
-
所有部署了Frangipani的机器看到的文件是一致的
-
Frangipani 对于程序访问做出类似本地 Unix 文件系统的保证:
- 对于文件内容的更改在本地内核缓冲池缓冲,在下一次调用 fsync 和 sync 前不保证数据的持久性
- 但元数据的更改会写入日志
- 可以选择在系统调用返回时保证持久性
-
Frangipani 与本地文件系统有一点不同的是:Frangipani 记录对文件的访问次数, 以免每次读取文件都要修改元数据
-
Frangipani 在机器的内核中运行。它将在内核中注册为可选的文件系统。
-
每个服务器保存自己的 redo log 在 Petal 上,以便在故障时可被其他服务器恢复
-
服务器间不会直接通信,而是通过 Petal 间接通信
2.2 Security and the Client/Server Configuration
- Frangipani 出于安全性考虑,最好只在被信任的机器上部署 Frangipani server
2.3 Discussion
Frangipani 仍然存在的三个问题:
- 在Petal上使用有时会导致两次日志:一次在Frangipani中,一次在Petal中
- Frangipani不能使用磁盘位置信息来存放数据,因为Petal虚拟整合了所有磁盘
- Frangipani在必须时为所有文件和目录上锁而不是获取某些粒度更细的锁(individual blocks)
3. Disk Layout
-
Petal 虚拟磁盘拥有 64位的空间地址,并只在写入数据时才将虚拟空间地址映射到实际的物理磁盘(像内存的页式管理)
-
为了保持其内部数据结构的小型,Petal将实际块大小分配为64KB
-
对于第五部分 Small blocks ,当文件的前64KB的内容会被储存在这里, 对于剩余的部分则会储存在 Large blocks
-
单个文件最大位 64KB + 1TB
4. Logging and Recovery
- Frangipani 使用元数据的WAL来简化故障恢复和改善性能,用户数据并不写入日志
为了确保日志记录和恢复在存在多个日志的情况下正常工作,Frangipani 做了如下保证:
- Frangipani 的锁协议保证了对于同一数据的修改操作序列化
- 恢复工作只会恢复那些服务器持有锁期间进行的修改:Frangipani 通过绝不重新应用已提交的日志来保证。
为了完成这个工作, Frangipani 为每个512字节的元数据块记录了版本号。通过版本号控制。
- 元数据块空间只能被元数据重用:以保证用户数据放到元数据块空间后被版本控制影响。
- 同一时间只有一个服务器的恢复工作在进行。
5. Synchronization and Cache Coherence
-
Frangipani 使用 多读者/单写 锁来扩展必须的同步
-
读锁可以读取数据, 当读锁被要求放弃锁时,必须先使其cache中的数据副本无效才能放弃
-
写锁可以读写数据, 只有持有写锁时cache中的数据副本才有可能与磁盘不同
-
写锁降级为读锁可以无需无效cache的数据副本,放弃锁必须无效数据副本
-
当写锁降级或释放时, 除了将脏数据写回磁盘, 我们还可以选择直接把数据传回请求者?(这点没看懂)
-
有的操作需要原子地修改多个锁保护的数据结构, Frangipani 通过全局排序这些锁和两阶段获取锁来防止死锁:
- 阶段一:根据位图地址排序并以此获取锁
- 阶段二:检查是否持有所有锁,如果有就进行操作,否则释放所有锁回到阶段一
6. The Lock Service
几类锁:简单的锁服务,分布式锁服务等等
7. Adding and Removing Servers
- 新增一台 Frangipani 服务器只需与 Petal 和 Lock 沟通即可
- 删除则直接关机
8. Backup
-
snapshot 是 copy-on-write 的
and Removing Servers -
新增一台 Frangipani 服务器只需与 Petal 和 Lock 沟通即可
-
删除则直接关机
8. Backup
- snapshot 是 copy-on-write 的