一.Frangipani介绍
Frangipani是一个分布式的共享文件系统,具有强一致性,可扩展,容错性且用户无感知的特点。但Frangipani文件系统是类unix文件系统的,并不能像GFS一样,不能存储和处理大文件。
二.Frangipani基础架构和组件
各个组件描述:
- client:用户进行代码文件编写,并将数据缓存到Frangipani。
- Frangipani:进行本地缓存,拉取和传送数据
- petal: petal由许多petal server以及磁盘组成,一个petal server对应一个client,存储一个对应的client的文件。
- petal_server:Frangipani中的数据进行保存和存取。内部含有lock_server
- lock_server:读写请求锁,用来保证缓存一致性
三.Frangipani——缓存一致性实现
方法:通过lock来实现读写的一致性(仿照uinx文件的读写锁)。client对相关文件进行读的时候,会独占锁,其他用户需要对文件进行操作的时候,只能等锁释放掉,才能对文件进行操作,保证的数据的一致性。
四.Frangipani——分布式事务
利用锁,天然的保证了操作的原子性和隔离性
五.分布式崩溃恢复
- petal奔溃:Petal有自己的copy-on-write snapshot机制,且满足crash-consistent。Frangipani直接使用Petal的snapshot进行备份,snapshot包含了所有的log和数据信息,可以直接调用revocery demon进行恢复
- client奔溃:采用WAL
a. 先将操作写入log
b.修改数据
c.写入成功,client释放锁
client奔溃在a前面:数据写入没有成功,用checksum检查log_entry不完整,进行丢弃
client奔溃在a后面:petal重新执行一遍log,恢复数据
六.其他问题
解决思路:日志中会存储versionId,每次进行日志写入的时候,versionId会加一,存元数据的block的version也会相应的修改。只要保证block的versionId大于等于对应log的versionId,就能确定数据已写入petal