CN106708608A - 一种分布式锁服务方法、获取方法及相应装置 - Google Patents
一种分布式锁服务方法、获取方法及相应装置 Download PDFInfo
- Publication number
- CN106708608A CN106708608A CN201510783915.9A CN201510783915A CN106708608A CN 106708608 A CN106708608 A CN 106708608A CN 201510783915 A CN201510783915 A CN 201510783915A CN 106708608 A CN106708608 A CN 106708608A
- Authority
- CN
- China
- Prior art keywords
- lock
- node processes
- distributed
- version
- newest
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/465—Distributed object oriented systems
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
- Multi Processors (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种分布式锁服务方法、获取方法及相应装置。其中,所述分布式锁服务方法包括:分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本;所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理。
Description
技术领域
本申请涉及分布式应用领域,尤其涉及一种分布式锁服务方法、获取方法及相应装置。
背景技术
在分布式应用中,往往会遇到多个进程提供同一服务的情况,这些进程用于对共享资源直接发起访问,或对能够直接访问共享资源的相应任务或作业进行管理控制。因此在访问共享资源或对相应任务以及作业进行管理控制的时候,还需要采用一定手段来防止各进程彼此间的干扰,从而保证服务和数据的一致性,分布式锁机制便是通常采用的一种手段,即进程在对共享资源直接发起访问前,或对能够直接访问共享资源的各任务以及作业进行管理控制前,需获取与所述共享资源或所述任务以及作业对应的唯一的分布式锁,由此来保证服务和数据的一致性。
同时,在分布式应用中,高可用性集群(HA)是一种有效保证业务连续性的分布式解决方案,对应该解决方案,基于高可用性的分布式锁(HA lock)是常用的一种分布式锁,例如基于Zookeeper(一种开源的分布式应用程序协调服务系统)实现的分布式锁。在应用了基于高可用性的分布式锁的大型分布式系统中,常见的一种场景是将系统中用于对共享资源直接发起访问,或对能够直接访问共享资源的相应任务或作业进行管理控制的进程,分布在分布式系统中的各个机器节点上,则这些进程往往作为节点进程由分布式系统的调度器管理,并提供直接访问共享资源的服务,或提供对能够直接访问共享资源的相应任务或作业进行管理控制的服务。在这种场景下,若由于网络或节点内硬件不能稳定运行等原因,需要令原进程退出并放锁,且将原进程所提供的服务迁移至新进程时,若是因为网络故障导致原节点进程与分布式系统的调度器的通信处于故障状态而发生的迁移,那么原节点进程一直无法收到退出命令,因此它持有的锁也不会退出或超时,同时,新节点进程将一直无法获得锁,进而导致系统无法提供相应的服务。另外,对于应用了基于高可用性的分布式锁的大型分布式系统,进程重启是一种最常见的故障场景,该故障需要重启后的进程能够立即拿到锁,基于高可用性的分布式锁便能够有效的实现该功能。基于高可用性的分布式锁实现该功能的具体方法是给锁的持有者维护一定时间段的租约期,在租约期内,其它人无法拿到锁,从而保证重启后的原进程能够立即拿到锁。但由于租约期的存在,若是发生将原进程所提供的服务迁移至新进程的情况,则新进程需要等待原进程所持有的锁超时后,即超过租约期,才能拿到锁,导致迁移过程中原进程不能快速放锁,并且在等待时间内系统无法提供相应的服务。
综上,在原节点进程所提供的服务迁移至另一节点进程时,或原节点进程重启时,或其它场景下需要原来持有分布式锁的节点进程或其它种类进程主动快速退出且完成放锁处理时,在传统的分布式锁机制下,原节点进程或原来持有分布式锁的各类进程必须等待当前持有的分布式锁超时或收到退出命令才能执行退出操作,进而完成放锁处理,该方法有如下缺点:
1、需要重新获得分布式锁的进程或节点进程不能快速获得锁,导致系统长时间不能提供相应的服务。
2、当原进程或原节点进程不能正常退出时,或将导致多个进程提供同一服务,或使新的进程无法拿到锁,从而使服务和数据的一致性无法保证,或使系统不能提供相应的服务,从而导致系统的服务故障和数据的处理错误。
发明内容
本申请提供一种分布式锁服务方法、获取方法及相应装置,以解决现有的分布式锁机制不能使需要重新获得分布式锁的进程或节点进程不能快速获得锁,以及当前持有分布式锁的进程或节点进程不能正常退出的问题。
为解决上述技术问题,本申请提供的分布式锁服务方法,包括:
分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;
根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本;
所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理。
优选的,所述的所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理,具体包括:
若所述节点进程当前对所述分布式锁的获取状态为已持有所述分布式锁,则执行以下步骤:
若所述是否高于的判断结果为是,则所述节点进程释放其持有的所述分布式锁,
若所述是否高于的判断结果为否,则所述节点进程继续持有所述分布式锁,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据;
若所述节点进程当前对所述分布式锁的获取状态为待获取所述分布式锁,则执行以下步骤:
若所述是否高于的判断结果为是,则所述节点进程在等锁队列中等待,
若所述是否高于的判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据。
可选的,在所述的所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理的具体步骤中,对于其中的所述若所述是否高于的判断结果为否,则所述节点进程继续持有所述分布式锁,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据来说,若所述节点进程持有所述分布式锁,且继续持有所述分布式锁直至所述节点进程完成该节点进程被分配的所有服务后,包括:
所述分布式系统删除与所述分布式锁相对应的所述最新锁版本数据。
优选的,所述预先生成的所述节点进程的专有锁版本,具体包括:
分布式系统在生成所述节点进程的同时,根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本;所述全局状态变量用于记录所述分布式锁的最新锁版本的值;和/或,
分布式系统在已持有分布式锁的所述节点进程重启时,保留所述节点进程重启前所专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。
可选的,所述分布式系统在生成所述节点进程的同时,根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本,包括:
分布式系统在生成所述节点进程的同时,或在已持有分布式锁的所述节点进程重启的同时,读取所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量;
判断所述分布式锁的全局状态变量是否存在;
若所述全局状态变量不存在,则生成和初始化所述全局状态变量,并进入下一步,若所述全局状态变量存在,则将所述全局状态变量的值自增1,并进入下一步;
以所述全局状态变量的值为锁版本的值,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。
可选的,所述生成和初始化所述全局状态变量,具体包括:
生成所述全局状态变量;
以所述分布式系统的当前时间戳作为初始值,初始化所述全局状态变量。
优选的,在所述根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本的步骤中,判断的具体步骤是:
判断所述节点进程实时接收的所述最新锁版本的值是否大于所述节点进程的所述专有锁版本的值;
若大于,则表示所述最新锁版本高于所述专有锁版本;
若不大于,则表示所述最新锁版本不高于所述专有锁版本。
可选的,在所述实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据的步骤中,所述最新锁版本的数据具体是以数据文件的形式被存储记录;
相应的,所述分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据,包括:
分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,订阅所述数据文件的相应数据;所述订阅,是指用于关联所述节点进程与所述数据文件中与该节点进程对应的所述最新锁版本数据,即通过订阅,所述节点进程能够对与之对应的所述最新锁版本数据发起写操作,且当与之对应的所述最新锁版本数据发生更新时,所述节点进程能够实时得到更新后的所述最新锁版本数据;
所述节点进程实时接收其订阅的所述数据文件中的数据,即实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据。
可选的,所述的所述最新锁版本的数据具体是以数据文件的形式被存储记录,是指与各个分布式锁对应的最新锁版本的数据分别以单独的数据文件的形式被存储记录,即存储所述最新锁版本数据的数据文件与所述分布式锁一一对应。
可选的,在所述根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本的步骤前,执行以下步骤:
根据所述节点进程实时接收的订阅数据,判断与所述节点进程订阅的数据对应的所述数据文件是否存在;
若不存在,则新建存储相应最新锁版本数据的数据文件,继而执行所述根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本的步骤;
若存在,则执行所述根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本的步骤。
可选的,在所述的所述节点进程实时接收其订阅的所述数据文件中的数据的步骤中,所述节点进程与所述数据文件间的数据传输所使用的网络通道,与所述节点进程与所述分布式锁的提供者间的数据传输所使用的网络通道相同。
相应的,本申请还提供分布式锁获取方法,包括:
分布式系统中待获取分布式锁的节点进程,发起获取与本节点进程待提供的服务所需资源对应的分布式锁的请求;
根据所述请求中关于待获取的所述分布式锁的相关信息,实时接收当前存储的与所述分布式锁对应的最新锁版本数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;
根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本;
若判断结果为是,则将所述节点进程加入等锁队列中等待;
若判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理。
优选的,所述的所述节点进程进行获取所述分布式锁的相应处理,包括:
所述节点进程将所述节点进程的所述专有锁版本作为当前的最新锁版本,并以该当前的最新锁版本为依据更新所述最新锁版本数据;
所述分布式系统将更新后的所述最新锁版本数据推送给当前已持有所述分布式锁的或其它等待获取所述分布式锁的各节点进程;
基于传统分布式锁获取机制,所述节点进程尝试获取所述分布式锁,进而提供服务。
优选的,所述预先生成的关于所述分布式锁的所述节点进程的专有锁版本,具体包括:
分布式系统在生成所述节点进程的同时,根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本;所述全局状态变量用于记录所述分布式锁的最新锁版本的值;和/或,
分布式系统在已持有分布式锁的所述节点进程重启时,保留所述节点进程重启前所专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。
可选的,所述分布式系统在生成所述节点进程的同时,根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本,包括:
分布式系统在生成所述节点进程的同时,或在已持有分布式锁的所述节点进程重启的同时,读取所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量;
判断所述分布式锁的全局状态变量是否存在;
若所述全局状态变量不存在,则生成和初始化所述全局状态变量,并进入下一步,若所述全局状态变量存在,则将所述全局状态变量的值自增1,并进入下一步;
以所述全局状态变量的值为锁版本的值,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。
可选的,所述生成和初始化所述全局状态变量,具体包括:
生成所述全局状态变量;
以所述分布式系统的当前时间戳作为初始值,初始化所述全局状态变量。
可选的,在所述根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本的步骤中,判断的具体步骤是:
判断所述节点进程实时接收的所述最新锁版本的值是否大于所述节点进程的所述专有的锁版本的值;
若大于,则表示所述最新锁版本高于所述专有锁版本;
若不大于,则表示所述最新锁版本不高于所述专有锁版本。
可选的,在所述实时接收当前存储的与所述分布式锁对应的最新锁版本数据的步骤中,所述最新锁版本数据具体是以数据文件的形式被存储记录;
相应的,所述根据所述请求中关于待获取的所述分布式锁的相关信息,实时接收当前存储的与所述分布式锁对应的最新锁版本数据,包括:
所述节点进程订阅所述数据文件的相应数据;所述订阅,是指用于关联所述节点进程与所述数据文件中与该节点进程对应的所述最新锁版本数据,即通过订阅,所述节点进程能够对与之对应的所述最新锁版本数据发起写操作,且当与之对应的所述最新锁版本数据发生更新时,所述节点进程能够实时得到更新后的所述最新锁版本数据,
所述节点进程实时接收其订阅的所述数据文件中的数据,即实时接收当前存储的与所述分布式锁对应的最新锁版本数据;
相应的,所述的所述节点进程将所述节点进程的所述专有锁版本作为当前的最新锁版本,并以该当前的最新锁版本为依据更新所述最新锁版本数据,具体是指将所述节点进程的所述专有锁版本作为当前的最新锁版本,并以该当前的最新锁版本为依据更新所述数据文件中的相应最新锁版本数据。
可选的,所述的所述最新锁版本数据具体是以数据文件的形式被存储记录,是指与各个分布式锁对应的最新锁版本数据分别以单独的数据文件的形式被存储记录,即存储所述最新锁版本数据的数据文件与所述分布式锁一一对应。
可选的,所述的所述分布式系统将更新后的所述最新锁版本数据推送给当前已持有所述分布式锁的或其它等待获取所述分布式锁的各节点进程,具体是指当存储有所述最新锁版本数据的所述数据文件发生更新时,所述分布式系统将更新后的所述最新锁版本数据推送给当前已持有所述分布式锁的或其它等待获取所述分布式锁的各节点进程,即订阅所述数据文件的各节点进程能够实时得到更新后的所述当前最新锁版本数据。
可选的,在所述根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本的步骤前,执行以下步骤:
根据所述节点进程实时获取的订阅数据,判断与所述节点进程订阅的数据对应的所述数据文件是否存在;
若不存在,则新建存储相应最新锁版本数据的数据文件,继而执行所述根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本的步骤;
若存在,则执行所述根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本的步骤。
可选的,在所述的所述分布式系统将更新后的所述最新锁版本数据推送给当前已持有所述分布式锁的或其它等待获取所述分布式锁的各节点进程的步骤后,若所述最新锁版本数据被推送给所述的其它等待获取所述分布式锁的各节点进程,则该些等待获取所述分布式锁的各节点进程依次执行权利要求10中所述的以下步骤:
根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本;
若判断结果为是,则将所述节点进程加入等锁队列中等待;
若判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理。
相应的,本申请还提供一种分布式锁服务装置,包括:
最新锁版本数据接收单元,用于分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;
锁版本判断单元,用于根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本;
分布式锁处理单元,用于所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理。
优选的,所述分布式锁处理单元包括:
分布式锁第一处理子单元,用于若判断所述节点进程当前对所述分布式锁的获取状态为已持有所述分布式锁,且所述是否高于的判断结果为是时,则所述节点进程释放其持有的所述分布式锁;
分布式锁第二处理子单元,用于若判断所述节点进程当前对所述分布式锁的获取状态为已持有所述分布式锁,且所述是否高于的判断结果为否时,则所述节点进程继续持有所述分布式锁,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据;
分布式锁第三处理子单元,用于若判断所述节点进程当前对所述分布式锁的获取状态为待获取所述分布式锁,且所述是否高于的判断结果为是时,则所述节点进程在等锁队列中等待;
分布式锁第四处理子单元,用于若判断所述节点进程当前对所述分布式锁的获取状态为待获取所述分布式锁,且所述是否高于的判断结果为否时,则所述节点进程进行获取所述分布式锁的相应处理,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据。
相应的,本申请还提供一种分布式锁获取装置,包括:
请求单元,用于分布式系统中待获取分布式锁的节点进程,发起获取与本节点进程待提供的服务所需资源对应的分布式锁的请求;
最新锁版本数据接收单元,用于根据所述请求中关于待获取的所述分布式锁的相关信息,实时接收当前存储的与所述分布式锁对应的最新锁版本数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;
分布式锁判断单元,用于根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本;
分布式锁处理单元,用于若在分布式锁判断单元中的判断结果为是,则将所述节点进程加入等锁队列中等待;若在分布式锁判断单元中的判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理。
优选的,在所述分布式锁处理单元中,所述若在分布式锁判断单元中的判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理,包括:
若判断结果为否,则所述节点进程将所述节点进程的所述专有锁版本作为当前的最新锁版本,并以该当前的最新锁版本为依据更新所述最新锁版本数据;
所述分布式系统将更新后的所述最新锁版本数据推送给当前已持有所述分布式锁的或其它等待获取所述分布式锁的各节点进程;
基于传统分布式锁获取机制,所述节点进程尝试获取所述分布式锁,进而提供服务。
相应的,本申请还提供一种分布式锁服务系统,包括:
所述系统采用节点进程管理分布式系统中的任务或作业,当所述系统启动新的节点进程接替原节点进程提供相同的服务,进而接替原节点进程管理分布式系统中的任务或作业时,各所述节点进程所应用的分布式锁服务,以便获取或释放所述分布式锁时,采用权利要求1至22中任一所述的分布式锁服务方法或分布式锁获取方法,从而停止或提供相应服务。
相应的,本申请还提供一种电子设备,包括:
显示器;
处理器;以及
存储器,所述存储器被配置成存储分布式锁服务装置,和/或,分布式锁获取装置,
所述分布式锁服务装置被所述处理器执行时,执行如下步骤:
分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;
根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本;
所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理;
所述分布式锁获取装置被所述处理器执行时,执行如下步骤:
分布式系统中待获取分布式锁的节点进程,发起获取与本节点进程待提供的服务所需资源对应的分布式锁的请求;
根据所述请求中关于待获取的所述分布式锁的相关信息,实时接收当前存储的与所述分布式锁对应的最新锁版本数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;
根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本;
若判断结果为是,则将所述节点进程加入等锁队列中等待;
若判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理。
本申请提供的分布式锁服务方法,主要包括分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;进而根据各所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的各所述节点进程专有锁版本,各所述节点进程分别判断本节点进程实时接收的所述最新锁版本是否高于本节点进程的所述专有锁版本;继而各所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理。这种方法应用在分布式系统中,使得分布式系统中各进程能实时享有分布式锁的使用信息,从而当需要当前持有分布式锁的进程主动快速退出时或服务发生迁移的情况下,当前持有分布式锁的进程能够主动快速退出服务,并将其持有的分布式锁快速释放,从而使需要重新获得分布式锁的进程快速得到锁。尤其是当由于网络故障导致原进程与分布式系统的调度器的通信处于故障状态而发生迁移时,或当网络故障导致原进程与分布式系统的调度器的通信处于故障状态而需要原进程主动退出时,当前持有分布式锁的进程不需要得到退出命令就能够主动退出服务,继而快速完成相应的放锁处理,从而使新的进程快速获取相应的分布式锁,进一步保证了服务和数据的一致性,以及系统的可靠运行。
附图说明
图1是本申请第一实施例提供的分布式锁服务方法的流程示意图。
图2是第一实施例中实时接收包含最新锁版本的数据的步骤的具体实施方式的流程图。
图3是本申请第二实施例提供的分布式锁获取方法的流程示意图。
图4是第二实施例中实时接收包含最新锁版本的数据的步骤的具体实施方式的流程图。
图5是第二实施例中所述节点进程进行获取所述分布式锁的相应处理的步骤的具体实施方式的流程图。
图6是本申请第三实施例提供的分布式锁服务装置的流程示意图。
图7是本申请第四实施例提供的分布式锁获取装置的流程示意图。
图8是本申请第五实施例提供的分布式锁服务系统的流程示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本申请中,分别提供了一种分布式锁服务方法、获取方法及相应装置,在下面的实施例中逐一进行详细说明。本实施例假定用于分布式系统中,各节点进程提供直接访问共享资源的服务,或提供对能够直接访问共享资源的相应任务或作业进行管理控制的服务这一应用场景,以下说明主要结合此应用场景,同时兼顾其他应用场景的情况。
请参考图1,其为本申请第一实施例提供的分布式锁服务方法的流程示意图。所述方法包括如下步骤:
步骤101:分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低。
在本实施例中,所述最新锁版本数据是以数据文件的形式被存储记录。相应的,所述分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据,是通过订阅上述数据文件的方式进行的。图2为第一实施例中实时接收包含最新锁版本的数据的步骤的具体实施方式的流程图。具体步骤包括:
步骤201:分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,订阅所述数据文件的相应数据;所述订阅,是指用于关联所述节点进程与所述数据文件中与该节点进程对应的所述最新锁版本数据,即通过订阅,所述节点进程能够对与之对应的所述最新锁版本数据发起写操作,且当与之对应的所述最新锁版本数据发生更新时,所述节点进程能够实时得到更新后的所述最新锁版本数据。
步骤202:所述节点进程实时接收其订阅的所述数据文件中的数据,即实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据。
通常在分布式系统中,分布式锁由系统中的提供分布式锁服务的组件管理和提供,在本申请中,存储最新锁版本数据的文件也由单独的组件管理。对于本实施例,与各个分布式锁对应的最新锁版本的数据分别以单独的数据文件的形式被存储记录,即存储所述最新锁版本数据的数据文件与所述分布式锁一一对应。这些数据文件由版本数据文件组件统一管理,例如数据文件的新建、更新和删除操作都需要通过版本数据文件组件完成,且各数据文件和各节点进程间的数据传输也通过版本数据文件组件完成。
此外,为了防止在节点进程需要快速释放锁时,恰巧发生与锁版本数据文件组件的网络不通,导致不能获取最新锁版本数据的情况下,本申请所述的方法失效,需要确保所述节点进程与所述数据文件间的数据传输所使用的网络通道,与所述节点进程与所述分布式锁的提供者间的数据传输所使用的网络通道相同。从而,如果所述节点进程与所述锁版本数据文件组件的网络不通,即所述节点进程与所述数据文件间的网络不通时,所述节点进程与所述分布式锁的提供者间的网络通道也不通,进而使所述节点进程的分布式锁超时,随即所述节点进程退出服务并释放锁。
步骤102:根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本。
在本实施例中,节点进程在实时接收到包含最新锁版本的数据后,首先会根据所述节点进程实时接收的订阅数据,判断与所述节点进程订阅的数据对应的所述数据文件是否存在;
若不存在,则新建存储相应最新锁版本数据的数据文件,继而执行所述根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本的步骤;
若存在,则执行所述根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本的步骤。
其中,在上述新建存储相应最新锁版本数据的数据文件时,会将预先生成的本节点进程专有锁版本作为最新锁版本,并将该最新锁版本数据写入该数据文件中。
上述预先生成的各所述节点进程专有锁版本,具体包括:
分布式系统在生成所述节点进程的同时,根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本;所述全局状态变量用于记录所述分布式锁的最新锁版本的值;和/或,
分布式系统在已持有分布式锁的所述节点进程重启时,保留所述节点进程重启前所专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。
其中,上述根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本,具体执行的步骤包括:
102-1-1:分布式系统在生成所述节点进程的同时,或在已持有分布式锁的所述节点进程重启的同时,读取所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量。
102-1-2:判断所述分布式锁的全局状态变量是否存在;
102-1-3:若所述全局状态变量不存在,则生成和初始化所述全局状态变量,并进入下一步,若所述全局状态变量存在,则将所述全局状态变量的值自增1,并进入下一步。
其中,所述生成和初始化所述全局状态变量,具体步骤包括:
102-1-3-1:生成所述全局状态变量。
102-1-3-2:以所述分布式系统的当前时间戳作为初始值,初始化所述全局状态变量。
102-1-4:以所述全局状态变量的值为锁版本的值,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。
在本实施例中,时间戳以64位整数的格式记录,相应的,所述全局状态变量的值也是64位整数的格式,继而生成的锁版本的值也是64位整数的格式。且,每新生成一个锁版本,在原先记录的全局状态变量的值上加1。由此对每个分布式锁而言,分布式系统每生成一个新的进程或重启一个新的进程时,这些进程在需要获取相应的分布式锁时,分布式系统会分别对应各自待获取的分布式锁生成一系列递增的值为64位整数的锁版本,例如生成对应某个分布式锁的从0、1、2开始递增的一组锁版本。
另外,在本实施例中,所述全局状态变量保存在分布式系统负责调度管理的组件中,所述节点进程的生成和重启也由该负责调度管理的组件实施。
在本实施例中,各所述节点进程分别判断本节点进程实时接收的所述最新锁版本是否高于本节点进程的所述专有锁版本,具体步骤是:
102-2-1:判断所述节点进程实时接收的所述最新锁版本的值是否大于所述节点进程的所述专有锁版本的值;
102-2-2:若大于,则表示所述最新锁版本高于所述专有锁版本;
102-2-3:若不大于,则表示所述最新锁版本不高于所述专有锁版本。
步骤103:所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理。
所述相应处理包括:
103-1:若所述节点进程当前对所述分布式锁的获取状态为已持有所述分布式锁,则执行以下步骤:
103-1-1:若所述是否高于的判断结果为是,则所述节点进程释放其持有的所述分布式锁。
此时,由于已持有分布式锁的节点进程会实时接收到包含最新锁版本的数据,且新的节点进程在启动的时候会立即将更高的锁版本更新入相应的存储最新锁版本数据的数据文件。这时候,已持有分布式锁的节点进程由于订阅了相应的数据文件中的数据,会迅速察觉到有更高锁版本的其它节点进程出现,进而主动执行退出服务的命令,并快速的释放其已持有的分布式锁,从而使需要获取分布式锁的有更高锁版本的其它节点进程获取分布式锁。
103-1-2:若所述是否高于的判断结果为否,则所述节点进程继续持有所述分布式锁,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据。
此时,已持有分布式锁的节点进程认为本节点进程的锁版本是最高的,因此本节点进程将继续持有分布式锁,并继续提供服务。同时,在本实施例中,本节点进程会将本节点进程的专有锁版本作为当前最新锁版本,并将该专有锁版本写入并覆盖本节点进程所订阅的数据文件中的相应数据,以更新最新锁版本数据。
需要说明的是,在步骤201所述订阅的具体说明中,所述节点进程能够对与之对应的所述当前最新锁版本数据发起写操作,除了步骤103-1所述的以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据外,还包括当存储最新锁版本数据的数据文件内容被写坏时,则当前已持有分布式锁的节点进程会收到相应数据文件发送的响应,然后把本节点进程的专有锁版本写入并覆盖该数据文件的相应数据。
另外,在执行本步骤时,若所述节点进程持有所述分布式锁,且继续持有所述分布式锁直至所述节点进程完成该节点进程被分配的所有服务后,执行以下步骤:
所述分布式系统删除与所述分布式锁相对应的所述最新锁版本数据。
在本实施例中,在删除上述最新锁版本数据的同时,还应当删除与该最新锁版本数据相关的其它变量,例如相应的上述用于生成锁版本的全局状态变量。从而在所述节点进程所提供的服务全部执行完后,或待访问的共享资源使用完后,删除掉相应的分布式锁,并释放掉相应的分布式锁所占用的系统资源。
103-2:若所述节点进程当前对所述分布式锁的获取状态为待获取所述分布式锁,则执行以下步骤:
103-2-1:若所述是否高于的判断结果为是,则所述节点进程在等锁队列中等待。
此时,待获取分布式锁的节点进程认为本节点进程的锁版本不是最高的,因此本节点进程将在等锁队列中等待,直到本节点进程的锁版本成为最高的。
103-2-2:若所述是否高于的判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据。
此时,所述节点进程认为本节点进程的专有锁版本是最高的锁版本,因此本节点进程便会进行获取所述分布式锁的相应处理,即基于传统分布式锁获取机制,进行获取所述分布式锁的一系列处理,进而提供服务。同时,本节点进程会将本节点进程的专有锁版本作为当前最新锁版本,并将该专有锁版本写入并覆盖本节点进程所订阅的数据文件中的相应数据,以更新最新锁版本数据。
对于步骤103-2,若存在多个待获取所述分布式锁的节点进程同时发起获取同一个分布式锁的请求,则各节点进程在发起请求时,都会订阅与所述分布式锁对应的存储有最新锁版本数据的数据文件,且任何一个节点进程经过判断各自的专有锁版本是否高于当前最新锁版本后,若更新存储最新锁版本数据的数据文件时,其余的各节点进程都会收到被更新的最新锁版本数据,从而再次判断各自的专有锁版本是否高于当前最新锁版本。最终,经过多次这样的判断,只有一个节点进程成为当前有最高锁版本的节点进程,进而该节点进程获取到相应的分布式锁。
综上所述,在某些希望分布式系统中已持有分布式锁的节点进程重启后,能够重新获取该分布式锁的场景下,或在某些希望分布式系统中已持有分布式锁的节点进程快速释放其持有的分布式锁,从而使新的节点进程获取该分布式锁的场景下,本实施例的方法能够使重启后的节点进程或新生成的节点进程获取更高的锁版本,从而使重启后的节点进程或新生成的节点进程以更高的优先级快速获取分布式锁,继而由重启后的节点进程或新生成的节点进程提供相应的服务。
在上述的实施例中,提供了一种分布式锁服务方法,本申请还提供一种分布式锁获取方法。请参看图3,其为本申请第二实施例提供的分布式锁获取方法的流程示意图。所述方法包括如下步骤:
步骤301:分布式系统中待获取分布式锁的节点进程,发起获取与本节点进程待提供的服务所需资源对应的分布式锁的请求。
步骤302:根据所述请求中关于待获取的所述分布式锁的相关信息,实时接收当前存储的与所述分布式锁对应的最新锁版本数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低。
在本实施例中,所述最新锁版本数据具体是以数据文件的形式被存储记录。相应的,所述根据所述请求中关于待获取的所述分布式锁的相关信息,实时接收当前存储的与所述分布式锁对应的最新锁版本数据,是通过订阅上述数据文件的方式进行的。图4为第二实施例中实时接收包含最新锁版本的数据的步骤的具体实施方式的流程图。具体步骤包括:
步骤401:所述节点进程订阅所述数据文件的相应数据;所述订阅,是指用于关联所述节点进程与所述数据文件中与该节点进程对应的所述最新锁版本数据,即通过订阅,所述节点进程能够对与之对应的所述最新锁版本数据发起写操作,且当与之对应的所述最新锁版本数据发生更新时,所述节点进程能够实时得到更新后的所述最新锁版本数据。
步骤402:所述节点进程实时接收其订阅的所述数据文件中的数据,即实时接收当前存储的与所述分布式锁对应的最新锁版本数据。
通常在分布式系统中,分布式锁由系统中的提供分布式锁服务的组件管理和提供,在本申请中,存储最新锁版本数据的文件也由单独的组件管理。对于本实施例,与各个分布式锁对应的最新锁版本数据分别以单独的数据文件的形式被存储记录,即存储所述最新锁版本数据的数据文件与所述分布式锁一一对应。这些数据文件由版本数据文件组件统一管理,例如数据文件的新建、更新和删除操作都需要通过版本数据文件组件完成,且各数据文件和各节点进程间的数据传输也通过版本数据文件组件完成。
步骤303:根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本。
在本实施例中,节点进程在实时接收到包含最新锁版本的数据后,首先会根据所述节点进程实时获取的订阅数据,判断所述节点进程订阅的数据对应的所述数据文件是否存在;
若不存在,则新建存储相应最新锁版本数据的数据文件,继而执行所述根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本的步骤;
若存在,则执行所述根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本的步骤。
其中,在上述新建存储相应最新锁版本数据的数据文件时,会将预先生成的本节点进程专有锁版本作为最新锁版本,并将该最新锁版本数据写入该数据文件中。
上述预先生成的关于所述分布式锁的所述节点进程的专有锁版本,具体包括:
分布式系统在生成所述节点进程的同时,根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本;所述全局状态变量用于记录所述分布式锁的最新锁版本的值;和/或,
分布式系统在已持有分布式锁的所述节点进程重启时,保留所述节点进程重启前所专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。
其中,上述根据所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本,具体执行的步骤包括:
303-1-1:分布式系统在生成所述节点进程的同时,或在已持有分布式锁的所述节点进程重启的同时,读取所述节点进程待提供的服务所需资源对应的分布式锁的全局状态变量。
303-1-2:判断所述分布式锁的全局状态变量是否存在。
303-1-3:若所述全局状态变量不存在,则生成和初始化所述全局状态变量,并进入下一步,若所述全局状态变量存在,则将所述全局状态变量的值自增1,并进入下一步。
其中,所述生成和初始化所述全局状态变量,具体包括:
303-1-3-1:生成所述全局状态变量;
303-1-3-2:以所述分布式系统的当前时间戳作为初始值,初始化所述全局状态变量。
303-1-4:以所述全局状态变量的值为锁版本的值,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。
与本申请第一实施例相同,在本实施例中,生成的是分布对应各个分布式锁的从0、1、2开始递增的值为64位整数的一系列锁版本。
在本实施例中,判断所述最新锁版本是否高于所述节点进程的专有锁版本的具体步骤是:
303-1:判断所述节点进程实时接收的所述最新锁版本的值是否大于所述节点进程的所述专有的锁版本的值。
303-2:若大于,则表示所述最新锁版本高于所述专有锁版本。
303-3:若不大于,则表示所述最新锁版本不高于所述专有锁版本。
步骤304:若步骤303的判断结果为是,则将所述节点进程加入等锁队列中等待;若步骤303的判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理。
下面对所述的所述节点进程进行获取所述分布式锁的相应处理进行具体说明。
图5为第二实施例中所述节点进程进行获取所述分布式锁的相应处理的步骤的具体实施方式的流程图。所述相应处理的步骤包括:
步骤501:所述节点进程将所述节点进程的所述专有锁版本作为当前的最新锁版本,并以该当前的最新锁版本为依据更新所述最新锁版本数据。
在本实施例中,具体是指将所述的所述节点进程的所述专有锁版本作为当前的最新锁版本,并以该当前的最新锁版本为依据更新所述数据文件中的相应最新锁版本数据。
步骤502:所述分布式系统将更新后的所述最新锁版本数据推送给当前已持有所述分布式锁的或其它等待获取所述分布式锁的各节点进程。
在本实施例中,具体是指当存储有所述最新锁版本数据的所述数据文件发生更新时,所述分布式系统将更新后的所述最新锁版本数据推送给当前已持有所述分布式锁的或其它等待获取所述分布式锁的各节点进程,即订阅所述数据文件的各节点进程能够实时得到更新后的所述当前最新锁版本数据。
步骤503:基于传统分布式锁获取机制,所述节点进程尝试获取所述分布式锁,进而提供服务。
在本实施例中,对于步骤503,若所述节点进程成功获取所述分布式锁,且将其提供的所有服务执行完毕后,所述分布式系统会删除与所述分布式锁相对应的所述最新锁版本数据。
另外对于当前存在多个等待获取所述分布式锁的节点进程的场景,即在执行完步骤5-2后,所述最新锁版本数据被推送给所述的其它等待获取所述分布式锁的多个节点进程,则该些等待获取所述分布式锁的各节点进程依次执行权利要求10中所述的以下步骤:
1、根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本;
2、若判断结果为是,则将所述节点进程加入等锁队列中等待;
3、若判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理。
由于存储最新锁版本数据的数据文件每更新一次,都会将更新后的最新锁版本数据发送给订阅该文件中相应数据的节点进程,因此等待获取所述分布式锁的各节点进程会经过多次上述的判断步骤,最终只有一个节点进程成为当前有最高锁版本的节点进程,进而该节点进程获取到相应的分布式锁。
在上述的实施例中,提供了一种分布式锁服务方法,与之相对应的,本申请还提供一种分布式锁服务装置。请参看图6,其为本申请第三实施例提供的分布式锁服务装置的流程示意图。由于装置实施例基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种分布式锁服务装置,包括:最新锁版本数据接收单元601、锁版本判断单元602和分布式锁处理单元603。
所述最新锁版本数据接收单元601,用于分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;
所述锁版本判断单元602,用于根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本;
所述分布式锁处理单元603,用于所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理。
所述分布式锁处理单元603,包括分布式锁第一处理子单元603-1、分布式锁第二处理子单元603-2、分布式锁第三处理子单元603-3和分布式锁第四处理子单元603-4。
所述分布式锁第一处理子单元603-1,用于若判断所述节点进程当前对所述分布式锁的获取状态为已持有所述分布式锁,且所述是否高于的判断结果为是时,则所述节点进程释放其持有的所述分布式锁;
所述分布式锁第二处理子单元603-2,用于若判断所述节点进程当前对所述分布式锁的获取状态为已持有所述分布式锁,且所述是否高于的判断结果为否时,则所述节点进程继续持有所述分布式锁,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据;
所述分布式锁第三处理子单元603-3,用于若判断所述节点进程当前对所述分布式锁的获取状态为待获取所述分布式锁,且所述是否高于的判断结果为是时,则所述节点进程在等锁队列中等待;
所述分布式锁第四处理子单元603-4,用于若判断所述节点进程当前对所述分布式锁的获取状态为待获取所述分布式锁,且所述是否高于的判断结果为否时,则所述节点进程进行获取所述分布式锁的相应处理,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据。
在上述的实施例中,提供了一种分布式锁获取方法,与之相对应的,本申请还提供一种分布式锁获取装置。请参看图7,其为本申请第四实施例提供的分布式锁获取装置的流程示意图。由于装置实施例基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种分布式锁获取装置,包括:请求单元701、最新锁版本数据接收单元702、分布式锁判断单元703和分布式锁处理单元704。
请求单元701,用于分布式系统中待获取分布式锁的节点进程,发起获取与本节点进程待提供的服务所需资源对应的分布式锁的请求;
最新锁版本数据接收单元702,用于根据所述请求中关于待获取的所述分布式锁的相关信息,实时接收当前存储的与所述分布式锁对应的最新锁版本数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;所述全局状态变量用于记录所述分布式锁的最新锁版本的值。
分布式锁判断单元703,用于根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本。
分布式锁处理单元704,用于若在分布式锁判断单元中的判断结果为是,则将所述节点进程加入等锁队列中等待;若在分布式锁判断单元中的判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理。
在所述分布式锁处理单元704中,所述若在分布式锁判断单元中的判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理,包括:
若判断结果为否,则所述节点进程将所述节点进程的所述专有锁版本作为当前的最新锁版本,并以该当前的最新锁版本为依据更新所述最新锁版本数据;
所述分布式系统将更新后的所述最新锁版本数据推送给当前已持有所述分布式锁的或其它等待获取所述分布式锁的各节点进程;
基于传统分布式锁获取机制,所述节点进程尝试获取所述分布式锁,进而提供服务。
在上述的实施例中,分别提供了一种分布式锁服务方法、获取方法,以及相应的装置,与之相对应的,本申请还提供一种分布式锁服务系统。请参看图8,其为本申请第五实施例提供的分布式锁服务系统的流程示意图。由于系统实施例中系统是基于装置实施例中的装置进行部署的,所以描述的比较简单,相关之处参见装置和方法实施例的部分说明即可。下述描述的系统实施例仅仅是示意性的。
所述分布式锁服务系统包括资源调度器、分布式锁提供组件、锁版本数据文件组件、分布式系统中的各节点进程,以及各节点进程管理的任务和作业。所述节点进程用于管理分布式系统中的任务或作业,当所述系统启动新的节点进程接替原节点进程提供相同的服务,进而接替原节点进程管理分布式系统中的任务或作业时,各所述节点进程所应用的分布式锁服务,以便获取或释放所述分布式锁时,采用权利要求1至22中任一所述的分布式锁服务方法或分布式锁获取方法,从而停止或提供相应服务。
上述分别提供了一种分布式锁服务、获取方法及相应装置和系统的实施例,相应的,本申请还提供一种电子设备,该电子设备包括:
显示器;
处理器;以及
存储器,所述存储器被配置成存储分布式锁服务装置,和/或,分布式锁获取装置,
所述分布式锁服务装置被所述处理器执行时,执行如下步骤:
分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;
根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本;
所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理;
所述分布式锁获取装置被所述处理器执行时,执行如下步骤:
分布式系统中待获取分布式锁的节点进程,发起获取与本节点进程待提供的服务所需资源对应的分布式锁的请求;
根据所述请求中关于待获取的所述分布式锁的相关信息,实时接收当前存储的与所述分布式锁对应的最新锁版本数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;
根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本;
若判断结果为是,则将所述节点进程加入等锁队列中等待;
若判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (28)
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,并进入下一步;
以所述全局状态变量的值为锁版本的值,生成所述节点进程专有的用于标识各节点进程向同一个分布式锁发起获取请求的优先级的锁版本。
16.根据权利要求15所述的分布式锁获取方法,其特征在于,所述生成和初始化所述全局状态变量,具体包括:
生成所述全局状态变量;
以所述分布式系统的当前时间戳作为初始值,初始化所述全局状态变量。
17.根据权利要求16所述的分布式锁获取方法,其特征在于,在所述根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本的步骤中,判断的具体步骤是:
判断所述节点进程实时接收的所述最新锁版本的值是否大于所述节点进程的所述专有的锁版本的值;
若大于,则表示所述最新锁版本高于所述专有锁版本;
若不大于,则表示所述最新锁版本不高于所述专有锁版本。
18.根据权利要求13所述的分布式锁获取方法,其特征在于,在所述实时接收当前存储的与所述分布式锁对应的最新锁版本数据的步骤中,所述最新锁版本数据具体是以数据文件的形式被存储记录;
相应的,所述根据所述请求中关于待获取的所述分布式锁的相关信息,实时接收当前存储的与所述分布式锁对应的最新锁版本数据,包括:
所述节点进程订阅所述数据文件的相应数据;所述订阅,是指用于关联所述节点进程与所述数据文件中与该节点进程对应的所述最新锁版本数据,即通过订阅,所述节点进程能够对与之对应的所述最新锁版本数据发起写操作,且当与之对应的所述最新锁版本数据发生更新时,所述节点进程能够实时得到更新后的所述最新锁版本数据,
所述节点进程实时接收其订阅的所述数据文件中的数据,即实时接收当前存储的与所述分布式锁对应的最新锁版本数据;
相应的,所述的所述节点进程将所述节点进程的所述专有锁版本作为当前的最新锁版本,并以该当前的最新锁版本为依据更新所述最新锁版本数据,具体是指将所述节点进程的所述专有锁版本作为当前的最新锁版本,并以该当前的最新锁版本为依据更新所述数据文件中的相应最新锁版本数据。
19.根据权利要求18所述的分布式锁获取方法,其特征在于,所述的所述最新锁版本数据具体是以数据文件的形式被存储记录,是指与各个分布式锁对应的最新锁版本数据分别以单独的数据文件的形式被存储记录,即存储所述最新锁版本数据的数据文件与所述分布式锁一一对应。
20.根据权利要求19所述的分布式锁获取方法,其特征在于,所述的所述分布式系统将更新后的所述最新锁版本数据推送给当前已持有所述分布式锁的或其它等待获取所述分布式锁的各节点进程,具体是指当存储有所述最新锁版本数据的所述数据文件发生更新时,所述分布式系统将更新后的所述最新锁版本数据推送给当前已持有所述分布式锁的或其它等待获取所述分布式锁的各节点进程,即订阅所述数据文件的各节点进程能够实时得到更新后的所述当前最新锁版本数据。
21.根据权利要求19所述的分布式锁获取方法,其特征在于,在所述根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本的步骤前,执行以下步骤:
根据所述节点进程实时获取的订阅数据,判断与所述节点进程订阅的数据对应的所述数据文件是否存在;
若不存在,则新建存储相应最新锁版本数据的数据文件,继而执行所述根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本的步骤;
若存在,则执行所述根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本的步骤。
22.根据权利要求21所述的分布式锁获取方法,其特征在于,在所述的所述分布式系统将更新后的所述最新锁版本数据推送给当前已持有所述分布式锁的或其它等待获取所述分布式锁的各节点进程的步骤后,若所述最新锁版本数据被推送给所述的其它等待获取所述分布式锁的各节点进程,则该些等待获取所述分布式锁的各节点进程依次执行权利要求10中所述的以下步骤:
根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本;
若判断结果为是,则将所述节点进程加入等锁队列中等待;
若判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理。
23.一种分布式锁服务装置,其特征在于,所述装置包括:
最新锁版本数据接收单元,用于分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;
锁版本判断单元,用于根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本;
分布式锁处理单元,用于所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理。
24.根据权利要求23所述的分布式锁服务装置,其特征在于,所述分布式锁处理单元包括:
分布式锁第一处理子单元,用于若判断所述节点进程当前对所述分布式锁的获取状态为已持有所述分布式锁,且所述是否高于的判断结果为是时,则所述节点进程释放其持有的所述分布式锁;
分布式锁第二处理子单元,用于若判断所述节点进程当前对所述分布式锁的获取状态为已持有所述分布式锁,且所述是否高于的判断结果为否时,则所述节点进程继续持有所述分布式锁,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据;
分布式锁第三处理子单元,用于若判断所述节点进程当前对所述分布式锁的获取状态为待获取所述分布式锁,且所述是否高于的判断结果为是时,则所述节点进程在等锁队列中等待;
分布式锁第四处理子单元,用于若判断所述节点进程当前对所述分布式锁的获取状态为待获取所述分布式锁,且所述是否高于的判断结果为否时,则所述节点进程进行获取所述分布式锁的相应处理,并以所述节点进程的所述专有锁版本为依据更新所述最新锁版本数据。
25.一种分布式锁获取装置,其特征在于,所述装置包括:
请求单元,用于分布式系统中待获取分布式锁的节点进程,发起获取与本节点进程待提供的服务所需资源对应的分布式锁的请求;
最新锁版本数据接收单元,用于根据所述请求中关于待获取的所述分布式锁的相关信息,实时接收当前存储的与所述分布式锁对应的最新锁版本数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;
分布式锁判断单元,用于根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本;
分布式锁处理单元,用于若在分布式锁判断单元中的判断结果为是,则将所述节点进程加入等锁队列中等待;若在分布式锁判断单元中的判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理。
26.根据权利要求25所述的分布式锁获取装置,其特征在于,在所述分布式锁处理单元中,所述若在分布式锁判断单元中的判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理,包括:
若判断结果为否,则所述节点进程将所述节点进程的所述专有锁版本作为当前的最新锁版本,并以该当前的最新锁版本为依据更新所述最新锁版本数据;
所述分布式系统将更新后的所述最新锁版本数据推送给当前已持有所述分布式锁的或其它等待获取所述分布式锁的各节点进程;
基于传统分布式锁获取机制,所述节点进程尝试获取所述分布式锁,进而提供服务。
27.一种分布式锁服务系统,其特征在于,所述系统采用节点进程管理分布式系统中的任务或作业,当所述系统启动新的节点进程接替原节点进程提供相同的服务,进而接替原节点进程管理分布式系统中的任务或作业时,各所述节点进程所应用的分布式锁服务,以便获取或释放所述分布式锁时,采用权利要求1至22中任一所述的分布式锁服务方法或分布式锁获取方法,从而停止或提供相应服务。
28.一种电子设备,其特征在于,包括:
显示器;
处理器;以及
存储器,所述存储器被配置成存储分布式锁服务装置,和/或,分布式锁获取装置,
所述分布式锁服务装置被所述处理器执行时,执行如下步骤:
分布式系统中待获取分布式锁的节点进程或当前已持有分布式锁的节点进程,实时接收包含与本节点进程待获取的或已持有的所述分布式锁相对应的最新锁版本的数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;
根据所述节点进程实时接收的包含所述最新锁版本的数据,以及预先生成的所述节点进程的专有锁版本,所述节点进程判断所述最新锁版本是否高于所述专有锁版本;
所述节点进程根据本节点进程当前对所述分布式锁的获取状态,以及所述是否高于的判断结果,进行释放、获取或等待所述分布式锁的相应处理;
所述分布式锁获取装置被所述处理器执行时,执行如下步骤:
分布式系统中待获取分布式锁的节点进程,发起获取与本节点进程待提供的服务所需资源对应的分布式锁的请求;
根据所述请求中关于待获取的所述分布式锁的相关信息,实时接收当前存储的与所述分布式锁对应的最新锁版本数据;所述锁版本的高低用于标识各所述节点进程向同一个分布式锁发起获取请求的优先级的高低;
根据实时接收的所述最新锁版本数据,以及预先生成的关于所述分布式锁的所述节点进程的专有锁版本,判断所述最新锁版本是否高于所述节点进程的专有锁版本;
若判断结果为是,则将所述节点进程加入等锁队列中等待;
若判断结果为否,则所述节点进程进行获取所述分布式锁的相应处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510783915.9A CN106708608B (zh) | 2015-11-16 | 2015-11-16 | 一种分布式锁服务方法、获取方法及相应装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510783915.9A CN106708608B (zh) | 2015-11-16 | 2015-11-16 | 一种分布式锁服务方法、获取方法及相应装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106708608A true CN106708608A (zh) | 2017-05-24 |
CN106708608B CN106708608B (zh) | 2020-08-11 |
Family
ID=58932029
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510783915.9A Active CN106708608B (zh) | 2015-11-16 | 2015-11-16 | 一种分布式锁服务方法、获取方法及相应装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106708608B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109101341A (zh) * | 2017-06-21 | 2018-12-28 | 阿里巴巴集团控股有限公司 | 分布式锁的分配方法及设备 |
CN109257396A (zh) * | 2017-07-12 | 2019-01-22 | 阿里巴巴集团控股有限公司 | 一种分布式锁调度方法及装置 |
CN109344136A (zh) * | 2018-12-13 | 2019-02-15 | 浪潮(北京)电子信息产业有限公司 | 一种共享文件系统的访问方法、装置及设备 |
CN109495528A (zh) * | 2017-09-12 | 2019-03-19 | 阿里巴巴集团控股有限公司 | 分布式锁所有权调度方法和装置 |
CN111831557A (zh) * | 2020-06-19 | 2020-10-27 | 北京华三通信技术有限公司 | 死锁检测的方法及装置 |
CN112099962A (zh) * | 2020-11-06 | 2020-12-18 | 成都新希望金融信息有限公司 | 分布式锁实现方法、装置和电子设备 |
CN112769640A (zh) * | 2020-12-23 | 2021-05-07 | 中移(杭州)信息技术有限公司 | 进程通信方法、系统、服务器及存储介质 |
CN113810479A (zh) * | 2021-08-31 | 2021-12-17 | 山石网科通信技术股份有限公司 | 服务协调系统以及服务协调方法 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6493804B1 (en) * | 1997-10-01 | 2002-12-10 | Regents Of The University Of Minnesota | Global file system and data storage device locks |
CN1786918A (zh) * | 2004-12-10 | 2006-06-14 | 惠普开发有限公司 | 分布式锁 |
US7124131B2 (en) * | 2003-04-29 | 2006-10-17 | International Business Machines Corporation | Discipline for lock reassertion in a distributed file system |
US20080172429A1 (en) * | 2004-11-01 | 2008-07-17 | Sybase, Inc. | Distributed Database System Providing Data and Space Management Methodology |
CN101273333A (zh) * | 2005-04-13 | 2008-09-24 | 普罗格雷斯软件公司 | 容错分布式锁定管理 |
CN101901237A (zh) * | 2009-12-04 | 2010-12-01 | 四川川大智胜软件股份有限公司 | 一种基于SQlite构建的类型-索引-内容方式分布式数据库 |
US8051046B2 (en) * | 1998-02-13 | 2011-11-01 | Oracle International Corporation | Methods to perform disk writes in a distributed shared disk system needing consistency across failures |
CN102355473A (zh) * | 2011-06-28 | 2012-02-15 | 用友软件股份有限公司 | 分布式计算环境下的锁定控制系统和方法 |
CN102682071A (zh) * | 2011-03-07 | 2012-09-19 | 微软公司 | 用于主存储器数据库的高效的多版本锁定 |
US8301593B2 (en) * | 2008-06-12 | 2012-10-30 | Gravic, Inc. | Mixed mode synchronous and asynchronous replication system |
CN103518364A (zh) * | 2013-03-19 | 2014-01-15 | 华为技术有限公司 | 分布式存储系统的数据更新方法及服务器 |
-
2015
- 2015-11-16 CN CN201510783915.9A patent/CN106708608B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6493804B1 (en) * | 1997-10-01 | 2002-12-10 | Regents Of The University Of Minnesota | Global file system and data storage device locks |
US8051046B2 (en) * | 1998-02-13 | 2011-11-01 | Oracle International Corporation | Methods to perform disk writes in a distributed shared disk system needing consistency across failures |
US7124131B2 (en) * | 2003-04-29 | 2006-10-17 | International Business Machines Corporation | Discipline for lock reassertion in a distributed file system |
US20080172429A1 (en) * | 2004-11-01 | 2008-07-17 | Sybase, Inc. | Distributed Database System Providing Data and Space Management Methodology |
CN1786918A (zh) * | 2004-12-10 | 2006-06-14 | 惠普开发有限公司 | 分布式锁 |
CN101273333A (zh) * | 2005-04-13 | 2008-09-24 | 普罗格雷斯软件公司 | 容错分布式锁定管理 |
US8301593B2 (en) * | 2008-06-12 | 2012-10-30 | Gravic, Inc. | Mixed mode synchronous and asynchronous replication system |
CN101901237A (zh) * | 2009-12-04 | 2010-12-01 | 四川川大智胜软件股份有限公司 | 一种基于SQlite构建的类型-索引-内容方式分布式数据库 |
CN102682071A (zh) * | 2011-03-07 | 2012-09-19 | 微软公司 | 用于主存储器数据库的高效的多版本锁定 |
CN102355473A (zh) * | 2011-06-28 | 2012-02-15 | 用友软件股份有限公司 | 分布式计算环境下的锁定控制系统和方法 |
CN103518364A (zh) * | 2013-03-19 | 2014-01-15 | 华为技术有限公司 | 分布式存储系统的数据更新方法及服务器 |
Non-Patent Citations (3)
Title |
---|
ALEXANDER THOMASIAN: "Distributed Optimistic Concurrency Control Methods for High-Performance Transaction Processing", 《IEEE TRANSACTIONS ON KNOWLEDGE AND DATA ENGINEERING》 * |
PER-ÅKE LARSON,SPYROS BLANAS,CRISTIAN DIACONU,CRAIG FREEDMAN: "High-Performance Concurrency Control Mechanisms for Main-Memory Databases", 《PROCEEDINGS OF THE VLDB ENDOWMENT》 * |
王潜平,左明: "分布式数据库应用中锁与版本结合的并发存取控制", 《计算机工程与应用》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109101341B (zh) * | 2017-06-21 | 2022-02-22 | 阿里巴巴集团控股有限公司 | 分布式锁的分配方法及设备 |
CN109101341A (zh) * | 2017-06-21 | 2018-12-28 | 阿里巴巴集团控股有限公司 | 分布式锁的分配方法及设备 |
US11288253B2 (en) | 2017-06-21 | 2022-03-29 | Alibaba Group Holding Limited | Allocation method and device for a distributed lock |
CN109257396A (zh) * | 2017-07-12 | 2019-01-22 | 阿里巴巴集团控股有限公司 | 一种分布式锁调度方法及装置 |
CN109257396B (zh) * | 2017-07-12 | 2021-07-09 | 阿里巴巴集团控股有限公司 | 一种分布式锁调度方法及装置 |
CN109495528A (zh) * | 2017-09-12 | 2019-03-19 | 阿里巴巴集团控股有限公司 | 分布式锁所有权调度方法和装置 |
CN109495528B (zh) * | 2017-09-12 | 2022-04-26 | 阿里巴巴集团控股有限公司 | 分布式锁所有权调度方法和装置 |
CN109344136A (zh) * | 2018-12-13 | 2019-02-15 | 浪潮(北京)电子信息产业有限公司 | 一种共享文件系统的访问方法、装置及设备 |
CN111831557A (zh) * | 2020-06-19 | 2020-10-27 | 北京华三通信技术有限公司 | 死锁检测的方法及装置 |
CN111831557B (zh) * | 2020-06-19 | 2023-10-20 | 北京华三通信技术有限公司 | 死锁检测的方法及装置 |
CN112099962B (zh) * | 2020-11-06 | 2021-02-19 | 成都新希望金融信息有限公司 | 分布式锁实现方法、装置和电子设备 |
CN112099962A (zh) * | 2020-11-06 | 2020-12-18 | 成都新希望金融信息有限公司 | 分布式锁实现方法、装置和电子设备 |
CN112769640A (zh) * | 2020-12-23 | 2021-05-07 | 中移(杭州)信息技术有限公司 | 进程通信方法、系统、服务器及存储介质 |
CN113810479A (zh) * | 2021-08-31 | 2021-12-17 | 山石网科通信技术股份有限公司 | 服务协调系统以及服务协调方法 |
CN113810479B (zh) * | 2021-08-31 | 2023-11-07 | 山石网科通信技术股份有限公司 | 服务协调系统以及服务协调方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106708608B (zh) | 2020-08-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106708608A (zh) | 一种分布式锁服务方法、获取方法及相应装置 | |
CN108429631B (zh) | 一种网络业务实例化的方法及装置 | |
CN112527489B (zh) | 一种任务调度方法、装置、设备及计算机可读存储介质 | |
CN106993019A (zh) | 分布式任务调度方法和系统 | |
CN107168777B (zh) | 分布式系统中资源的调度方法以及装置 | |
US10379834B2 (en) | Tenant allocation in multi-tenant software applications | |
US8984521B2 (en) | Computer system performance by applying rate limits to control block tenancy | |
CN106411558B (zh) | 一种数据流量限制的方法及系统 | |
JP2017519308A (ja) | マルチテナントアプリケーションサーバ環境におけるワークマネージャを提供するためのシステムおよび方法 | |
CN112052068A (zh) | 一种Kubernetes容器平台CPU绑核的方法与装置 | |
US9104501B2 (en) | Preparing parallel tasks to use a synchronization register | |
CN101771723A (zh) | 数据同步方法 | |
CN109274782A (zh) | 一种采集网站数据的方法及装置 | |
CN104793981B (zh) | 一种虚拟机集群的在线快照管理方法及装置 | |
WO2020133963A1 (zh) | 基于区块链的数据存储方法、相关设备及存储介质 | |
CN107203429A (zh) | 一种基于分布式锁加载分布式任务的方法以及装置 | |
CN110599148A (zh) | 集群数据处理方法、装置、计算机集群及可读存储介质 | |
CN111163140A (zh) | 资源获取和分配的方法、装置和计算机可读存储介质 | |
CN111314241B (zh) | 一种任务调度方法及调度系统 | |
CN106533961A (zh) | 一种流量控制方法及装置 | |
JP2024113165A (ja) | データ構造、メモリ手段、および装置 | |
CN101778131A (zh) | 数据同步系统 | |
CN103905512B (zh) | 一种数据处理方法和设备 | |
CN112019577A (zh) | 专属云存储实现方法、装置、计算设备及计算机存储介质 | |
CN101789963A (zh) | 数据同步系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210727 Address after: No.12 Zhuantang science and technology economic block, Xihu District, Hangzhou City, Zhejiang Province Patentee after: ALIYUN COMPUTING Co.,Ltd. Address before: A four-storey 847 mailbox in Grand Cayman Capital Building, British Cayman Islands Patentee before: Alibaba Group Holding Ltd. |