MIT-6.824 P11 Cache Consistency Frangipani

P11 Cache Consistency Frangipani 视频观看笔记

Frangipani 是一个网络文件系统(NFS),是一个去中心化的设计,即复杂的逻辑实现都在Frangipani内部完成,frangipany与petal通过RPC进行交互来获取磁盘中的数据。

缓存一致性、分布式事务和分布式故障恢复

缓存一致性

缓存一致性即是如果缓存了一些数据,但之后修改了实际数据却没有考虑到缓存中的数据,则需要进行一些额外的工作来使缓存与实际数据保持一致。

在多客户端共享服务器存储时,若当前客户端在共享存储中的文件读取出来,并在缓存中对文件做了更改,那么其余客户端便无法看到这个更改,便会出现不一致的情况。

缓存一致性协议来实现缓存一致性,缓存一致性由锁来保证。

存在一个锁服务器,锁服务器会记录每个文件的锁被谁持有。每个工作站中会记录它锁持有的锁以及锁对应的文件内容。当工作站决定要读取文件时,会先向一个锁服务器请求文件对应的锁,之后才会向服务器请求文件或者目录的数据。收到数据之后,工作站会记住对应锁的状态以及文件的内容。

在工作站完成了相应的操作时,工作站会释放锁,锁的状态为Idle,但仍被工作站锁持有,从锁服务器的角度来看,工作站仍持有锁。

一些规则:

  • 工作站不允许持有缓存的数据,除非同时持有了与数据相关的锁。
  • 释放锁之前,必须将修改了的数据写回到共享存储服务器中,只有服务器收到了数据,才可以释放锁,然后工作站的lock表单中删除有关文件锁和缓存数据的记录。

缓存一致协议包含的4种消息如下:

  • 工作站发送给锁服务器Request消息,锁服务器会等到该锁空闲时(异步)发送Grant消息给工作站。
  • 锁服务器如果收到加锁的请求,若查看自己的lock表单发现这个锁正在被工作站持有,那么锁服务器就向该工作站发送一个Revoke消息给该工作站以请求释放锁。工作站中的锁若是Idle状态,则会进行释放,并向锁服务器发送一条Release消息(在消息写入到共享存储之后)。

每个工作站用完锁没有立即释放,而是改为Idle状态是由于局部性原理所做出的一种优化。

另一个优化点是读写锁的优化。

原子性

以锁为核心,实现一个数据库风格的分布式事务系统。

即在整个操作的过程中持有所有的锁,便可以获得不可分割的原子事务。

分布式故障恢复

若当前工作站崩溃掉了,不会影响其他使用共享系统的工作站,即使正在查看当前工作站的目录,也希望可以正常运行,可以漏掉没有Write-Back的操作,但能看到正常运行的文件系统。

通过**预写型日志(WAL)**实现故障可恢复的事务。

即工作站在向共享存储写入数据之前,会在共享存储中自己的log列表中追加需要完成操作的日志条目,当日志条目追加完成之后,才会开始向共享存储发送数据。log条目带有序列号。

log中只包含了对于元数据的修改,不包含写入文件的数据,一个log条目包含的是一个完成的操作步骤。

收到Revoke请求时,会先将完整log写入到共享存储中,再进行后面的操作。

故障发生的情景:

  • 工作站在向共享存储中写入log,还没有进行文件数据的写入。
  • 工作站正在向共享存储中写入修改的文件,完整的log已经写入。

工作站崩溃之后,锁服务器向工作站发送一个Revoke消息,锁服务器得不到响应之后,会触发故障恢复,如果其他工作站需要崩溃的工作站所持有的锁,那么锁服务器会发出Revoke消息,锁服务器收不到Release消息直到租约到期后,开始进行初始化恢复工程(认为该工作站崩溃了)。

锁服务器通知另一个工作站,当前工作站已崩溃,读取它的log并重新执行,执行完成之后,对锁服务器进行通知,锁服务器将锁释放,来让该工作站使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值