一种分布式锁服务方法、获取方法及相应装置制造方法及图纸

技术编号:15437028 阅读:36 留言:0更新日期:2017-05-25 19:14
本申请提供了一种分布式锁服务方法、获取方法及相应装置。其中,所述分布式锁服务方法包括:分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本;所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理。

Distributed lock service method, acquisition method and corresponding device

The present application provides a distributed lock service method, acquisition method and corresponding device. Among them, including the distributed lock service method in a distributed system to obtain node process of distributed lock or the current node has held the distributed lock process, and this process includes receiving real-time node to be acquired or already held by the distributed phase corresponding to the latest version of the data lock; the lock release level identifies each of the nodes to process the same distributed lock requests initiated to obtain priority; real time according to the node receiving process including the latest lock version of the data, and the process of node pre generated exclusive lock version, judging whether the node process the latest version is higher than that of the lock the exclusive lock version; the node according to the node of the current process to process the distributed lock acquisition, and the judgment result is higher than the release. Appropriate processing for placing, acquiring, or waiting for the distributed locks.

【技术实现步骤摘要】
一种分布式锁服务方法、获取方法及相应装置
本申请涉及分布式应用领域,尤其涉及一种分布式锁服务方法、获取方法及相应装置。
技术介绍
在分布式应用中,往往会遇到多个进程提供同一服务的情况,这些进程用于对共享资源直接发起访问,或对能够直接访问共享资源的相应任务或作业进行管理控制。因此在访问共享资源或对相应任务以及作业进行管理控制的时候,还需要采用一定手段来防止各进程彼此间的干扰,从而保证服务和数据的一致性,分布式锁机制便是通常采用的一种手段,即进程在对共享资源直接发起访问前,或对能够直接访问共享资源的各任务以及作业进行管理控制前,需获取与所述共享资源或所述任务以及作业对应的唯一的分布式锁,由此来保证服务和数据的一致性。同时,在分布式应用中,高可用性集群(HA)是一种有效保证业务连续性的分布式解决方案,对应该解决方案,基于高可用性的分布式锁(HAlock)是常用的一种分布式锁,例如基于Zookeeper(一种开源的分布式应用程序协调服务系统)实现的分布式锁。在应用了基于高可用性的分布式锁的大型分布式系统中,常见的一种场景是将系统中用于对共享资源直接发起访问,或对能够直接访问共享资源的相应任务或作业进行管理控制的进程,分布在分布式系统中的各个机器节点上,则这些进程往往作为节点进程由分布式系统的调度器管理,并提供直接访问共享资源的服务,或提供对能够直接访问共享资源的相应任务或作业进行管理控制的服务。在这种场景下,若由于网络或节点内硬件不能稳定运行等原因,需要令原进程退出并放锁,且将原进程所提供的服务迁移至新进程时,若是因为网络故障导致原节点进程与分布式系统的调度器的通信处于故障状态而发生的迁移,那么原节点进程一直无法收到退出命令,因此它持有的锁也不会退出或超时,同时,新节点进程将一直无法获得锁,进而导致系统无法提供相应的服务。另外,对于应用了基于高可用性的分布式锁的大型分布式系统,进程重启是一种最常见的故障场景,该故障需要重启后的进程能够立即拿到锁,基于高可用性的分布式锁便能够有效的实现该功能。基于高可用性的分布式锁实现该功能的具体方法是给锁的持有者维护一定时间段的租约期,在租约期内,其它人无法拿到锁,从而保证重启后的原进程能够立即拿到锁。但由于租约期的存在,若是发生将原进程所提供的服务迁移至新进程的情况,则新进程需要等待原进程所持有的锁超时后,即超过租约期,才能拿到锁,导致迁移过程中原进程不能快速放锁,并且在等待时间内系统无法提供相应的服务。综上,在原节点进程所提供的服务迁移至另一节点进程时,或原节点进程重启时,或其它场景下需要原来持有分布式锁的节点进程或其它种类进程主动快速退出且完成放锁处理时,在传统的分布式锁机制下,原节点进程或原来持有分布式锁的各类进程必须等待当前持有的分布式锁超时或收到退出命令才能执行退出操作,进而完成放锁处理,该方法有如下缺点:1、需要重新获得分布式锁的进程或节点进程不能快速获得锁,导致系统长时间不能提供相应的服务。2、当原进程或原节点进程不能正常退出时,或将导致多个进程提供同一服务,或使新的进程无法拿到锁,从而使服务和数据的一致性无法保证,或使系统不能提供相应的服务,从而导致系统的服务故障和数据的处理错误。
技术实现思路
本申请提供一种分布式锁服务方法、获取方法及相应装置,以解决现有的分布式锁机制不能使需要重新获得分布式锁的进程或节点进程不能快速获得锁,以及当前持有分布式锁的进程或节点进程不能正常退出的问题。为解决上述技术问题,本申请提供的分布式锁服务方法,包括:分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本;所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理。优选的,所述的所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理,具体包括:若所述节点进程当前对所述分布式锁的获取状态为已持有所述分布式锁,则执行以下步骤:若所述是否高于的判断结果为是,则所述节点进程释放其持有的所述分布式锁,若所述是否高于的判断结果为否,则所述节点进程继续持有所述分布式锁,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据;若所述节点进程当前对所述分布式锁的获取状态为待获取所述分布式锁,则执行以下步骤:若所述是否高于的判断结果为是,则所述节点进程在等锁队列中等待,若所述是否高于的判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据。可选的,在所述的所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理的具体步骤中,对于其中的所述若所述是否高于的判断结果为否,则所述节点进程继续持有所述分布式锁,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据来说,若所述节点进程持有所述分布式锁,且继续持有所述分布式锁直至所述节点进程完成该节点进程被分配的所有服务后,包括:所述分布式系统删除与所述分布式锁相对应的所述最新锁版本数据。优选的,所述预先生成的所述节点进程的专有锁版本,具体包括:分布式系统在生成所述节点进程的同时,根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本;所述全局状态变量用于记录所述分布式锁的最新锁版本的值;和/或,分布式系统在已持有分布式锁的所述节点进程重启时,保留所述节点进程重启前所专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。可选的,所述分布式系统在生成所述节点进程的同时,根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本,包括:分布式系统在生成所述节点进程的同时,或在已持有分布式锁的所述节点进程重启的同时,读取所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量;判断所述分布式锁的全局状态变量是否存在;若所述全局状态变量不存在,则生成和初始化所述全局状态变量,并进入下一步,若所述全局状态变量存在,则将所述全局状态变量的值自增1,并进入下一步;以所述全局状态变量的值为锁版本的值,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。可选的,所述生成和初始化所述全局状态变量,具体包括:生成所述全局状态变量;以所述分布式系统的当前时间戳作为初始值,初始化所述全局状态变量。优选的,在所述根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进本文档来自技高网
...
一种分布式锁服务方法、获取方法及相应装置

