分布式锁实现方法、系统、设备及存储介质与流程

专利2022-06-29  78


本发明涉及物流领域,具体地说,涉及一种基于hdfs文件系统的分布式锁实现方法、系统、设备及存储介质。



背景技术:

随着大数据时代的到来,hadoop框架已经成为大数据领域的基础架构,使用hadoop来进行大数据处理已经成为非常便捷、普及的事情。hadoop主要由计算模块mapreduce和分布式文件存储模块(hadoopdistributedfilesystem,hdfs)组成,使用hdfs进行文件存储已经成为非常成熟和通用的技术,但是在大数据场景下对共享资源的互斥访问依然存在问题。与此同时在互联网环境中,几乎所有大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的cap理论告诉我们“任何一个分布式系统都无法同时满足一致性(consistency)、可用性(availability)和分区容错性(partitiontolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在大数据和互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可。在分布式系统中,共享资源互斥访问问题非常普遍,而针对访问共享资源的互斥问题,常用的解决方案就是使用分布式锁。

在很多场景中,为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。有时需要保证一个方法在同一时间内只能被同一个线程执行。在单机环境中,java中其实提供了很多并发处理相关的api,但是这些api在分布式场景中就无能为力了,也就是说单纯的javaapi并不能提供分布式锁的能力。所以针对分布式锁的实现目前有多种方案。针对分布式锁的实现,目前比较常用的有以下几种方案:基于数据库(mysql)实现分布式锁、基于缓存(redis,memcached,tair)实现分布式锁、基于zookeeper实现分布式锁。

其中,基于数据库表实现分布式锁,要实现分布式锁,最简单的方式可能就是直接创建一张锁表,然后通过操作该表中的数据来实现了。当要锁住某个方法或资源时,就在该表中增加一条记录,想要释放锁的时候就删除这条记录。

创建这样一张数据库表methodlock,包含4个字段:id(主键)、method_name(锁定的方法名)、desc(备注信息)和update_time(更新时间)。当想要锁住某个方法时,执行以下sql:

insertintomethodlock(method_name,desc)values(‘method_name’,‘desc’)

因为对method_name做了唯一性约束,如果有多个请求同时提交到数据库的话,数据库会保证只有一个操作可以成功,那么就可以认为操作成功的那个线程获得了该方法的锁,可以执行方法体内容。当方法执行完毕之后,想要释放锁的话,需要执行以下sq:

deletefrommethodlockwheremethod_name='method_name'

基于数据库表实现分布式锁这种简单的实现有以下几个问题:

a.这把锁强依赖数据库的可用性,数据库是一个单点,一旦数据库挂掉,会导致业务系统不可用;

b.这把锁只能是非阻塞的,因为数据的insert操作,一旦插入失败就会直接报错。没有获得锁的线程并不会进入排队队列,要想再次获得锁就要再次触发获得锁操作;

c.这把锁是非重入的,同一个线程在没有释放锁之前无法再次获得该锁,因为数据中数据已经存在了。

相比较于基于数据库实现分布式锁的方案来说,基于缓存来实现在性能方面会表现的更好一点,而且很多缓存是可以集群部署的,可以解决单点问题。目前有很多成熟的缓存产品,包括redis,memcached。缓存锁优点在于性能高,实现起来较为方便,在允许偶发的锁失效情况,不影响系统正常使用,建议采用缓存锁;缺点在于通过锁超时机制不是十分可靠,当线程获得锁后,处理时间过长导致锁超时,就失效了锁的作用。

基于zookeeper临时有序节点可以实现的分布式锁,大致思想即为:每个客户端对某个方法加锁时,在zookeeper上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点。判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个,当释放锁的时候,只需将这个瞬时节点删除即可。同时,其可以避免服务宕机导致的锁无法释放,而产生的死锁问题。此方法的缺点是性能上不如使用缓存实现分布式锁;优点在于不依靠超时时间释放锁,可靠性高,系统要求高可靠性时,建议采用zookeeper锁;缺点在于因为要频繁的创建节点删除节点,其性能不如缓存锁。

在大数据场景下,使用数据库(mysql)、缓存(redis)、zookeeper等方式实现分布式锁都要引入新的存储或者服务框架到系统中,因此存在增加了系统的复杂度和需要额外申请相应的资源的缺点。

需要说明的是,在上述背景技术部分公开的信息仅用于加强对本发明的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。



技术实现要素:

针对现有技术中的问题,本发明通过hdfs实现分布式锁,此方法在大数据环境中不需要引入新的存储或服务,降低了系统复杂度,同时也不需要申请额外的资源,降低了成本。

本发明的实施例提供了一种分布式锁实现方法,该方法包括以下步骤:

创建多个锁文件,将各个所述锁文件分别存储至分布式文件系统的各个目标路径,各个所述锁文件包括锁状态信息;

接收锁申请请求,将请求者信息写入请求的目标锁对应的锁状态信息,所述锁申请请求包括所述请求者信息;

判断目标锁的所述锁状态信息与所述请求者信息是否一致;

如果一致,则确定请求者获取所述目标锁成功;

如果不一致,则确定请求者获取所述目标锁失败。

优选地,各个所述锁文件还包括锁标识信息,所述锁申请请求还包括目标锁的所述锁标识信息;

所述将请求者信息写入请求的目标锁对应的锁状态信息,包括如下步骤:

根据锁申请请求中目标锁的所述锁标识信息确定目标锁的目标路径,判断目标路径下存储的锁状态信息的值是否为初始值;

如果所述锁状态信息为初始值,则将所述请求者信息写入对应的目标锁文件中的所述锁状态信息。

优选地,所述判断目标路径下存储的锁状态信息的值是否为初始值之后,还包括如下步骤:

如果所述锁状态信息为初始值,则将所述请求者信息写入对应的锁文件中的所述锁状态信息之后,从目标路径获取所述目标锁的锁状态信息;

如果所述锁状态信息不为初始值,则直接从目标路径获取所述目标锁的锁状态信息。

优选地,所述分布式文件系统包括hdfs分布式系统,每个所述锁文件使用一个独立的hdfs目标路径。

优选地,所述锁标识信息还包括设定的失效时间阈值。

优选地,在获取目标锁成功后,还包括以下步骤:

启动一个计时器,每间隔特定时间计算当前时间与所述目标锁的获取时间的差值;

判断所得的差值是否大于设定的所述失效时间阈值;

如果是,则释放所述目标锁,并将所述锁状态信息设置为初始值。

优选地,所述确认请求者获取目标锁成功后,还包括以下步骤:

接收到锁释放请求,则释放目标锁,并将所述锁状态信息设置为初始值。

优选地,所述请求者信息包括请求者程序运行所在的ip、进程id、线程id和申请时间。

本发明的实施例还提供了一种分布式锁实现系统,包括构建单元、用户单元、写入单元和判断单元,其中:

所述构建单元用于创建多个锁文件;

所述用户单元用于接收锁申请请求;

所述写入单元用于将请求者信息写入请求的目标锁对应的锁状态信息;

所述判断单元用于比较目标锁的所述锁状态信息与所述请求者信息,并根据比对结果确定请求者获取目标锁是否成功。

优选系,所述分布式锁实现系统还包括计时单元,用于在所述判断单元确定请求者获取所述目标锁成功后,启动一个计时器,并每间隔特定时间计算当前时间与所述目标锁的获取时间的差值。

优选地,所述判断单元还用于判断所述计时单元每间隔特定时间将当前时间与所述分布式锁的获取时间做差所得的差值是否大于设定的失效时间阈值;

所述用户单元还用于在所述判断单元判断所述差值大于设定的所述失效时间阈值时,释放所述目标锁,并将所述锁状态信息设置为初始状态。

本发明的实施例还提供了一种分布式锁实现设备,其特征在于,包括:

处理器;

存储器,其中存储有所述处理器的可执行指令;

其中,所述处理器配置为经由执行所述可执行指令来执行所述分布式锁实现方法的步骤。

本发明的实施例还提供了一种计算机可读存储介质,用于存储程序,其特征在于,所述程序被执行时实现所述分布式锁实现方法的步骤。

本发明的方法通过分布式系统实现了一种大数据场景下的简单高效的分布式锁,通过对分布式系统,尤其是hdfs上的锁文件进行锁创建、锁的竞争、锁获取、锁释放、锁超时等操作,可以实现在多并发场景下对共享资源的互斥操作。同时,本发明的方法只使用了分布式系统,没有引入其他存储或者服务,使得分布式锁的实现非常简单,降低了系统复杂度,减少了对外部资源的依赖。在大数据平台中,资源不变的情况下,通过本发明的方法进行共享资源的操作,降低开发成本和提升效率。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理,通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明一实施例的分布式锁实现方法的流程图;

图2为本发明一实施例的分布式锁实现系统的示意图;

图3为本发明一实施例的分布式锁实现设备的结构示意图;

图4为本发明一实施例的计算机可读存储介质的结构示意图。

具体实施方式

现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。

此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

图1为本发明一实施例的分布式锁实现方法的流程图,该方法具体包括以下步骤:

首先s100、创建多个锁文件,将各个所述锁文件分别存储至分布式文件系统的各个目标路径,各个所述锁文件包括锁状态信息。这里所述的分布式文件系统包括hdfs分布式系统,而每个锁文件使用一个独立的hdfs目标路径,因此,各个分布式锁之间相互独立、互不影响。

hdfs分布式系统是一种被设计成适合运行在通用硬件上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。hdfs是一个高度容错性的系统,适合部署在廉价的机器上;hdfs能提供高吞吐量的数据访问,非常适合大规模数据集上的应用;hdfs放宽了一部分posix约束,来实现流式读取文件系统数据的目的。hdfs在最开始是作为apachenutch搜索引擎项目的基础架构而开发的。hdfs是apachehadoopcore项目的一部分。hdfs有着高容错性的特点,并且设计用来部署在低廉的硬件上。而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。hdfs放宽了posix的要求这样可以实现流的形式访问文件系统中的数据。

接着执行s200、接收锁申请请求,将请求者信息写入请求的目标锁对应的锁状态信息,所述锁申请请求包括所述请求者信息;在一实施例中,请求者信息可以包括请求者程序运行所在的ip、进程id、线程id和申请时间。本发明中的申请没有通过业务请求获取对应脚本生成信息这一方式。

实施例中的各个锁文件还包括锁标识信息,锁申请请求中还包括目标锁的锁标识信息,而上述将请求者信息写入请求的目标锁对应的锁状态信息的步骤包括:

根据锁申请请求中目标锁的锁标识信息确定目标锁的目标路径,判断目标路径下存储的锁状态信息的值是否为初始值,这里的初试值可以设定为任意值,不是任一一请求者信息即可;

如果锁状态信息为初始值,即表明锁申请请求中目标锁是未占有状态,则将请求者信息写入对应的目标锁文件中的锁状态信息,即锁状态信息的有由初始值变为请求者信息,即表明锁申请请求中目标锁已被请求者占有。本发明的方法不需使用队列存储锁申请请求,只要锁申请请求中目标锁是未占有状态,在先请求者即可占有目标锁。

在实施例中,判断目标路径下存储的锁状态信息的值是否为初始值,如果锁状态信息为初始值,则将请求者信息写入对应的锁文件中的所述锁状态信息之后,还包括从目标路径获取所述目标锁的锁状态信息;但如果锁状态信息不为初始值,则直接从目标路径获取所述目标锁的锁状态信息。

然后执行s300、判断目标锁的锁状态信息与请求者信息是否一致,

如果一致,s400、则确定请求者获取目标锁成功,而请求者可以占有目标锁并操作所需的共享资源。请求者完成操作后,可以发出所释放请求,系统接收到锁释放请求,则释放目标锁,并将所述锁状态信息设置为初始值。

如果不一致,s500、则确定请求者获取目标锁失败,系统等待下一个锁申请请求。

通常情况下,为了合理分配资源,系统往往会设置每个请求者可以占有目标锁的时间,在我们的实施例中,这一功能通过如下步骤完场:

在锁标识信息中还包括设定的失效时间阈值,在获取目标锁成功后,系统启动一个计时器,每间隔特定时间计算当前时间与所述目标锁的获取时间的差值,这一差值实际代表了请求者占有目标锁的时间,判断所得的差值是否大于设定的失效时间阈值,但差值,即占有目标锁的时间大于设定的失效时间阈值时,则释放目标锁,并将锁状态信息设置为初始值。这一步骤是强行释放锁的过程。

图2为本发明一实施例的分布式锁实现系统的示意图,该系统包括构建单元1、用户单元2、写入单元3和判断单元4,其中:

构建单元1用于创建多个锁文件;

用户单元2用于接收锁申请请求;

写入单元3用于将请求者信息写入请求的目标锁对应的锁状态信息;

判断单元4用于比较目标锁的所述锁状态信息与所述请求者信息,并根据比对结果确定请求者获取目标锁是否成功。

在实施例中,分布式锁实现系统还包括计时单元,用于在所述判断单元确定请求者获取目标锁成功后,启动一个计时器,并每间隔特定时间计算当前时间与目标锁的获取时间的差值。判断单元4还用于判断计时单元1每间隔特定时间将当前时间与分布式锁的获取时间做差所得的差值是否大于设定的失效时间阈值;用户单元2还用于在判断单元4判断差值大于设定的失效时间阈值时,释放目标锁,并将锁状态信息设置为初始状态。

下面参照图3来描述根据本发明的这种实施方式的电子设备600。图4显示的电子设备600仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图3所示,电子设备600以通用计算设备的形式表现。电子设备600的组件可以包括但不限于:至少一个处理单元610、至少一个存储单元620、连接不同平台组件(包括存储单元620和处理单元610)的总线630、显示单元640等。

其中,存储单元存储有程序代码,程序代码可以被处理单元610执行,使得处理单元610执行本说明书上述电子处方流转处理方法部分中描述的根据本发明各种示例性实施方式的步骤。例如,处理单元610可以执行如图1中所示的步骤。

存储单元620可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(ram)6201和/或高速缓存存储单元6202,还可以进一步包括只读存储单元(rom)6203。

存储单元620还可以包括具有一组(至少一个)程序模块6205的程序/实用工具6204,这样的程序模块6205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

总线630可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。

电子设备600也可以与一个或多个外部设备700(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备600交互的设备通信,和/或与使得该电子设备600能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口650进行。并且,电子设备600还可以通过网络适配器660与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。网络适配器660可以通过总线630与电子设备600的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备600使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储平台等。

本发明实施例还提供一种计算机可读存储介质,用于存储程序,程序被执行实现分拣基于hdfs分布式锁实现方法的步骤。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述电子处方流转处理方法部分中描述的根据本发明各种示例性实施方式的步骤。

参考图4所示,描述了根据本发明的实施方式的用于实现上述方法的程序产品800,其可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。

计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如java、c 等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

综上所述,本发明提供了一种分布式锁实现方法、系统、设备及存储介质,该方法包括以下步骤:创建多个锁文件,将各个锁文件分别存储至分布式文件系统的各个目标路径,各个锁文件包括锁状态信息;接收锁申请请求,将请求者信息写入请求的目标锁对应的锁状态信息,锁申请请求包括请求者信息;判断目标锁的锁状态信息与请求者信息是否一致;如果一致,则确定请求者获取目标锁成功;如果不一致,则确定请求者获取目标锁失败。本发明通过分布式系统实现了一种大数据场景下的简单高效的分布式锁,通过对分布式系统,尤其是hdfs上的锁文件进行锁创建、锁的竞争、锁获取、锁释放、锁超时等操作,可以实现在多并发场景下对共享资源的互斥操作。同时,本发明只使用了分布式系统,没有引入其他存储或者服务,使得分布式锁的实现非常简单,降低了系统复杂度,减少了对外部资源的依赖。在大数据平台中,资源不变的情况下,通过本发明的方法进行共享资源的操作,降低开发成本和提升效率。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一、第二等词语用来表示名称,而并不表示任何特定的顺序。


技术特征:

1.一种分布式锁实现方法,其特征在于,包括以下步骤:

创建多个锁文件,将各个所述锁文件分别存储至分布式文件系统的各个目标路径,各个所述锁文件包括锁状态信息;

接收锁申请请求,将请求者信息写入请求的目标锁对应的锁状态信息,所述锁申请请求包括所述请求者信息;

判断目标锁的所述锁状态信息与所述请求者信息是否一致;

如果一致,则确定请求者获取所述目标锁成功;

如果不一致,则确定请求者获取所述目标锁失败。

2.根据权利要求1所述的分布式锁实现方法,其特征在于,各个所述锁文件还包括锁标识信息,所述锁申请请求还包括目标锁的所述锁标识信息;

所述将请求者信息写入请求的目标锁对应的锁状态信息,包括如下步骤:

根据锁申请请求中目标锁的所述锁标识信息确定目标锁的目标路径,判断目标路径下存储的锁状态信息的值是否为初始值;

如果所述锁状态信息为初始值,则将所述请求者信息写入对应的目标锁文件中的所述锁状态信息。

3.根据权利要求2所述的分布式锁实现方法,其特征在于,所述判断目标路径下存储的锁状态信息的值是否为初始值之后,还包括如下步骤:

如果所述锁状态信息为初始值,则将所述请求者信息写入对应的锁文件中的所述锁状态信息之后,从目标路径获取所述目标锁的锁状态信息;

如果所述锁状态信息不为初始值,则直接从目标路径获取所述目标锁的锁状态信息。

4.根据权利要求1所述的分布式锁实现方法,其特征在于,所述分布式文件系统包括hdfs分布式系统,每个所述锁文件使用一个独立的hdfs目标路径。

5.根据权利要求2所述的分布式锁实现方法,其特征在于,所述锁标识信息还包括设定的失效时间阈值。

6.根据权利要求5所述的分布式锁实现方法,其特征在于,在获取目标锁成功后,还包括以下步骤:

启动一个计时器,每间隔特定时间计算当前时间与所述目标锁的获取时间的差值;

判断所得的差值是否大于设定的所述失效时间阈值;

如果是,则释放所述目标锁,并将所述锁状态信息设置为初始值。

7.根据权利要求1所述的分布式锁实现方法,其特征在于,所述确认请求者获取目标锁成功后,还包括以下步骤:

接收到锁释放请求,则释放目标锁,并将所述锁状态信息设置为初始值。

8.根据权利要求1所述的分布式锁实现方法,其特征在于,所述请求者信息包括请求者程序运行所在的ip、进程id、线程id和申请时间。

9.一种分布式锁实现系统,其特征在于,包括构建单元、用户单元、写入单元和判断单元,其中:

所述构建单元用于创建多个锁文件;

所述用户单元用于接收锁申请请求;

所述写入单元用于将请求者信息写入请求的目标锁对应的锁状态信息;

所述判断单元用于比较目标锁的所述锁状态信息与所述请求者信息,并根据比对结果确定请求者获取目标锁是否成功。

10.根据权利要求9所述的分布式锁实现系统,其特征在于,还包括计时单元,用于在所述判断单元确定请求者获取所述目标锁成功后,启动一个计时器,并每间隔特定时间计算当前时间与所述目标锁的获取时间的差值。

11.根据权利要求10所述的分布式锁实现系统,其特征在于:

所述判断单元还用于判断所述计时单元每间隔特定时间将当前时间与所述分布式锁的获取时间做差所得的差值是否大于设定的失效时间阈值;

所述用户单元还用于在所述判断单元判断所述差值大于设定的所述失效时间阈值时,释放所述目标锁,并将所述锁状态信息设置为初始状态。

12.一种分布式锁实现设备,其特征在于,包括:

处理器;

存储器,其中存储有所述处理器的可执行指令;

其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1至8任意一项所述分布式锁实现方法的步骤。

13.一种计算机可读存储介质,用于存储程序,其特征在于,所述程序被执行时实现权利要求1至8任意一项所述分布式锁实现方法的步骤。

技术总结
本发明提供了一种分布式锁实现方法、系统、设备及存储介质,该方法包括以下步骤:创建多个锁文件,将各个锁文件分别存储至分布式文件系统的各个目标路径,各个锁文件包括锁状态信息;接收锁申请请求,将请求者信息写入请求的目标锁对应的锁状态信息,锁申请请求包括请求者信息;判断目标锁的锁状态信息与请求者信息是否一致;如果一致,则确定请求者获取目标锁成功;如果不一致,则确定请求者获取目标锁失败。本发明通过布式文件系统实现了一种大数据场景下的简单高效的分布式锁,从而实现在多并发场景下对共享资源的互斥操作;同时,本发明无需引入其他存储或者服务,降低了系统复杂度,降低了开发成本。

技术研发人员:安金龙;刘业辉;张飞;张宁;高相斌;王彦明
受保护的技术使用者:北京京东尚科信息技术有限公司;北京京东世纪贸易有限公司
技术研发日:2018.12.03
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-26039.html

最新回复(0)