看公司学习视频做的笔记
基本概念
最初应用于分布式文件cache。一个server,许多client。许多client会从server做cache,cache需要与server保持一致。
最初来自论文Leases: An Efficient Fault-Tolerant Mechanism for Distributed File Cache Consistency
server向client发送data+lease。lease中有有效期。
client拿到lease后,在规定的有效期之前,不需要向server获取。修改可以放在本地cache中。
读取流程描述
if incache(data) & leaseOK(data):
return data in localcache
else:
if failed(data, lease = getfromserver()) :
return False
else:
store(data, lease)
return data
更新流程描述
client向server发起update request。server收到请求后,接受但阻塞所有新的read request。等待其他client的所有相关lease超时。服务器update data,并向client返回修改成功。
优化
之前的方法update操作时间太长,甚至可能产生writer饿死reader的情况。
更新过程中,运行read,但禁止cache(不发lease)。
更新前主动通知cache失效,但失效不一定能成功。可能会加快client的获取server状态的速度。
分析
Lease是颁发者授予的在某一有效期内的承诺。给你Lease才能做。
Lease失效时,一定能保证client不在工作。
对付网络异常:
没法过去,可以等超时。发过去了想收回,也等超时。
对付client异常:
client如果挂了,不管拿没拿到lease,都不影响server。拿到就在有效时用。
Lease不依赖于存储,client可以放在内存里。server挂了也可以取lease最长有效期,所有lease都过期前不做事。
Lease与时钟:
颁发者慢,毫无影响。client的lease可能短一点,再发一个请求即可。
颁发者快,有影响!client以为lease没超时,还在做事,可实际已经超时。实际中,可能server容忍的lease时间比发出的更长几秒。
基于Lease确定结点状态
单纯的心跳无法判断,网络可能不同。
可以通过lease知道对方是否在某一个状态(一般是不工作状态),可以认为lease期限内的结点在工作。
中心结点可能是由选举算法选举。
其他:
分布式系统很难保证任何主动的通知会成功传达给到另一台机器。
lease可以作用于节点,而不是作用于data。有lease可以提供服务,没lease不能提供服务。