一种分布式存储的数据获取方法

文档序号:7869734阅读:357来源:国知局
专利名称:一种分布式存储的数据获取方法
技术领域
本发明涉及一种数据获取方法,尤其是一种分布式存储的数据获取方法。
背景技术
Google公司设计实现了 Chubby分布式锁服务系统,并已经在其内部系统中广泛使用。Chubby向程序设计者提供锁服务的接口,来保证数据操作的一致性。Chubby系统本质上是一个分布式的文件系统。系统为每项数据分配一个文件来代表其锁,用户通过打开、关闭和读取文件,获取操作此项数据的锁。通过通信机制,向用户发送更新信息。例如,当一群机器选举mater时,这些机器同时申请打开某个文件,并请求锁住这个文件。成功获取锁的服务器当选主服务器,并且在文件中写入自己的地址。其他服务器通过读取文件中的数据,获得主服务器的地址信息。以chubby为典型代表的分布式锁服务系统,是针对服务器端的设计,由服务器向外提供服务。鉴于此类集中式锁服务都是基于中心服务器,在运行过程中存在很多不足,最典型的就是单点失效和性能瓶颈问题。一旦中心服务器出现故障不能够正常提供锁服务,整个网络的运行必将受到影响,严重时导致网络瘫痪。集中式锁服务的单点瓶颈问题比较严重。并且对于纯P2P网络来说,各节点同时作为客户端和服务器端,不存在中心服务器,这就要求能够有一套机制,能够提供完全分散式的锁服务,来保证分布存储在各节点上的数据能够保证一致性。

发明内容
本发明提供了一种 不需中心服务器参与的,完全分散式的分布式存储的数据获取方法。实现本发明目的的分布式存储的数据获取方法,包括如下步骤(I)先检查A锁在本地的状态,如果A锁已经被占用,则执行退避策略,等待随机时延后,再重新获取;(2)若本地A锁状态处于空闲,则将本地A锁置为被占用状态,但此时本节点暂不能使用该锁操作数据A,而是先向网络中发送A锁即将被占用的通告;(3)在发出通告后建立冲突检测定时器,检测互斥锁占用的冲突现象;(4)若在定时器超时之前,收到了其他节点回送的冲突报告,或者收到其他节点发来的获取A锁的通告,则对于本节点来说获取A锁失败,清除本地A锁被占用的标识,向网络中发送释放A锁的通告;并执行退避策略,等待随机时延后再重新获取;在定时器超时之前收到其他节点发来的获取A锁通告,此节点应向通告源发送冲突报告,冲突双方均采用退避策略。(5)若定时器超时之前未收到冲突报告,或其他节点的占用通告,则定时器超时后,此次获取A锁的操作成功,本节点即真正开始持有该锁,并可以对数据A进行操作;待针对数据A的操作完成后,再用步骤(4)的方式释放A锁;为了防止持有A锁的节点在进行数据操作期间意外宕机或掉线,导致锁不能正常被释放而影响其他节点的操作,因此本发明还设计了锁的超时机制,即持有锁的节点在获取到锁后一段时间内必须发出释放该锁的通告,否则在超时后网络中其他节点自动将其本地的锁置为空闲,其他节点即可申请持有该锁。本发明的分布式存储的数据获取方法的有益效果如下本发明的分布式存储的数据获取方法,是针对分布式网络中分布式存储的数据的锁,对于所有节点来说,只有获取到锁才有权操作此项数据。因此该锁是一个网络范围的全局的概念,由于不考虑使用服务器来提供锁服务,所以采用的替代方案是在每个节点处维护此锁的状态。每次有节点获取到该锁后,更改各节点上锁的状态,禁止多个节点同时操作同一项数据。只要所有节点都遵守这一机制,就能够保证在同一时间操作同一数据的节点只有一个。通过这种简单的方法,P2P网络中各节点之间动作协调,有序的操作统一数据,不产生冲突,也不需要增加额外的服务器。