【技术保护点】
一种分布式锁服务方法,其特征在于,所述方法包括:分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本;所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理。

【技术特征摘要】
1.一种分布式锁服务方法,其特征在于,所述方法包括:分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本;所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理。2.根据权利要求1所述的分布式锁服务方法,其特征在于,所述的所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理,具体包括:若所述节点进程当前对所述分布式锁的获取状态为已持有所述分布式锁,则执行以下步骤:若所述是否高于的判断结果为是,则所述节点进程释放其持有的所述分布式锁,若所述是否高于的判断结果为否,则所述节点进程继续持有所述分布式锁,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据;若所述节点进程当前对所述分布式锁的获取状态为待获取所述分布式锁,则执行以下步骤:若所述是否高于的判断结果为是,则所述节点进程在等锁队列中等待,若所述是否高于的判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据。3.根据权利要求2所述的分布式锁服务方法,其特征在于,在所述的所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理的具体步骤中,对于其中的所述若所述是否高于的判断结果为否,则所述节点进程继续持有所述分布式锁,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据来说,若所述节点进程持有所述分布式锁,且继续持有所述分布式锁直至所述节点进程完成该节点进程被分配的所有服务后,包括:所述分布式系统删除与所述分布式锁相对应的所述最新锁版本数据。4.根据权利要求2所述的分布式锁服务方法,其特征在于,所述预先生成的所述节点进程的专有锁版本,具体包括:分布式系统在生成所述节点进程的同时,根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本;所述全局状态变量用于记录所述分布式锁的最新锁版本的值;和/或,分布式系统在已持有分布式锁的所述节点进程重启时,保留所述节点进程重启前所专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。5.根据权利要求4所述的分布式锁服务方法,其特征在于,所述分布式系统在生成所述节点进程的同时,根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本,包括:分布式系统在生成所述节点进程的同时,或在已持有分布式锁的所述节点进程重启的同时,读取所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量;判断所述分布式锁的全局状态变量是否存在;若所述全局状态变量不存在,则生成和初始化所述全局状态变量,并进入下一步,若所述全局状态变量存在,则将所述全局状态变量的值自增1,并进入下一步;以所述全局状态变量的值为锁版本的值,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。6.根据权利要求5所述的分布式锁服务方法,其特征在于,所述生成和初始化所述全局状态变量,具体包括:生成所述全局状态变量;以所述分布式系统的当前时间戳作为初始值,初始化所述全局状态变量。7.根据权利要求6所述的分布式锁服务方法,其特征在于,在所述根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本的步骤中,判断的具体步骤是:判断所述节点进程实时接收的所述最新锁版本的值是否大于所述节点进程的所述专有锁版本的值;若大于,则表示所述最新锁版本高于所述专有锁版本;若不大于,则表示所述最新锁版本不高于所述专有锁版本。8.根据权利要求2所述的分布式锁服务方法,其特征在于,在所述实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据的步骤中,所述最新锁版本的数据具体是以数据文件的形式被存储记录;相应的,所述分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据,包括:分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,订阅所述数据文件的相应数据;所述订阅,是指用于关联所述节点进程与所述数据文件中与该节点进程对应的所述最新锁版本数据,即通过订阅,所述节点进程能够对与之对应的所述最新锁版本数据发起写操作,且当与之对应的所述最新锁版本数据发生更新时,所述节点进程能够实时得到更新后的所述最新锁版本数据;所述节点进程实时接收其订阅的所述数据文件中的数据,即实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据。9.根据权利要求8所述的分布式锁服务方法,其特征在于,所述的所述最新锁版本的数据具体是以数据文件的形式被存储记录,是指与各个分布式锁对应的最新锁版本的数据分别以单独的数据文件的形式被存储记录,即存储所述最新锁版本数据的数据文件与所述分布式锁一一对应。10.根据权利要求9所述的分布式锁服务方法,其特征在于,在所述根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本的步骤前,执行以下步骤:根据所述节点进程实时接收的订阅数据,判断与所述节点进程订阅的数据对应的所述数据文件是否存在;若不存在,则新建存储相应最新锁版本数据的数据文件,继而执行所述根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本的步骤;若存在,则执行所述根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本的步骤。11.根据权利要求9所述的分布式锁服务方法,其特征在于,在所述的所述节点进程实时接收其订阅的所述数据文件中的数据的步骤中,所述节点进程与所述数据文件间的数据传输所使用的网络通道,与所述节点进程与所述分布式锁的提供者间的数据传输所使用的网络通道相同。12.一种分布式锁获取方法,其特征在于,所述方法包括:分布式系统中待获取分布式锁的节点进程,发起获取与本节点进程待提供的服务所需资源对应的分布式锁的请求;根据所述请求中关于待获取的所述分布式锁的相关信息,实时接收当前存储的与所述分布式锁对应的最新锁版本数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本;若判断结果为是,则将所述节点进程加入等锁队列中等待;若判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理。13.根据权利要求12所述的分布式锁获取方法,其特征在于,所述的所述节点进程进行获取所述分布式锁的相应处理,包括:所述节点进程将所述节点进程的所述专有锁版本作为当前的最新锁版本,并以该当前的最新锁版本为依据更新所述最新锁版本数据;所述分布式系统将更新后的所述最新锁版本数据推送给当前已持有所述分布式锁的或其它等待获取所述分布式锁的各节点进程;基于传统分布式锁获取机制,所述节点进程尝试获取所述分布式锁,进而提供服务。14.根据权利要求13所述的分布式锁获取方法,其特征在于,所述预先生成的关于所述分布式锁的所述节点进程的专有锁版本,具体包括:分布式系统在生成所述节点进程的同时,根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本;所述全局状态变量用于记录所述分布式锁的最新锁版本的值;和/或,分布式系统在已持有分布式锁的所述节点进程重启时,保留所述节点进程重启前所专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。15.根据权利要求14所述的分布式锁获取方法,其特征在于,所述分布式系统在生成所述节点进程的同时,根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本,包括:分布式系统在生成所述节点进程的同时,或在已持有分布式锁的所述节点进程重启的同时,读取所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量;判断所述分布式锁的全局状态变量是否存在;若所述全局状态变量不存在,则生成和初始化所述全局状态变量,并进入下一步,若所述全局状态变量存在,则将所述全局状态变量的值自增1,并进入下一步;以所述全局状态变量的值为锁版本的值,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。1...

【专利技术属性】
技术研发人员:任奕琳张卓陶阳宇李超陆一峰
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1