租约机制

2019-12-08  本文已影响0人  小怪兽狂殴奥特曼

产生历史

1.master/slave架构

在介绍租约机制之前,我们必须要先介绍一个分布式系统中常用的系统架构:master/slave架构。master/slave架构的常见流程如下:

这个架构的特点是所有的请求都要经过master节点。当client请求量很大时,master的压力会非常大,master节点很容易成为系统瓶颈。而且单节点的master可用性也不够高。

为了减轻master节点的压力,可以将master中的部分元数据缓存在client中。这样就产生了client缓存跟master节点的数据一致性问题。要保证这个缓存系统能正常工作,关键是要保证client缓存的数据跟master节点的数据保持一致。租约机制就是为了解决分布式缓存数据一致性问题提出来的。
此外租约机制还可以用来确定阶段集群状态、实现分布式锁等问题。

租约机制

1.原理

在这个client/master分布式一致性缓存系统中,当client向master请求元数据时,master返回数据并给返回的数据设置一个租约(lease)。这个租约有一定的有效期。在有效期内,master承诺不会修改跟这个租约关联的数据。不论master发出去的元数据client是否有收到,client是否宕机,master将不会对有租约的数据进行修改,这样变保证了client跟master的数据保持一致。

如果master在有效期内master收到请求修改带有租约的数据,master修改数据时,先阻塞所有对该数据的读请求,并等待该数据上的租约失效后再进行修改,然后再返回结果。
对于client,在读取元数据时,先检查本地的是否存在有效期内的cache,如果没有的话向master请求带有租约的元数据,并将其缓存起来。当租约到期后则将本地的cache删除。

该机制的优化点:

租约的有效期是一个基于master的时钟的时间点,因此要求master和client的时钟必须同步。如果租约的颁发者的时钟比接收者的时钟满,造成颁发者这边租约没过期而接收者接收到租约时租约已经过期,解决方法是重复申请一个更短的租约。
如果租约的颁发者的时钟比接收者快,造成颁发者这边租约已经到期而接收者认为租约仍然认为有效,解决方法只能是颁发者在颁发租约时适当减少租约有效时长。

上一篇 下一篇

猜你喜欢

热点阅读