分布式锁实现方法、装置及可读存储介质与流程

文档序号:15159521发布日期:2018-08-14 10:10阅读:174来源:国知局

本发明涉及软件工程领域,具体而言,涉及一种分布式锁实现方法、装置及可读存储介质。



背景技术:

在当前的软件工程领域,特别是大数据计算领域,经常会有分布式系统的部署,以便并行高效的进行大数据量的计算。在分布式系统中,经常会有进程间互斥的访问某种资源或者互斥的执行某种任务的情形。例如某个消息,只能被集群中一台机器消费即可,多台重复消费会造成严重问题,例如机器崩溃。或者是某个文件,同一时间只允许单个进程读写,如果被多个进程读写,也会造成严重问题。如何在实现上述的互斥访问需求的基础上保证分布式系统的高效运行,是本领域技术人员亟待解决的技术问题。



技术实现要素:

为了克服现有技术中的上述不足,本发明的目的在于提供一种分布式锁实现方法、装置及可读存储介质,以解决或者改善上述问题。

为了实现上述目的,本发明实施例采用的技术方案如下:

结合第一方面,本发明实施例提供一种分布式锁实现方法,应用于电子设备,所述电子设备包括redis数据库,所述redis数据库中包括有各个临界资源的资源锁信息,所述方法包括:

在接收到应用程序对目标临界资源的访问请求时,判断所述目标临界资源的资源锁是否存在;

若所述目标临界资源的资源锁不存在,则允许所述应用程序访问所述目标临界资源,并为所述目标临界资源的资源锁设置对应的生存时间值;

在所述应用程序占用所述目标临界资源后,基于所述生存时间值执行生存时间值重设命令;

根据所述生存时间值重设命令的执行情况判断所述应用程序是否发生异常;

若判断结果为所述应用程序发生异常,则取消所述应用程序对所述目标临界资源的占用。

可选地,在所述在接收到应用程序对目标临界资源的访问请求时,判断所述目标临界资源的资源锁是否存在的步骤之后,所述方法还包括:

若所述目标临界资源的资源锁存在,则拒绝所述应用程序对目标临界资源的访问请求。

可选地,所述基于所述生存时间值执行生存时间值重设命令的状态下:

所述电子设备基于所述生存时间值进行时间计时,并在每一次计时时间到达所述生存时间值时进行下一次时间计时。

可选地,所述根据所述生存时间值重设命令的执行情况判断所述应用程序是否发生异常的步骤,包括:

判断所述电子设备是否在每一次计时时间到达所述生存时间值时及时进行下一次时间计时;

若是,则判定所述应用程序未发生异常;

若否,则判断所述应用程序发生异常。

可选地,所述若判断结果为所述应用程序发生异常,则取消所述应用程序对所述目标临界资源的占用的步骤,包括:

若判断结果为所述应用程序发生异常,则在本次计时时间到达生存时间值时,销毁所述目标临界资源的资源锁,以取消所述应用程序对所述目标临界资源的占用。

结合第二方面,本发明实施例还提供一种分布式锁实现装置,应用于电子设备,所述电子设备包括redis数据库,所述redis数据库中包括有各个临界资源的资源锁信息,所述装置包括:

第一判断模块,用于在接收到应用程序对目标临界资源的访问请求时,判断所述目标临界资源的资源锁是否存在;

设置模块,用于若所述目标临界资源的资源锁不存在,则允许所述应用程序访问所述目标临界资源,并为所述目标临界资源的资源锁设置对应的生存时间值;

重设模块,用于在所述应用程序占用所述目标临界资源后,基于所述生存时间值执行生存时间值重设命令;

第二判断模块,用于根据所述生存时间值重设命令的执行情况判断所述应用程序是否发生异常;

取消占用模块,用于若判断结果为所述应用程序发生异常,则取消所述应用程序对所述目标临界资源的占用。

结合第三方面,本发明实施例还提供一种可读存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序被执行时实现上述的分布式锁实现方法。

相对于现有技术而言,本发明具有以下有益效果:

