论文地址:https://pdos.csail.mit.edu/6.824/papers/thekkath-frangipani.pdf
一、概述
理想的分布式文件系统应该是可以提供一致性的文件访问、存储可以按需扩容、性能可以横向扩展、最小化人工维护成本。Frangipani就是这样的一个分布式文件系统。
Frangipani提供以下几个特性:
- 所有用户都具有文件相同的一致性视图
- 运行时增加服务器,服务器数量变更不会打乱运行的服务
- 管理员增加新用户不需要担心存储的分配
- 一致行备份、在线备份、允许用户快速访问误删除的文件
- 高容错性
二、系统架构
上层的frangipani server通过petal访问文件,并且petal使用lock service保证file的一致性。
此图frangipani server没有画出来,它可能跟petal在一台机器,也可能没有。同时lock service是独立与其它系统的,但是也可以和其它系统一起运行。
用户将修改的数据暂存到本地直到下一次系统同步被调用,他们的redo log会被存到petal的不同位置,用户崩溃恢复。
三、磁盘布局
frangipani利用petal大且稀疏的磁盘空间简化了它的数据结构。
四、日志与恢复
日志
- frangipani采用WAL的方式,在写数据以前先写日志
- log在petal有特定的位置保存
- 每个日志有LSN,并且有version number用于recovery
- log是保存在一个环型的存储空间上,当环满了,会擦除前面25%的部分
- 每个日志目前最大是128KB
崩溃恢复
当一台frangipani崩溃后,崩溃的server的client或者lock service会检测到。recovery demon会被给予lock和log,recovery demon按序执行未完的日志,只要在petal是可用的情况下,可容忍无限的frangipani server崩溃。
确保logging和recovery work的细节
- 通过lock protocal确保对相同数据的请求是串行的,在获取write lock之前确保之前的脏数据被写到petal
- 为了防止某些block被重复写,因此在block中加入version number(log中也有),所以当将要写入的log的version number小于block中的时,则不写入此log
- lock service确保只有一台server在执行recovery
- log会有crc校验
五、缓存一致
frangipani通过多读/单写的锁来实现同步。当lock service检测到有冲突的lock时,当前的holder会被要求释放lock。
当write lock被释放时,脏数据会被写到磁盘。read lock被释放时,会清空自己的缓存。