美文网首页
租约机制

租约机制

作者: 小怪兽狂殴奥特曼 | 来源:发表于2019-12-08 18:52 被阅读0次

    产生历史

    1.master/slave架构

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

    • client向master发起请求读取数据
    • master保存维护了所有实际提供服务的slave的元数据,并负责负载均衡工作。master收到client的请求后,返回一个可用的slave给client。
    • client收到master返回的可用slave信息后,再次向这个slave发起请求读取数据。
    • slave收到client请求,响应并返回结果。

    这个架构的特点是所有的请求都要经过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收到修改数据的请求后,在等待数据的租约过期的这段时间过程中,对收到的client读请求不阻塞,只返回数据,不返回租约。client收到不带租约的数据不进行缓存。
    • master收到修改数据的请求后,不等待租约过期,而是主动通知所有持有该租约的client放弃该租约。如果所有的客户端都通知成功,则master不用等待租约过期则可以直接对数据进行修改,否则等待租约过期再进行修改。

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

    相关文章

      网友评论

          本文标题:租约机制

          本文链接:https://www.haomeiwen.com/subject/lbomgctx.html