本发明实施例提供一种分布式锁实现方法、装置及可读存储介质,首先在接收到应用程序对目标临界资源的访问请求时,判断所述目标临界资源的资源锁是否存在,若所述目标临界资源的资源锁不存在,则允许所述应用程序访问所述目标临界资源,并为所述目标临界资源的资源锁设置对应的生存时间值,并在所述应用程序占用所述目标临界资源后,基于所述生存时间值执行生存时间值重设命令,而后根据所述生存时间值重设命令的执行情况判断所述应用程序是否发生异常,若判断结果为所述应用程序发生异常,则取消所述应用程序对所述目标临界资源的占用。由此,当目标临界资源的资源锁不存在时应用程序才能访问目标临界资源,从而能够在保证互斥访问需求的基础上保证分布式系统的高效运行。并且当应用程序是否发生异常时取消所述应用程序对所述目标临界资源的占用,其它应用程序是判断该资源锁不存在即可正常占用,从而既保证正常情况下锁的占用和释放,也能保证异常情况下不因某个应用程序的错误造成锁无限期占用的问题,保证了分布式系统的高效运行。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它相关的附图。

图1为本发明实施例提供的电子设备的一种结构示意框图;

图2为本发明实施例提供的分布式锁实现装置的一种功能模块图;

图3为本发明实施例提供的分布式锁实现方法的一种流程示意图;

图4为本发明实施例提供的分布式锁实现方法的另一种流程示意图。

图标:100-电子设备;110-总线;120-处理器;130-存储介质;140-总线接口;150-网络适配器;160-用户接口;200-分布式锁实现装置;210-第一判断模块;220-设置模块;230-重设模块;240-第二判断模块;250-取消占用模块。

具体实施方式

在当前的软件工程领域,特别是大数据计算领域,经常会有分布式系统的部署,以便并行高效的进行大数据量的计算。在分布式系统中,经常会有进程间互斥的访问某种资源或者互斥的执行某种任务的情形。例如某个消息,只能被集群中一台机器消费即可,多台重复消费会造成严重问题,例如机器崩溃。或者是某个文件,同一时间只允许单个进程读写,如果被多个进程读写,也会造成严重问题。如何在实现上述的互斥访问需求的基础上保证分布式系统的高效运行,是本领域技术人员亟待解决的技术问题

在上述互斥访问的需求下,本申请发明人在实现本发明实施例的技术方案的过程中,提出了分布式锁,分布式锁的目的即是要实现临界资源的单一访问或者消息单一消费。传统的分布式锁一般基于文件或者redis实现,例如某个进程在消费某条消息时,可在服务器创建一个文件,如果其它进程同样接收到这条消息,则需要先判断该文件是否存在,才能进行接下来的流程。但是上述方法仅限于多个进程在同一台服务器时可用,如果分布在不同的服务器,则该方法不能满足需求。

此外,还有一种方式是基于redis实现的分布式锁,基于redis的分布式锁可以解决上述基于写文件的分布式锁限制的单服务器的问题,但目前基于redis的分布式锁的实现仅仅是简单地在redis中写入资源锁key,代表资源锁占用,其它进程则不可访问,删除key代表锁释放,其它进程则可以正常访问某临界资源。这样的实现方法存在严重问题,例如占用锁的进程崩溃等,导致无限期锁占用,严重影响整个系统的正常运作,而且需要程序显式的释放锁(即删除key),如果开发人员疏忽没有释放锁,同样导致系统崩溃。

以上现有技术中的方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本发明实施例针对上述问题所提出的解决方案,都应该是发明人在本发明过程中对本发明做出的贡献。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

请参阅图1,为本发明实施例提供电子设备100的结构框图。所述电子设备100可以通过诸如有线或无线网络等方式发送或接收信号,或可以在诸如存储器中将信号处理或存储为物理存储状态。每个电子设备100可以是包括硬体、软体或内嵌逻辑元件或者两个或多个此类元件的组合的电子装置,并能够执行由电子设备100实施或支援的合适的功能。可选地,所述电子设备100可以是一种具有无线收发功能的设备,包括室内或室外、手持、穿戴或车载设备。例如,所述电子设备100可以是手机(mobilephone)、平板电脑(pad)、带无线收发功能的电脑、虚拟现实(virtualreality,vr)终端设备、增强现实(augmentedreality,ar)终端设备、工业控制(industrialcontrol)中的无线终端、无人驾驶(selfdriving)中的无线终端、远程医疗(remotemedical)中的无线终端、智能电网(smartgrid)中的无线终端、运输安全(transportationsafety)中的无线终端、智慧城市(smartcity)中的无线终端、智慧家庭(smarthome)中的无线终端等等。本申请的实施例对应用场景不做限定。

如图1所示,所述电子设备100可以由总线110作一般性的总线体系结构来实现。根据电子设备100的具体应用和整体设计约束条件,总线110可以包括任意数量的互连总线和桥接。总线110将各种电路连接在一起,这些电路包括处理器120、存储介质130和总线接口140。可选地,电子设备100可以使用总线接口140将网络适配器150等经由总线110连接。网络适配器150可用于实现电子设备100中物理层的信号处理功能,并通过天线实现射频信号的发送和接收。用户接口160可以连接外部设备,例如:键盘、显示器、鼠标或者操纵杆等。总线110还可以连接各种其它电路,如定时源、外围设备、电压调节器或者功率管理电路等,这些电路是本领域所熟知的,因此不再详述。

可以替换的,电子设备100也可配置成通用处理系统,例如通称为芯片,该通用处理系统包括:提供处理功能的一个或多个微处理器,以及提供存储介质130的至少一部分的外部存储器,所有这些都通过外部总线体系结构与其它支持电路连接在一起。

可替换的,电子设备100可以使用下述来实现:具有处理器120、总线接口140、用户接口160的asic(专用集成电路);以及集成在单个芯片中的存储介质130的至少一部分,或者,电子设备100可以使用下述来实现:一个或多个fpga(现场可编程门阵列)、pld(可编程逻辑器件)、控制器、状态机、门逻辑、分立硬件部件、任何其它适合的电路、或者能够执行本发明通篇所描述的各种功能的电路的任意组合。

其中,处理器120负责管理总线110和一般处理(包括执行存储在存储介质130上的软件)。处理器120可以使用一个或多个通用处理器和/或专用处理器来实现。处理器120的例子包括微处理器、微控制器、dsp处理器和能够执行软件的其它电路。应当将软件广义地解释为表示指令、数据或其任意组合,而不论是将其称作为软件、固件、中间件、微代码、硬件描述语言还是其它。

在图1中存储介质130被示为与处理器120分离,然而,本领域技术人员很容易明白,存储介质130或其任意部分可位于电子设备100之外。举例来说,存储介质130可以包括传输线、用数据调制的载波波形、和/或与无线节点分离开的计算机制品,这些介质均可以由处理器120通过总线接口140来访问。可替换地,存储介质130或其任意部分可以集成到处理器120中,例如,可以是高速缓存和/或通用寄存器。

所述处理器120可执行上述实施例,具体地,所述存储介质130中存储有分布式锁实现装置200,所述处理器120可以用于执行所述分布式锁实现装置200。

请参阅图2,为本发明实施例提供的上述分布式锁实现装置200的一种功能模块图,所述分布式锁实现装置200可包括:

第一判断模块210,用于在接收到应用程序对目标临界资源的访问请求时,判断所述目标临界资源的资源锁是否存在。

设置模块220,用于若所述目标临界资源的资源锁不存在,则允许所述应用程序访问所述目标临界资源,并为所述目标临界资源的资源锁设置对应的生存时间值。

重设模块230,用于在所述应用程序占用所述目标临界资源后,基于所述生存时间值执行生存时间值重设命令。

第二判断模块240,用于根据所述生存时间值重设命令的执行情况判断所述应用程序是否发生异常。

取消占用模块250,用于若判断结果为所述应用程序发生异常,则取消所述应用程序对所述目标临界资源的占用。

可选地,所述基于所述生存时间值执行生存时间值重设命令的状态下:

所述电子设备100基于所述生存时间值进行时间计时,并在每一次计时时间到达所述生存时间值时进行下一次时间计时。

