`
逆天子军少
  • 浏览: 78800 次
  • 性别: Icon_minigender_1
  • 来自: 安庆
社区版块
存档分类
最新评论

分布式系统--Lease机制

 
阅读更多

大多数数据分布方式都会有一个瓶颈问题--中心服务器存储维护着元数据,系统中其他的节点通过访问它读取,修改元数据。这样,中心服务器节点的性能就容易成为系统的瓶颈。解决方法也有多种,你可能会搭建一个集群专门存储元数据,并对外进行读写。但这样又要涉及到数据的一致性问题。本文将介绍被广泛应用于各种实际的分布式系统中的最重要的分布式协议--Lease机制
为了解决上面的性能瓶颈,lease机制设计了一套cache系统,在各个节点上cache元数据信息。

基本原理:中心服务器在向各节点发送数据时同时向节点颁发一个lease.每个lease具有一个有效期,和信用卡上的有效期类似,lease上的有效期通常是一个明确的时间点,例如12:00:10,一旦真实时间超过这个时间点,则lease过期失效。在lease的有效期内,中心服务器保证不会修改对应数据的值。因此,节点收到数据和lease后,将数据加入本地Cache,一旦对应的lease超时,节点将对应的本地cache数据删除。中心服务器在修改数据时,首先阻塞所有新的读请求,并等待之前为该数据发出的所有lease超时过期,然后修改数据的值。
上述机制可以保证各个节点上的cache与中心服务器上的中心始终一致。这是因为中心服务器节点在发送数据的同时授予了节点对应的lease,在lease有效期内,服务器不会修改数据,从而客户端节点可以放心的在lease有效期内cache数据。上述lease机制可以容错的关键是:服务器一旦发出数据及lease,无论客户端是否收到,也无论后续客户端是否宕机,也无论后续网络是否正常, 服务器只要等lease超时,就可以保证对应的客户端节点不会再继续cache数据,从而可以放心的修改数据而不会破坏cache的一致性。

不难发现上面的机制有性能和可用性上的问题,但也容易优化。

优化点一:服务器在修改元数据时首先要阻塞读请求并等待lease超时,这是为了防止发出新的lease从而引起活锁。优化方法很简单:进入修改流程后,我们对读请求只返回数据,不颁发lease。进一步优化,我们可以颁发lease,但有效期设置为已发出到lease的最大有效期。这样,客户端节点可以继续缓存元数据,并且不会造成活锁。不过,实际情况中,第一种优化就足够了。因为等待超时的时间会被优化点二大大减少。
优化点二:服务器在修改元数据时需要等待所有的lease过期超时,从而造成修改元数据的操作时延大大增大。优化的方法是,在等待所有的lease过期的过程中,服务器主动通知各个持有lease的节点放弃lease并清除cache中的数据,如果服务器收到客户端返回的确认放弃lease的消息, 则服务器不需要在等待该lease超时。该过程中,如果因为异常造成服务器通知失败或者客户端节点发送应答消息失败,服务器只需依照原本的流程等待lease超时即可,而不会影响协议的正确性。
优化点三:Lease机制依赖于有效期(常选择的 lease 时长是10秒级别),这就要求颁发者和接收者的时钟是同步的。一方面,如果颁发者的时钟比接收者的时钟慢,则当接收者认为lease已经过期的时候,颁发者依旧认为lease有效。接收者可以用在lease到期前申请新的lease的方式解决这个问题。另一方面,如果颁发者的时钟比接收者的时钟快,则当颁发者认为lease已经过期的时候,接收者依旧认为lease有效,颁发者可能将lease颁发给其他节点,造成承诺失效,影响系统的正确性。对于这种时钟不同步,实践中的通常做法是将颁发者的有效期设置得比接收者的略大,只需大过时钟误差就可以避免对lease的有效性的影响。

上面仅仅是lease机制的一个实例。进一步分析其本质。

由于lease是一种承诺,具体的承诺内容可以非常宽泛,可以是例子中数据的正确性;也可以是某种权限,例如当需要做并发控制时,同一时刻只给某一个节点颁发lease,只有持有lease的节点才可以修改数据;也可以是某种身份,例如在primary-secondary架构中,给节点颁发lease,只有持有lease的节点才具有primary身份。Lease的承诺的内涵还可以非常宽泛。
lease机制具有很高的容错能力
一:通过引入有效期,Lease机制能否非常好的容错网络异常。Lease颁发过程只依赖于网络可以单向通信,即使接收方无法向颁发者发送消息,也不影响lease的颁发。
二:由于lease的有效期是一个确定的时间点,lease的语义与发送lease的具体时间无关,所以同一个lease可以被颁发者不断重复向接受方发送。即使颁发者偶尔发送 lease 失败,颁发者也可以简单的通过重发的办法解决。
三:Lease机制能较好的容错节点宕机。如果颁发者宕机,则宕机的颁发者通常无法改变之前的承诺,不会影响lease的正确性。在颁发者机恢复后,如果颁发者恢复出了之前的lease信息,颁发者可以继续遵守lease的承诺。如果颁发者无法恢复lease信息,则只需等待一个最大的lease超时时间就可以使得所有的lease都失效,从而不破坏lease机制。

下面在讲一个lease机制的具体应用--确定节点状态
在分布式系统中怎么确定一个节点是否处于正常工作状态是一个比较困难的问题。接触过Hadoop的人可能脑海中会立马想起“心跳”。我们首先要说明的就是“心跳”无法很好的解决这个问题。
在一个primary-secondary架构的系统中,有三个节点 A、B、C互为副本,其中有一个节点为primary,且同一时刻只能有一个primary节点。另有一个节点Q负责判断节点A、B、C的状态,一旦Q发现primary异常,节点Q将选择另一个节点作为primary。假设最开始时节点A为primary,B、C为secondary。节点Q需要判断节点 A、B、C 的状态是否正常。
如果某个时刻因为种种原因,Q与节点A之间的网络暂时中断,节点A与节点B、C之间的网络正常。此时节点Q认为节点A异常,重新选择节点B作为新的primary,并通知节点A、B、C新的primary是节点B。由于节点Q的通知消息到达节点 A、B、C的顺序无法确定,假如先到达B,则在这一时刻,系统中同时存在两个工作中的primary,一个是A、另一个是B。假如此时 A、B都接收外部请求并与C同步数据,会产生严重的数据错误。这便是实际情况中可能会出现的“双主”问题。
上面的例子中的分布式协议依赖于对节点状态认知的全局一致性,即一旦节点Q认为某个节点A异常,则节点A也必须认为自己异常,从而节点A停止作为primary,避免“双主”问题的出现。解决这种问题有两种思路,第一、设计的分布式协议可以容忍“双主”错误,即不依赖于对节点状态的全局一致性认识,或者全局一致性状态是全体协商后的结果;第二、利用lease机制。下面主要讨论怎么利用lease机制解决这个问题。
由中心节点向其他节点发送lease,若某个节点持有有效的lease,则认为该节点正常可以提供服务。节点 A、B、C 依然周期性的发送heart beat报告自身状态,节点Q收到heart beat后发送一个lease,表示节点Q确认了节点 A、B、C 的状态,并允许节点在 lease 有效期内正常工作。节点Q可以给 primary节点一个特殊的lease,表示节点可以作为primary工作。一旦节点Q希望切换新的primary,则只需等前一个primary的lease过期,则就可以安全的颁发新的lease给新的primary节点,而不会出现“双主”问题。

在实际系统中,若用一个中心节点发送lease也有很大的风险,一旦该中心节点宕机或网络异常,则所有的节点没有lease,从而造成系统高度不可用。为此,实际系统总是使用多个中心节点互为副本,成为一个小的集群,该小集群具有高可用性,对外颁发lease的功能。

 

由于有类似zookeeper的开源系统,在实际中完全可以间接使用lease。借助zookeeper,可以简单的实现高效的,无单点选主,状态监控,分布式锁,分布式消息队列等功能。实际上,这些功能背后都依靠着zookeeper与client之间的lease。

 

参考:分布式系统原理介绍.pdf

1
0
分享到:
评论

相关推荐

    分布式系统原理pdf

    本文档中介绍的关键知识点涵盖了分布式系统的核心概念、数据分布策略、副本协议、lease机制、Quorum机制、日志技术、两阶段提交协议、基于MVCC的分布式事务以及Paxos协议和CAP理论等。 在分布式系统的模型部分,...

    分布式系统原理介绍

    Lease机制用于在分布式cache系统中管理数据的有效性,通过租约来避免过期数据被使用,同时便于处理节点的故障和恢复。Quorum机制是一种基于多数派原则的数据同步方法,可以有效地解决分布式系统的读写一致性问题。 ...

    分布式系统原理介绍.pdf

    Lease机制是一种在分布式系统中控制资源访问的租约机制,可以用于实现分布式缓存系统,防止节点故障时资源的不一致性。Quorum机制是分布式系统中用于读写数据的一种策略,通过多数派的方式保证数据的一致性。日志...

    分布式系统原理 刘杰

    ### 分布式系统原理知识点梳理 #### 一、前言 - **背景**: 本书旨在填补理论知识与工程实践之间的空白,为初学者提供一份既深入浅出又全面的学习资料。 - **目标**: 通过总结作者在分布式系统开发过程中的理论与...

    深度介绍分布式系统原理与设计.docx

    - **Lease机制**:一种资源管理策略,允许节点在一段时间内独占资源,以减少通信开销和提高效率。 - **Quorum机制**:用于决策的多数派原则,确保大多数副本同意变更才能执行。 - **日志技术**:如Apache Kafka的...

    分布式系统原理

    2. **Lease机制**:为了解决元数据瓶颈问题,引入了Lease机制。Lease本质上是一种有限期限的权限授予,用于控制对资源的访问。当一个节点获取了Lease后,它可以在一定时间内独占访问某些资源,这有助于减少因元数据...

    分布式计算论文

    **Lease机制**是一种简单而有效的分布式系统资源管理策略。在分布式环境中,系统可能由多个节点组成,每个节点都可能对共享资源提出访问请求。Lease机制允许服务器为客户端提供一段时间的独占权限,即“租约”。在此...

    分布式文件系统PPT

    Chubby是一种由Google开发的分布式文件系统,特别设计用于提供粗粒度的锁服务,适合松耦合的分布式系统。 Chubby系统的主要特点是其提供的粗粒度锁服务。与传统的细粒度锁相比,粗粒度锁允许更大范围的数据锁定,...

    分布式基本理论.pdf

    3. Quorum 机制:Quorum 是一种多数决策机制,确保在分布式系统中只有大多数节点同意的情况下,操作才能成功。在 Raft 中,每个节点的写操作必须被大多数副本确认,这样即使有部分节点故障,数据仍能保持一致。 4. ...

    Redis分布式锁实现Redisson 15问.doc

    Redis分布式锁是指在分布式系统中,多个服务实例之间对同一个资源加锁的机制,以保证数据的一致性和安全性。Redisson是一个基于Redis的分布式锁实现,它提供了一个高效、可靠的加锁机制。在本文中,我们将深入探讨...

    分布式一致性技术演进分析.docx

    随着互联网技术的发展和分布式系统的广泛应用,确保数据的一致性成为了系统设计中的关键因素之一。分布式一致性技术旨在解决跨多台服务器的数据同步问题,确保数据的一致性、可靠性和可用性。本文将围绕这一主题,...

    完整版大数据课件集合3-大数据导论-第三章-分布式文件系统HDFS(共54页).rar

    - **NameNode和DataNode之间的通信**:心跳机制、BlockReport、 Lease机制等,用于维护文件系统状态。 - **故障检测与恢复**:如何发现DataNode故障,以及如何重新分配数据块以保证数据可用性。 - **HDFS的客户端...

    记录redisson实现redis分布式事务锁

    Redisson是基于Redis的Java客户端,它提供了丰富的数据结构和服务,包括分布式锁、信号量、队列、计数器等,极大地扩展了Redis在分布式系统中的应用能力。本篇文章将详细探讨如何使用Redisson实现Redis分布式事务锁...

    Redis 分布式锁使用

    分布式锁是一种在分布式系统中协调多个节点共享资源的机制。它确保在同一时刻,只有一个客户端能够持有锁并执行特定操作,从而避免并发问题。Redis提供了一种简单且高效的实现方式,主要依赖于`SETNX`(Set if Not ...

    lease

    在IT行业中,"Lease"一词通常与网络协议、分布式系统或数据库管理中的租赁机制有关。在这种机制中,一个实体(通常是客户端)获取对某个资源的临时使用权,这种使用权在一定时间后会自动失效,除非它被续租。这个...

    Python-一个etcd的python客户端

    总之,`jplana-python-etcd`是Python开发者在分布式系统中利用etcd服务的强大工具,它简化了与etcd服务器的交互,并提供了实现领导者选举的关键功能。通过深入理解和熟练使用这个库,你可以构建出更加健壮和可靠的...

Global site tag (gtag.js) - Google Analytics