图1为本发明的分布式存储的数据获取方法的流程图。
具体实施例方式如图1所示,本发明的分布式存储的数据获取方法,包括如下步骤(I)先检查A锁在本地的状态,如果A锁已经被占用,则执行退避策略,等待随机时延后,再重新获取;(2)若本地A锁状态处于空闲,则将本地A锁置为被占用状态,但此时本节点暂不能使用该锁操作数据A,而是先向网络中发送A锁即将被占用的通告;(3)在发出通告后建立`
(4)若在定时器超时之前,收到了其他节点回送的冲突报告,或者收到其他节点发来的获取A锁的通告,则对于本节点来说获取A锁失败,清除本地A锁被占用的标识,向网络中发送释放A锁的通告;并执行退避策略,等待随机时延后再重新获取;(5)若定时器超时之前未收到冲突报文,则定时器超时后,此次获取A锁的操作成功,本节点即真正开始持有该锁,并可以对数据A进行操作;待针对数据A的操作完成后,再用步骤(4)的方式释放A锁;为了防止持有A锁的节点在进行数据操作期间意外宕机或掉线,导致锁不能正常被释放而影响其他节点的操作,因此本发明还设计了锁的超时机制,即持有锁的节点在获取到锁后一段时间内必须发出释放该锁的通告,否则在超时后网络中其他节点自动将其本地的锁置为空闲,其他节点即可申请持有该锁。本发明的分布式存储的数据获取方法,提供了一种完全分散式的锁机制,各节点维护同一锁的状态信息。通过检测本地锁状态并与网络中其他节点进行协商获取锁的持有权。当冲突发生时,冲突双方均采用退避策略,分别等待随机时延后再进行锁的获取。并且设计了超时机制,来避免某一节点因故障而过长时间持有锁,不能正常释放的情况。通过这种简单的完全分散式的锁机制,实现了不同节点对同一数据操作的串行化,保证了分布式数据的一致性。以Chubby系统为代表的分布式锁服务系统,在提供锁服务时由中心服务器来进行多节点的动作的协调。而本发明所述的分布式锁,秉承完全去中心化的思想,取缔了中心服务器的角色,只需各节点都遵守相同的协调机制,通过简单的信息交互即可协调各节点的动作达到同步的目的。并且此完全分布式锁实现简单,尤其适用于没有中心服务器的完全分布式网络。上面所述的实施例仅仅是对本发明的优选实施方式进行描述,并非对本发明的范围进行限定,在不脱离本发明设计精神前提下,本领域普通工程技术人员对本发明技术方案做出的各种变形和改 进,均应落入本发明的权利要求书确定的保护范围内。
权利要求
1.一种分布式存储的数据获取方法,包括如下步骤 (1)先检查A锁在本地的状态,如果A锁已经被占用,则执行退避策略,等待随机时延后,再重新获取; (2)若本地A锁状态处于空闲,则将本地A锁置为被占用状态,但此时本节点暂不能使用该锁操作数据A,而是先向网络中发送A锁即将被占用的通告; (3)在发出通告后建立冲突检测定时器,检测互斥锁占用的冲突现象; (4)若在定时器超时之前,收到了其他节点回送的冲突报告,或者收到其他节点发来的获取A锁的通告,则对于本节点来说获取A锁失败,清除本地A锁被占用的标识,向网络中发送释放A锁的通告;并执行退避策略,等待随机时延后再重新获取; 在定时器超时之前收到其他节点发来的获取A锁通告,此节点应向通告源发送冲突报告,冲突双方均采用退避策略。
(5)若定时器超时之前未收到冲突报告,或其他节点的占用通告,则定时器超时后,此次获取A锁的操作成功,本节点即真正开始持有该锁,并可以对数据A进行操作;待针对数据A的操作完成后,再用步骤(4)的方式释放A锁;为了防止持有A锁的节点在进行数据操作期间意外宕机或掉线,导致锁不能正常被释放而影响其他节点的操作,因此本发明还设计了锁的超时机制,即持有锁的节点在获取到锁后一段时间内必须发出释放该锁的通告,否则在超时后网络中其他节点自动将其本地的锁置为空闲,其他节点即可申请持有该锁。
全文摘要
本发明提供了一种不需中心服务器参与的,完全分散式的分布式存储的数据获取方法,包括如下步骤(1)先检查A锁在本地的状态,如果A锁已经被占用,则执行退避策略,等待随机时延后,再重新获取;(2)若本地A锁状态处于空闲,则将本地A锁置为被占用状态,但此时本节点暂不能使用该锁操作数据A,而是先向网络中发送A锁即将被占用的通告;(3)在发出通告后建立冲突检测定时器,检测互斥锁占用的冲突现象。本发明的分布式存储的数据获取方法,将P2P网络中各节点之间动作协调,有序的操作同一数据,不产生冲突,也不需要增加额外的服务器。
文档编号H04L29/08GK103067471SQ20121056382
公开日2013年4月24日 申请日期2012年12月24日 优先权日2012年12月24日
发明者方沛宇, 杨哲, 杜亚梅 申请人:北京华科力扬科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1