可选地,所述第二判断模块240,还用于判断所述电子设备100是否在每一次计时时间到达所述生存时间值时及时进行下一次时间计时;

若是,则判定所述应用程序未发生异常;

若否,则判断所述应用程序发生异常。

可选地,所述取消占用模块250,还用于若判断结果为所述应用程序发生异常,则在本次计时时间到达生存时间值时,销毁所述目标临界资源的资源锁,以取消所述应用程序对所述目标临界资源的占用。

请参阅图3,为本发明实施例提供的分布式锁实现方法的一种流程示意图,所述方法由图1中所示的电子设备100执行,下面结合图3对所述分布式锁实现装置200包括的各个功能模块进行详细描述。所应说明的是,本发明实施例提供的分布式锁实现方法不以图3及以下所述的具体顺序为限制。所述方法的具体流程如下:

步骤s210,在接收到应用程序对目标临界资源的访问请求时,判断所述目标临界资源的资源锁是否存在。本实施例中,该步骤s210可由上述第一判断模块210执行。

本实施例中,所述电子设备100包括redis数据库,所述redis数据库中包括有各个临界资源的资源锁信息,资源锁也即为各个应用程序(例如打印机printer)定义的锁。例如,本实施例可以基于redisnosql数据库,对分布式系统暴露ip和port,独立于分布式系统之外,由此多个进程可以共享同一个redis实例。

多道程序系统中存在许多进程,它们共享各种资源,然而有很多资源一次只能供一个进程使用,一次仅允许一个进程使用的资源称为临界资源。许多物理设备都属于临界资源,如输入机、打印机、磁带机等。

当接收到应用程序a对目标临界资源(例如打印机printer)的访问请求时,也即应用程序a需要对该目标临界资源进行互斥访问,首先判断所述目标临界资源的资源锁是否存在,可在redis数据库中尝试加锁该资源锁对应的标识,例如existsprinter(exists为redis命令,用于判断指定key是否存在)。

步骤s220,若所述目标临界资源的资源锁不存在,则允许所述应用程序访问所述目标临界资源,并为所述目标临界资源的资源锁设置对应的生存时间值。本实施例中,该步骤s220可由上述设置模块220执行。

本实施例中,如果所述目标临界资源的资源锁key不存在,例如existsprinterredis服务器返回0,则应用程序a可以正常占用该目标临界资源printer,并利用redis数据库的资源锁key的生存时间值ttl特性,在占用一个锁的同时,为该锁附加生存时间值ttl,命令可以为setexprinter51。

上述命令中,printer即为应用程序a定义的资源锁key,5可以代表该key的生存时间值ttl为5秒钟,1为该资源key的value,无实际意义。这里表示该资源锁5秒钟后会自动释放,需要进程中一个定时任务去不断的重置该锁的生存时间值ttl,这也是本实施例的核心,是分布式系统高可用性的保证,可选地,上述流程的伪代码如下:

try{

while(true){

if(existskey){

expirekey5

}

}

}catch(throwablae){

unlock(key)

}

上文提到过,传统的基于redis的分布式锁存在因为锁持有进程崩溃或开发人员疏忽导致锁不能正常释放,进而导致系统崩溃的问题,本实施例则利用redis的key的ttl特性,在占用一个锁的同时,为该锁附加ttl。

可选地,请参阅图4,所述分布式锁实现方法还可以包括如下步骤:

步骤s225,若所述目标临界资源的资源锁存在,则拒绝所述应用程序对目标临界资源的访问请求。

本实施例中,若所述目标临界资源的资源锁key存在,例如printer资源已经被占用,则该应用程序a无法访问打印机,只能阻塞等待。

依旧参阅图3,步骤s230,在所述应用程序占用所述目标临界资源后,基于所述生存时间值执行生存时间值重设命令。本实施例中,该步骤s230可由上述重设模块230执行。

本实施例中,在所述应用程序占用所述目标临界资源后,根据上述伪代码,循环的执行重设ttl为5秒的命令:while(true){expireprinter5},在生存时间值重设命令的执行过程中,所述电子设备100可基于所述生存时间值进行时间计时,并在每一次计时时间到达所述生存时间值时进行下一次时间计时,从而通过定时任务去不断的重置该目标临界资源的资源锁的生存时间值ttl。

步骤s240,根据所述生存时间值重设命令的执行情况判断所述应用程序是否发生异常。本实施例中,该步骤s240可由上述第二判断模块240执行。

本实施例中,当应用程序a使用该目标临界资源,例如priner后,显式的释放资源,体现为删除资源锁key,命令:delprinter,此时该目标临界资源占用结束。

所述电子设备100可以根据所述生存时间值重设命令的执行情况判断所述应用程序是否发生异常,例如可以判断所述电子设备100是否在每一次计时时间到达所述生存时间值时及时进行下一次时间计时,若是,则判定所述应用程序未发生异常;若否,则判断所述应用程序发生异常。

步骤s250,若判断结果为所述应用程序发生异常,则取消所述应用程序对所述目标临界资源的占用。本实施例中,该步骤s250可由上述取消占用模块250执行。

根据上述判断结果,如果该应用程序a发生异常,例如程序崩溃,那么本实施例还具有容错处理功能,即临界资源的资源锁key的生存时间值ttl为5秒,由于程序a崩溃,无法及时更新生存时间值ttl,故该目标临界资源,例如priner在很短时间内自动过期销毁,由此可以保证临界资源不被锁死,其它程序可正常使用。这样做的目的是防止进程崩溃发生锁无限期占用,进而导致系统功能异常。其原理在于进程崩溃或发生异常后,定时任务失效,资源锁key的生存时间值ttl无法被及时刷新,则该资源锁key自动失效,其它进程判断该锁不存在,即可正常占用,这样做既能保证正常情况下锁的占用和释放,也能保证异常情况下,不因某个进程的错误导致整个系统不可用。

可选地,本实施例基础的基于redis的分布式锁,所述电子设备100无需直接操作redis数据库,其原理在于该分布式锁可以实现对外暴露api,在实现过程中,封装了对redis的操作和定时任务刷新key的ttl,封装了实现细节,电子设备100只关注业务逻辑即可,为分布式系统临界资源互斥访问提供了高效的解决方案。

基于上述方案,本实施例提供的分布式锁实现方法,当目标临界资源的资源锁不存在时应用程序才能访问目标临界资源,从而能够在保证互斥访问需求的基础上保证分布式系统的高效运行。并且当应用程序是否发生异常时取消所述应用程序对所述目标临界资源的占用,其它应用程序是判断该资源锁不存在即可正常占用,从而既保证正常情况下锁的占用和释放,也能保证异常情况下不因某个应用程序的错误造成锁无限期占用的问题,保证了分布式系统的高效运行。

进一步地,本发明实施例还提供一种可读存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序被执行时实现上述的分布式锁实现方法。

综上所述,本发明实施例提供一种分布式锁实现方法、装置及可读存储介质,首先在接收到应用程序对目标临界资源的访问请求时,判断所述目标临界资源的资源锁是否存在,若所述目标临界资源的资源锁不存在,则允许所述应用程序访问所述目标临界资源,并为所述目标临界资源的资源锁设置对应的生存时间值,并在所述应用程序占用所述目标临界资源后,基于所述生存时间值执行生存时间值重设命令,而后根据所述生存时间值重设命令的执行情况判断所述应用程序是否发生异常,若判断结果为所述应用程序发生异常,则取消所述应用程序对所述目标临界资源的占用。由此,当目标临界资源的资源锁不存在时应用程序才能访问目标临界资源,从而能够在保证互斥访问需求的基础上保证分布式系统的高效运行。并且当应用程序是否发生异常时取消所述应用程序对所述目标临界资源的占用,其它应用程序是判断该资源锁不存在即可正常占用,从而既保证正常情况下锁的占用和释放,也能保证异常情况下不因某个应用程序的错误造成锁无限期占用的问题,保证了分布式系统的高效运行。

在本发明所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

可以替换的,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其它可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等

需要说明的是,在本文中,术语"包括"、"包含"或者其任何其它变体意在涵盖非排它性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句"包括一个……"限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其它的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1