简介
Fangipani 是一个分布式文件系统,构建在虚拟磁盘上Petal上。这里我们只关注于Fangipani的Cache一致性是怎么做的
架构
可以简单理解为不同的client通过Petal而拥有对文件系统的统一view。每个client拥有自己的cache,将Petal的文件读到cache中修改,同过lockserver来同步获取锁和释放锁。
cache一致性
每个客户端有一个表来保存自己持有的所有lock的状态 busy/idle,busy表示正在对文件读写操作,idle表示已经读写完毕。
FILE | LOCK | CONTENT |
---|---|---|
file1id | busy | ------ |
file2id | idle | ------ |
lockserver保存所有的client当前的lock状态,数据结构如图所示
FILEID | OWNER |
---|---|
1 | client1 |
2 | client2 |
owner表示当前哪一个client获得该lock
每个客户端遵循两条规则
- 没有获取到lock时候,不允许cache数据
- 当从lockserver 获取到lock时候,再向Petal获取数据
- 当向petal写数据时,release lock。这里注意的是,Fangipani并不会主动去释放这个锁,而只是简单的将自己lock的状态标位idle
协议
当一个client需要请求lock时,
- 向lockserver发起REQUEST
- lockerserver 查看该文件对应的锁状态,如果是空闲的,则
发送GRANT 给client表示获得该lock,如果其他client已经获取到锁,则lockserver会向那个client发送REVOKE,当对应的client获取到该消息时候,将自己读写操作完毕后发送RELEASE给lockserver - lockser 发送GRANT给请求的client
事务
将设计到的所有文件一次向上lock,操作完毕后释放(影响性能)