CN108897628A - 一种分布式锁的实现方法、装置及电子设备 - Google Patents
一种分布式锁的实现方法、装置及电子设备 Download PDFInfo
- Publication number
- CN108897628A CN108897628A CN201810560749.XA CN201810560749A CN108897628A CN 108897628 A CN108897628 A CN 108897628A CN 201810560749 A CN201810560749 A CN 201810560749A CN 108897628 A CN108897628 A CN 108897628A
- Authority
- CN
- China
- Prior art keywords
- target
- thread
- node
- lasting
- distributed lock
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
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)
Abstract
本发明实施例提供了一种分布式锁的实现方法、装置及电子设备。所述方法包括:线程在请求具有目标资源标识的资源信息的分布式锁时,在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点,并生成所述线程对应的目标令牌,以所述目标令牌作为目标资源标识对应的参考令牌;基于线程对应的顺序临时节点的序列编号,判断线程是否获取到分布式锁;当判断出线程获取到分布式锁时,访问资源信息;当访问完毕资源信息后,删除所述线程对应的顺序临时节点,并判断所述线程对应的目标令牌和所述目标资源标识对应的参考令牌是否一致,如果一致,删除所述目标持久节点。本方案可以解决创建过多持久节点所导致的占用较大存储空间的问题。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种分布式锁的实现方法、装置及电子设备。
背景技术
分布式锁主要用于在分布式环境中保护跨进程、跨主机、跨网络的共享资源实现互斥访问,以保证数据的一致性。目前实现分布式锁主要有三种流行的方案,分别为基于数据库、缓存和Zookeeper实现分布式锁。Zookeeper(简称zk)是一种提供配置管理、分布式协同以及命名的中心化服务***,Zookeeper提供的这些功能都是分布式***中非常底层且必不可少的基本功能,开发者可以在Zookeeper之上构建自己的各种分布式***。
然而,发明人在实现本发明的过程中发现,现有技术在基于Zookeeper实现分布式锁的过程中,如果线程请求分布式锁,一般需要在Zookeeper中创建持久节点。然而,由于持久节点的创建是以资源标识为基础的,针对每一资源标识都会创建一个持久节点,当较多线程请求关于其对应资源标识的资源信息的分布式锁,且多个线程对应的资源标识不相同时,需要创建的持久节点就会越多。但是在分布式锁被释放之后,由于之前创建的持久节点仍会在Zookeeper中存在,导致占用较大的存储空间,从而可能影响Zookeeper性能。
发明内容
本发明实施例的目的在于提供一种分布式锁的实现方法、装置及电子设备,以解决创建过多持久节点所导致的占用较大存储空间的问题。具体技术方案如下:
第一方面,本发明实施例提供了一种分布式锁的实现方法,所述方法包括:
线程在请求具有目标资源标识的资源信息的分布式锁时,在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点,并生成所述线程对应的目标令牌,以所述目标令牌作为所述目标资源标识对应的参考令牌;其中,所述目标持久节点为以所述目标资源标识命名的持久节点;
基于所述线程对应的顺序临时节点的序列编号,判断所述线程是否获取到所述分布式锁;
当判断出所述线程获取到所述分布式锁时,访问所述资源信息;
当访问完毕所述资源信息后,删除所述线程对应的顺序临时节点,并判断所述线程对应的目标令牌和所述目标资源标识对应的参考令牌是否一致,如果一致,删除所述目标持久节点。
可选的,所述在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点的步骤,包括:
判断Zookeeper中是否存在以目标资源标识命名的目标持久节点;
如果存在,在所述目标持久节点下创建所述线程对应的顺序临时节点;
如果不存在,在所述Zookeeper中创建以目标资源标识命名的目标持久节点,并在所述目标持久节点下创建所述线程对应的顺序临时节点。
可选的,所述基于所述线程对应的顺序临时节点的序列编号,判断所述线程是否获取到所述分布式锁的步骤,包括:
定时判断所述线程对应的顺序临时节点的序列编号是否为序列编号组中的最小值;其中,所述序列编号组由所述目标持久节点下的所有顺序临时节点的序列编号构成;
如果是,判定所述线程获取到所述分布式锁。
可选的,所述生成所述线程对应的目标令牌的步骤,包括:
利用所述线程对应的顺序临时节点的序列编号,生成所述线程对应的目标令牌。
可选的,所述方法还包括:
在删除所述目标持久节点后,删除所述目标资源标识对应的参考令牌。
第二方面,本发明实施例还提供了一种分布式锁的实现装置,所述装置包括:
创建模块,用于线程在请求具有目标资源标识的资源信息的分布式锁时,在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点,并生成所述线程对应的目标令牌,以所述目标令牌作为所述目标资源标识对应的参考令牌;其中,所述目标持久节点为以所述目标资源标识命名的持久节点;
判断模块,用于基于所述线程对应的顺序临时节点的序列编号,判断所述线程是否获取到所述分布式锁;
访问模块,用于当判断出所述线程获取到所述分布式锁时,访问所述资源信息;
删除模块,用于当访问完毕所述资源信息后,删除所述线程对应的顺序临时节点,并判断所述线程对应的目标令牌和所述目标资源标识对应的参考令牌是否一致,如果一致,删除所述目标持久节点。
可选的,所述创建模块,具体用于:
线程在请求具有目标资源标识的资源信息的分布式锁时,判断Zookeeper中是否存在以目标资源标识命名的目标持久节点;
如果存在,在所述目标持久节点下创建所述线程对应的顺序临时节点;
如果不存在,在所述Zookeeper中创建以目标资源标识命名的目标持久节点,并在所述目标持久节点下创建所述线程对应的顺序临时节点。
可选的,所述判断模块,具体用于:
定时判断所述线程对应的顺序临时节点的序列编号是否为序列编号组中的最小值;其中,所述序列编号组由所述目标持久节点下的所有顺序临时节点的序列编号构成;
如果是,判定所述线程获取到所述分布式锁。
可选的,所述创建模块,具体用于:
线程在请求具有目标资源标识的资源信息的分布式锁时,在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点,利用所述线程对应的顺序临时节点的序列编号,生成所述线程对应的目标令牌。
可选的,所述装置还包括:令牌删除模块;
所述令牌删除模块,用于在所述删除模块删除所述目标持久节点后,删除所述目标资源标识对应的参考令牌。
第三方面,本发明实施例还提供了一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述第一方面所述的一种分布式锁的实现方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的一种分布式锁的实现方法。
第五方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的一种分布式锁的实现方法。
本发明实施例提供的方案中,线程在请求具有目标资源标识的资源信息的分布式锁时,可以生成目标令牌,并以该目标令牌作为目标资源标识对应的参考令牌,这样目标资源标识对应的参考令牌始终与最晚请求分布式锁的线程的目标令牌一致。并且,在访问完毕资源信息后,如果线程判断出自身所对应的目标令牌和该目标资源标识对应的参考令牌一致,则该线程删除该目标持久节点,即在判断出自身为该目标持久节点下最晚请求分布式锁的线程时,删除持久节点。由于在分布式锁竞争结束后,持久节点可以被删除,因此,通过本方案可以解决创建过多持久节点所导致的占用较大存储空间的问题。
当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明实施例提供的一种分布式锁的实现方法的流程图;
图2为本发明实施例中一种使用Zookeeper实现分布式锁的***结构示意图;
图3为本发明实施例提供的一种分布式锁的实现装置的结构示意图;
图4为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
为了解决创建过多持久节点所导致的占用较大存储空间的问题,本发明实施例提供了一种分布式锁的实现方法、装置及电子设备。
下面首先对本发明实施例所提供的一种分布式锁的实现方法进行介绍。
需要说明的是,本发明实施例所提供的一种分布式锁的实现方法的执行主体可以为运行于电子设备中的线程。并且,需要请求分布式锁的任一线程均可以执行本发明实施例所提供的方法。另外,在具体应用中,电子设备可以为终端或服务器,当然并不局限于此。
另外,请求同一分布式锁的至少两个线程,可以分别属于不同的电子设备中,即需要访问同一资源信息的至少两个线程,可以分别属于不同的电子设备。当然,同一电子设备的至少两个线程可以请求同一分布式锁,即同一电子设备的至少两个线程可以请求访问同一资源信息。
图1为本发明实施例提供的一种分布式锁的实现方法的流程图。如图1所示,本发明实施例所提供的一种分布式锁的实现方法可以包括如下步骤:
S101,线程在请求具有目标资源标识的资源信息的分布式锁时,在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点,并生成所述线程对应的目标令牌,以所述目标令牌作为所述目标资源标识对应的参考令牌;其中,所述目标持久节点为以所述目标资源标识命名的持久节点。
为了解决现有技术问题,本发明实施例中,可以预先在缓存区中设置资源标识对应的初始的参考令牌,即为资源信息设置初始的参考令牌。当有线程在请求具有目标资源标识的资源信息的分布式锁时,不但在Zookeeper中的以目标资源标识命名的目标持久节点下,创建请求分布式锁的线程对应的顺序临时节点,同时生成该线程对应的目标令牌,并且以生成的目标令牌作为目标资源标识对应的参考令牌。这样,目标资源标识对应的参考令牌始终与最晚请求分布式锁的线程的目标令牌一致,从而为判断是否删除持久节点提供实现基础。需要强调的是,由于持久节点下的临时节点具有序列编号,且先创建的临时节点的序列编号小于后创建的临时节点的序列编号,因此,通常将持久节点下的临时节点称为顺序临时节点。
具体的,在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点的步骤,可以包括:
判断Zookeeper中是否存在以目标资源标识命名的目标持久节点;
如果存在,在所述目标持久节点下创建所述线程对应的顺序临时节点;
如果不存在,在所述Zookeeper中创建以目标资源标识命名的目标持久节点,并在所述目标持久节点下创建所述线程对应的顺序临时节点。
可以理解的是,如果线程判断出Zookeeper中不存在以目标资源标识命名的目标持久节点,可以表明该线程最早请求具有目标资源标识的资源信息的分布式锁,此时,可以在所述Zookeeper中创建以目标资源标识命名的目标持久节点,并在所述目标持久节点下创建所述线程对应的顺序临时节点。而如果线程判断出Zookeeper中存在以目标资源标识命名的目标持久节点,可以表明该线程请求具有目标资源标识的资源信息的分布式锁的时间,晚于至少一个其他线程,此时,可以直接在所述目标持久节点下创建所述线程对应的顺序临时节点。
另外,生成所述线程对应的目标令牌的具体实现方式存在多种。可选地,在一种具体实现方式中,上述生成所述线程对应的目标令牌的步骤,可以包括:
利用所述线程对应的顺序临时节点的序列编号,生成所述线程对应的目标令牌。
实际应用中,在目标持久节点下创建线程对应的顺序临时节点时,每一顺序临时节点都对应一个序列编号,且先创建的顺序临时节点的序列编号小于后创建的顺序临时节点的序列编号。
本发明实施例中,可以利用每一线程对应的顺序临时节点的序列编号,生成其对应的目标令牌。具体的,可以直接将每一线程对应的顺序临时节点的序列编号,作为该线程对应的目标令牌;也可以对每一线程对应的顺序临时节点的序列编号进行加密,然后将加密之后的信息作为该线程对应的目标令牌,具体的加密算法本发明实施例不做限定。
需要说明的是,在所述Zookeeper中创建以目标资源标识命名的目标持久节点的具体实现方式,以及在所述目标持久节点下创建所述线程对应的顺序临时节点的具体实现方式,可以采用现有技术实现。并且,本发明实施例只是以上述生成方式为例进行说明,实际应用中生成线程对应的目标令牌的方式并不仅限于此。
S102,基于所述线程对应的顺序临时节点的序列编号,判断所述线程是否获取到所述分布式锁。
当线程请求分布式锁,并且在Zookeeper中的目标持久节点下,创建了线程对应的顺序临时节点之后,可以基于线程对应的顺序临时节点的序列编号,判断线程是否获取到分布式锁。
具体的,基于所述线程对应的顺序临时节点的序列编号,判断所述线程是否获取到所述分布式锁的步骤,可以包括:
定时判断所述线程对应的顺序临时节点的序列编号是否为序列编号组中的最小值;其中,所述序列编号组由所述目标持久节点下的所有顺序临时节点的序列编号构成;
如果是,判定所述线程获取到所述分布式锁。
在目标持久节点下创建线程对应的顺序临时节点时,所创建的顺序临时节点对应一个序列编号,那么,在该目标持久节点下创建的所有顺序临时节点对应序列编号,就会组成一个序列编号组。
其中,线程判断自己是否获取到分布式锁的一种方式可以为:定时判断该线程所对应的顺序临时节点的序列编号是否为序列编号组中的最小值。如果该线程所对应的顺序临时节点的序列编号是序列编号组中的最小值,则该线程获取到分布式锁。如果该线程所对应的顺序临时节点的序列编号不是序列编号组中的最小值,则该线程没有获取到分布式锁,继续等待获取分布式锁。当然,本申请只是以上述为例进行说明,实际应用中判断线程是否获取到分布式锁的方式并不仅限于此。
例如:线程可以确定一个第一顺序临时节点,该第一顺序临时节点为所对应序列编号小于该线程自身的顺序临时节点的序列编号的节点;对该第一顺序临时节点注册事件***;在获得该第一顺序临时节点被删除的通知时,判断所述线程对应的顺序临时节点的序列编号是否为序列编号组中的最小值,如果是,判定所述线程获取到所述分布式锁,如果不是,线程可以重新确定一个新的第一顺序临时节点,并监听该新的第一顺序临时节点是否被删除。
S103,当判断出所述线程获取到所述分布式锁时,访问所述资源信息。
当判断出线程获取到分布式锁时,该线程可以访问资源信息。具体的,可以对资源信息进行读取、修改、删除或是利用资源信息完成某一运算等,本发明实施例中对于线程访问资源信息的具体形式不作限制。
S104,当访问完毕所述资源信息后,删除所述线程对应的顺序临时节点,并判断所述线程对应的目标令牌和所述目标资源标识对应的参考令牌是否一致,如果一致,删除所述目标持久节点。
线程在完成创建顺序临时节点时,该线程与Zookeeper中该线程对应的顺序临时节点建立连接,当线程获取到分布式锁,并且访问完毕资源信息后,线程与Zookeeper中该线程对应的顺序临时节点断开连接,并删除该线程对应的顺序临时节点,该线程释放锁。同时判断该线程对应的目标令牌与目标资源标识对应的参考令牌是否一致,当该线程对应的目标令牌与目标资源标识对应的参考令牌一致时,删除以目标资源标识命名的目标持久节点;当该线程对应的目标令牌与目标资源标识对应的参考令牌不一致时,不作处理。
本发明实施例中,线程对应的目标令牌为,创建该线程对应的顺序临时节点时生成的。目标资源标识对应的参考令牌为,创建线程对应的顺序临时节点时更新的,即目标资源标识对应的参考令牌为,以目标资源标识命名的目标持久节点下最后一个创建线程对应的顺序临时节点的目标令牌。
那么,当线程对应的目标令牌与目标资源标识对应的参考令牌一致时,表示以目标资源标识命名的目标持久节点下所有线程都已经依次获取到分布式锁,并且当前释放该分布式锁的线程为该目标持久节点下最后一个持锁的线程,则执行该目标持久节点的删除操作。当线程对应的目标令牌与目标资源标识对应的参考令牌不一致时,表示当前释放该分布式锁的线程不是该目标持久节点下最后一个持锁的线程,则不作处理。
本发明实施例中,上述实现方法还可以包括:
在删除所述目标持久节点后,删除所述目标资源标识对应的参考令牌。
当线程访问完毕资源信息,释放锁,且当前释放分布式锁的线程为目标持久节点下最后一个持锁的线程时,删除该目标持久节点。在删除目标持久节点之后,将目标资源标识对应的参考令牌一起删除。
本发明实施例提供的一种分布式锁的实现方法,线程在请求具有目标资源标识的资源信息的分布式锁时,可以生成目标令牌,并以该目标令牌作为目标资源标识对应的参考令牌,这样目标资源标识对应的参考令牌始终与最晚请求分布式锁的线程的目标令牌一致。并且,在访问完毕资源信息后,如果线程判断出自身所对应的目标令牌和该目标资源标识对应的参考令牌一致,则该线程删除该目标持久节点,即在判断出自身为该目标持久节点下最晚请求分布式锁的线程时,删除持久节点。由于在分布式锁竞争结束后,持久节点可以被删除,因此,通过本方案可以解决创建过多持久节点所导致的占用较大存储空间的问题。
下面结合具体的应用实例,对本发明实施例所提供的一种分布式锁的实现方法进行介绍。
假设该分布式锁的实现方法的应用环境为,应用于开放平台信用等级业务中,使用Zookeeper实现分布式锁的***架构示意图如图2所示。
信用等级***中的线程,向Zookeeper集群请求具有目标资源标识的资源信息的分布式锁,在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点,并生成所述线程对应的目标令牌,以所述目标令牌作为所述目标资源标识对应的参考令牌。
基于所述线程对应的顺序临时节点的序列编号,判断所述线程是否获取到所述分布式锁。
当判断出所述线程获取到所述分布式锁时,所述线程读取MySql数据库获得数据信息,然后执行结算逻辑,并将计算结果存入MySql数据库中,计算结束。
当计算结束后,所述线程与Zookeeper中该线程对应的顺序临时节点断开连接,释放锁,删除所述线程对应的顺序临时节点,并判断所述线程对应的目标令牌和所述目标资源标识对应的参考令牌是否一致,如果一致,删除所述目标持久节点。
本发明实施例中,线程在向Zookeeper集群请求具有目标资源标识的资源信息的分布式锁时,可以生成目标令牌,并以该目标令牌作为目标资源标识对应的参考令牌,这样目标资源标识对应的参考令牌始终与最晚请求分布式锁的线程的目标令牌一致。并且,在获取到数据信息完成计算后,如果线程判断出自身所对应的目标令牌和该目标资源标识对应的参考令牌一致,则该线程删除该目标持久节点,即在判断出自身为该目标持久节点下最晚请求分布式锁的线程时,删除持久节点。由于在分布式锁竞争结束后,持久节点可以被删除,因此,通过本方案可以解决创建过多持久节点所导致的占用较大存储空间的问题。
相应于上述方法实施例,本发明实施例提供了一种分布式锁的实现装置,如图3所示,所述装置可以包括:
创建模块301,用于线程在请求具有目标资源标识的资源信息的分布式锁时,在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点,并生成所述线程对应的目标令牌,以所述目标令牌作为所述目标资源标识对应的参考令牌;其中,所述目标持久节点为以所述目标资源标识命名的持久节点;
判断模块302,用于基于所述线程对应的顺序临时节点的序列编号,判断所述线程是否获取到所述分布式锁;
访问模块303,用于当判断出所述线程获取到所述分布式锁时,访问所述资源信息;
删除模块304,用于当访问完毕所述资源信息后,删除所述线程对应的顺序临时节点,并判断所述线程对应的目标令牌和所述目标资源标识对应的参考令牌是否一致,如果一致,删除所述目标持久节点。
本发明实施例提供的一种分布式锁的实现装置,线程在请求具有目标资源标识的资源信息的分布式锁时,可以生成目标令牌,并以该目标令牌作为目标资源标识对应的参考令牌,这样目标资源标识对应的参考令牌始终与最晚请求分布式锁的线程的目标令牌一致。并且,在访问完毕资源信息后,如果线程判断出自身所对应的目标令牌和该目标资源标识对应的参考令牌一致,则该线程删除该目标持久节点,即在判断出自身为该目标持久节点下最晚请求分布式锁的线程时,删除持久节点。由于在分布式锁竞争结束后,持久节点可以被删除,因此,通过本方案可以解决创建过多持久节点所导致的占用较大存储空间的问题。
需要说明的是,本发明实施例的装置是与图1所示的一种分布式锁的实现方法对应的装置,图1所示的一种分布式锁的实现方法的所有实施例均适用于该装置,且均能达到相同的有益效果。
其中,上述所述创建模块,具体用于:
线程在请求具有目标资源标识的资源信息的分布式锁时,判断Zookeeper中是否存在以目标资源标识命名的目标持久节点;
如果存在,在所述目标持久节点下创建所述线程对应的顺序临时节点;
如果不存在,在所述Zookeeper中创建以目标资源标识命名的目标持久节点,并在所述目标持久节点下创建所述线程对应的顺序临时节点。
所述判断模块,具体用于:
定时判断所述线程对应的顺序临时节点的序列编号是否为序列编号组中的最小值;其中,所述序列编号组由所述目标持久节点下的所有顺序临时节点的序列编号构成;
如果是,判定所述线程获取到所述分布式锁。
所述创建模块,具体用于:
线程在请求具有目标资源标识的资源信息的分布式锁时,在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点,利用所述线程对应的顺序临时节点的序列编号,生成所述线程对应的目标令牌。
所述装置还包括:令牌删除模块;
所述令牌删除模块,用于在所述删除模块删除所述目标持久节点后,删除所述目标资源标识对应的参考令牌。
本发明实施例还提供了一种电子设备,如图4所示,包括处理器401、通信接口402、存储器403和通信总线404,其中,处理器401,通信接口402,存储器403通过通信总线404完成相互间的通信,
存储器403,用于存放计算机程序;
处理器401,用于执行存储器403上所存放的程序时,实现本发明实施例所提供的方法。
本发明实施例提供的一种电子设备,线程在请求具有目标资源标识的资源信息的分布式锁时,可以生成目标令牌,并以该目标令牌作为目标资源标识对应的参考令牌,这样目标资源标识对应的参考令牌始终与最晚请求分布式锁的线程的目标令牌一致。并且,在访问完毕资源信息后,如果线程判断出自身所对应的目标令牌和该目标资源标识对应的参考令牌一致,则该线程删除该目标持久节点,即在判断出自身为该目标持久节点下最晚请求分布式锁的线程时,删除持久节点。由于在分布式锁竞争结束后,持久节点可以被删除,因此,通过本方案可以解决创建过多持久节点所导致的占用较大存储空间的问题。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的分布式锁的实现方法,以获取相同的技术效果。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的分布式锁的实现方法,以获取相同的技术效果。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (11)
1.一种分布式锁的实现方法,其特征在于,包括:
线程在请求具有目标资源标识的资源信息的分布式锁时,在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点,并生成所述线程对应的目标令牌,以所述目标令牌作为所述目标资源标识对应的参考令牌;其中,所述目标持久节点为以所述目标资源标识命名的持久节点;
基于所述线程对应的顺序临时节点的序列编号,判断所述线程是否获取到所述分布式锁;
当判断出所述线程获取到所述分布式锁时,访问所述资源信息;
当访问完毕所述资源信息后,删除所述线程对应的顺序临时节点,并判断所述线程对应的目标令牌和所述目标资源标识对应的参考令牌是否一致,如果一致,删除所述目标持久节点。
2.根据权利要求1所述的方法,其特征在于,所述在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点的步骤,包括:
判断Zookeeper中是否存在以目标资源标识命名的目标持久节点;
如果存在,在所述目标持久节点下创建所述线程对应的顺序临时节点;
如果不存在,在所述Zookeeper中创建以目标资源标识命名的目标持久节点,并在所述目标持久节点下创建所述线程对应的顺序临时节点。
3.根据权利要求1所述的方法,其特征在于,所述基于所述线程对应的顺序临时节点的序列编号,判断所述线程是否获取到所述分布式锁的步骤,包括:
定时判断所述线程对应的顺序临时节点的序列编号是否为序列编号组中的最小值;其中,所述序列编号组由所述目标持久节点下的所有顺序临时节点的序列编号构成;
如果是,判定所述线程获取到所述分布式锁。
4.根据权利要求1所述的方法,其特征在于,所述生成所述线程对应的目标令牌的步骤,包括:
利用所述线程对应的顺序临时节点的序列编号,生成所述线程对应的目标令牌。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:
在删除所述目标持久节点后,删除所述目标资源标识对应的参考令牌。
6.一种分布式锁的实现装置,其特征在于,包括:
创建模块,用于线程在请求具有目标资源标识的资源信息的分布式锁时,在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点,并生成所述线程对应的目标令牌,以所述目标令牌作为所述目标资源标识对应的参考令牌;其中,所述目标持久节点为以所述目标资源标识命名的持久节点;
判断模块,用于基于所述线程对应的顺序临时节点的序列编号,判断所述线程是否获取到所述分布式锁;
访问模块,用于当判断出所述线程获取到所述分布式锁时,访问所述资源信息;
删除模块,用于当访问完毕所述资源信息后,删除所述线程对应的顺序临时节点,并判断所述线程对应的目标令牌和所述目标资源标识对应的参考令牌是否一致,如果一致,删除所述目标持久节点。
7.根据权利要求6所述的装置,其特征在于,所述创建模块,具体用于:
线程在请求具有目标资源标识的资源信息的分布式锁时,判断Zookeeper中是否存在以目标资源标识命名的目标持久节点;
如果存在,在所述目标持久节点下创建所述线程对应的顺序临时节点;
如果不存在,在所述Zookeeper中创建以目标资源标识命名的目标持久节点,并在所述目标持久节点下创建所述线程对应的顺序临时节点。
8.根据权利要求6所述的装置,其特征在于,所述判断模块,具体用于:
定时判断所述线程对应的顺序临时节点的序列编号是否为序列编号组中的最小值;其中,所述序列编号组由所述目标持久节点下的所有顺序临时节点的序列编号构成;
如果是,判定所述线程获取到所述分布式锁。
9.根据权利要求6所述的装置,其特征在于,所述创建模块,具体用于:
线程在请求具有目标资源标识的资源信息的分布式锁时,在Zookeeper中的目标持久节点下,创建所述线程对应的顺序临时节点,利用所述线程对应的顺序临时节点的序列编号,生成所述线程对应的目标令牌。
10.根据权利要求6-9任一所述的装置,其特征在于,所述装置还包括:令牌删除模块;
所述令牌删除模块,用于在所述删除模块删除所述目标持久节点后,删除所述目标资源标识对应的参考令牌。
11.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-5任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810560749.XA CN108897628B (zh) | 2018-05-25 | 2018-05-25 | 一种分布式锁的实现方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810560749.XA CN108897628B (zh) | 2018-05-25 | 2018-05-25 | 一种分布式锁的实现方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108897628A true CN108897628A (zh) | 2018-11-27 |
CN108897628B CN108897628B (zh) | 2020-06-26 |
Family
ID=64344043
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810560749.XA Active CN108897628B (zh) | 2018-05-25 | 2018-05-25 | 一种分布式锁的实现方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108897628B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109525436A (zh) * | 2018-12-19 | 2019-03-26 | 福建新大陆软件工程有限公司 | 应用程序主备切换方法及*** |
CN110474963A (zh) * | 2019-07-17 | 2019-11-19 | 中国平安人寿保险股份有限公司 | 一种基于zookeeper的资源访问方法、***、介质及电子设备 |
CN111163140A (zh) * | 2019-12-20 | 2020-05-15 | 深圳市中农易讯信息技术有限公司 | 资源获取和分配的方法、装置和计算机可读存储介质 |
CN111461643A (zh) * | 2020-03-17 | 2020-07-28 | 上海维信荟智金融科技有限公司 | 资方路由方法及*** |
CN112099962A (zh) * | 2020-11-06 | 2020-12-18 | 成都新希望金融信息有限公司 | 分布式锁实现方法、装置和电子设备 |
CN112131012A (zh) * | 2020-11-26 | 2020-12-25 | 九州华兴集成电路设计(北京)有限公司 | 令牌的处理方法、处理装置与计算机可读存储介质 |
CN112351110A (zh) * | 2020-11-27 | 2021-02-09 | 杭州安恒信息技术股份有限公司 | 基于zookeeper的ID分配方法、装置 |
CN112486695A (zh) * | 2020-12-07 | 2021-03-12 | 浪潮云信息技术股份公司 | 一种高并发业务下的分布式锁实现方法 |
CN112559558A (zh) * | 2020-12-07 | 2021-03-26 | 北京理房通支付科技有限公司 | 一种流水号生成方法和装置、计算设备和存储介质 |
CN113127210A (zh) * | 2019-12-31 | 2021-07-16 | 阿里巴巴集团控股有限公司 | 一种分布式***的存储管理方法、装置及存储介质 |
CN113285975A (zh) * | 2021-03-30 | 2021-08-20 | 紫光云技术有限公司 | 一种高并发资源检测方法 |
CN113641477A (zh) * | 2021-08-17 | 2021-11-12 | 南方电网深圳数字电网研究院有限公司 | 基于Zookeeper的线程调度方法及装置 |
CN114884961A (zh) * | 2022-04-21 | 2022-08-09 | 京东科技信息技术有限公司 | 分布式锁移交方法、装置、电子设备和计算机可读介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060095682A1 (en) * | 2002-11-29 | 2006-05-04 | Fuente Carlos F | High-performance lock management for flash copy in n-way shared storage systems |
CN101273333A (zh) * | 2005-04-13 | 2008-09-24 | 普罗格雷斯软件公司 | 容错分布式锁定管理 |
CN103997498A (zh) * | 2014-05-27 | 2014-08-20 | 北京京东尚科信息技术有限公司 | 一种分布式锁服务的实现方法及组件 |
CN106776156A (zh) * | 2016-12-13 | 2017-05-31 | 东软集团股份有限公司 | 一种服务控制方法及装置 |
CN107450991A (zh) * | 2017-07-24 | 2017-12-08 | 无锡江南计算技术研究所 | 一种高效分布式全局锁协调方法 |
-
2018
- 2018-05-25 CN CN201810560749.XA patent/CN108897628B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060095682A1 (en) * | 2002-11-29 | 2006-05-04 | Fuente Carlos F | High-performance lock management for flash copy in n-way shared storage systems |
CN101273333A (zh) * | 2005-04-13 | 2008-09-24 | 普罗格雷斯软件公司 | 容错分布式锁定管理 |
CN103997498A (zh) * | 2014-05-27 | 2014-08-20 | 北京京东尚科信息技术有限公司 | 一种分布式锁服务的实现方法及组件 |
CN106776156A (zh) * | 2016-12-13 | 2017-05-31 | 东软集团股份有限公司 | 一种服务控制方法及装置 |
CN107450991A (zh) * | 2017-07-24 | 2017-12-08 | 无锡江南计算技术研究所 | 一种高效分布式全局锁协调方法 |
Non-Patent Citations (1)
Title |
---|
PANAMERA918: "基于zookeeper实现分布式锁", 《HTTPS://BLOG.CSDN.NET/PANAMERA918/ARTICLE/DETAILS/80196762》 * |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109525436B (zh) * | 2018-12-19 | 2022-09-16 | 福建新大陆软件工程有限公司 | 应用程序主备切换方法及*** |
CN109525436A (zh) * | 2018-12-19 | 2019-03-26 | 福建新大陆软件工程有限公司 | 应用程序主备切换方法及*** |
CN110474963A (zh) * | 2019-07-17 | 2019-11-19 | 中国平安人寿保险股份有限公司 | 一种基于zookeeper的资源访问方法、***、介质及电子设备 |
CN111163140A (zh) * | 2019-12-20 | 2020-05-15 | 深圳市中农易讯信息技术有限公司 | 资源获取和分配的方法、装置和计算机可读存储介质 |
CN113127210B (zh) * | 2019-12-31 | 2024-03-29 | 阿里巴巴集团控股有限公司 | 一种分布式***的存储管理方法、装置及存储介质 |
CN113127210A (zh) * | 2019-12-31 | 2021-07-16 | 阿里巴巴集团控股有限公司 | 一种分布式***的存储管理方法、装置及存储介质 |
CN111461643A (zh) * | 2020-03-17 | 2020-07-28 | 上海维信荟智金融科技有限公司 | 资方路由方法及*** |
CN112099962A (zh) * | 2020-11-06 | 2020-12-18 | 成都新希望金融信息有限公司 | 分布式锁实现方法、装置和电子设备 |
CN112131012A (zh) * | 2020-11-26 | 2020-12-25 | 九州华兴集成电路设计(北京)有限公司 | 令牌的处理方法、处理装置与计算机可读存储介质 |
CN112351110A (zh) * | 2020-11-27 | 2021-02-09 | 杭州安恒信息技术股份有限公司 | 基于zookeeper的ID分配方法、装置 |
CN112559558A (zh) * | 2020-12-07 | 2021-03-26 | 北京理房通支付科技有限公司 | 一种流水号生成方法和装置、计算设备和存储介质 |
CN112486695A (zh) * | 2020-12-07 | 2021-03-12 | 浪潮云信息技术股份公司 | 一种高并发业务下的分布式锁实现方法 |
CN112559558B (zh) * | 2020-12-07 | 2024-04-09 | 北京理房通支付科技有限公司 | 一种流水号生成方法和装置、计算设备和存储介质 |
CN113285975A (zh) * | 2021-03-30 | 2021-08-20 | 紫光云技术有限公司 | 一种高并发资源检测方法 |
CN113641477A (zh) * | 2021-08-17 | 2021-11-12 | 南方电网深圳数字电网研究院有限公司 | 基于Zookeeper的线程调度方法及装置 |
CN114884961A (zh) * | 2022-04-21 | 2022-08-09 | 京东科技信息技术有限公司 | 分布式锁移交方法、装置、电子设备和计算机可读介质 |
CN114884961B (zh) * | 2022-04-21 | 2024-04-16 | 京东科技信息技术有限公司 | 分布式锁移交方法、装置、电子设备和计算机可读介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108897628B (zh) | 2020-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108897628A (zh) | 一种分布式锁的实现方法、装置及电子设备 | |
US10235047B2 (en) | Memory management method, apparatus, and system | |
CN109885786B (zh) | 数据缓存处理方法、装置、电子设备及可读存储介质 | |
CN109213604B (zh) | 一种数据源的管理方法和装置 | |
CN109525658A (zh) | 一种产号方法、服务器、设备、存储介质和业务*** | |
CN103577407A (zh) | 用于分布式数据库的查询方法及查询装置 | |
CN109491928A (zh) | 缓存控制方法、装置、终端及存储介质 | |
CN106294387B (zh) | 数据迁移方法和装置 | |
CN106095483A (zh) | 服务的自动化部署方法及装置 | |
CN109656886B (zh) | 基于键值对的文件***实现方法、装置、设备和存储介质 | |
CN109992566A (zh) | 一种文件访问方法、装置、设备及可读存储介质 | |
CN108536473A (zh) | 读取数据的方法和装置 | |
US9160705B2 (en) | Identifier management | |
CN108154024A (zh) | 一种数据检索方法、装置及电子设备 | |
CN114780930A (zh) | 权限管理方法、装置、计算机设备和存储介质 | |
US11429311B1 (en) | Method and system for managing requests in a distributed system | |
CN112131478B (zh) | 交易检测方法及装置 | |
CN103414756B (zh) | 一种任务分发方法、分发节点及*** | |
CN110554914B (zh) | 资源锁管理方法、装置、服务器及存储介质 | |
CN108804568B (zh) | 一种Openstack中副本数据在ceph中存储方法及装置 | |
CN108846009B (zh) | 一种ceph中副本数据存储方法及装置 | |
CN115687359A (zh) | 数据表分区方法及装置、存储介质、计算机设备 | |
CN106796644A (zh) | 访问控制***及访问控制方法 | |
CN111209304B (zh) | 数据处理方法、装置及*** | |
CN109725856B (zh) | 一种共享节点管理方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |