掌桥专利:专业的专利平台
掌桥专利
首页

分布式锁的处理方法及装置、电子设备、存储介质

文献发布时间:2023-06-19 11:32:36


分布式锁的处理方法及装置、电子设备、存储介质

技术领域

本发明涉及大数据处理,具体而言,涉及一种分布式锁的处理方法及装置、电子设备、存储介质。

背景技术

在单Java虚拟机(Java Virtual Machine,JVM)中,开发工具包(JavaDevelopment Kit,jdk)提供现成的应用程序接口(API),而在分布式应用(多JVM)中,jdk提供的锁API已经不能满足需求了,为了使分布式存储系统能够正确而有效的运行,必须要控制多个客户端对同一共享资源的并发访问,以便防止某些不确定性的行为不受控制、并发或者同时访问共享资源,导致数据和元数据的一致性遭到破坏,锁是实现并发访问控制的常用手段。

目前,市场上实现分布式锁的方案大体有三种:其一是基于数据库实现分布式锁功能,另外两种则是基于redis或者zookeeper来实现,这三种分布式锁的实现方案可以说各有利弊。

首先,基于数据库方案来实现分布式锁,实现上虽然简单,但是性能堪忧,它一般是通过表中主键唯一或者字段建立唯一索引来实现的,需要多建索引,不仅占用磁盘空格,而且还会在高并发场景下容易出现数据库死锁;使用数据库还会存在单点故障,若使用数据库集群,又存在主从数据同步的问题。其次,基于redis实现分布式锁,它主要是基于redis单线程接收请求和redis的setnx命令,但是不好控制何时删除key;使用redis实现分布式锁看起来实现性最高,但是它存在死锁的情况;虽然市场上采用了框架redisson进行了二次封装,操作简单,但是它仍解决不了哨兵模式或主从模式情况下,主节点挂掉,多个客户端同时获取锁成功的情况。最后,对于基于zookeeper实现分布式锁,它主要是基于它的临时顺序节点特性和watch监听,性能虽好,但是为了避免单点故障,还得搭建集群,zookeeper环境搭建起来较复杂,巨耗资源成本。综上,现有的分布式锁实现方案存在操作复杂、抗并发性弱,以及会因主节点挂掉而造成的数据不同步等技术问题。

发明人发现针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。

发明内容

本发明提供了一种分布式锁的处理方法及装置、电子设备、存储介质,以至少解决了相关技术中现有的分布式锁实现方式存在操作复杂、抗并发性弱以及会因主节点挂掉而造成的数据不同步等技术问题。

根据本发明的一个方面,提供了一种分布式锁的处理方法,包括:通过对象存储的应用程序接口设置上传对象函数中的键值对,其中,所述键值对包括键名和键值,所述键名设置为分布式锁的锁名,所述键值设置为含有目标应用服务器的唯一主机名,所述锁名由当多个应用服务器并发访问共享数据时待操作目标业务的业务名决定,所述目标应用服务器为所述多个应用服务器中任一应用服务器;根据所述锁名和所述目标应用服务器的唯一主机名,判断所述目标应用服务器是否成功抢占锁资源;若所述目标应用服务器成功抢占锁资源,则操作所述目标业务。

可选的,在根据所述锁名和所述目标应用服务器的唯一主机名,判断所述目标应用服务器是否成功抢占锁资源之前,所述方法还包括:通过所述应用程序接口调用所述上传对象函数;通过所述应用程序接口调用所述对象存储中的获取对象函数,以获取所述键值对。

可选的,所述共享数据存储于区块链中,所述根据所述锁名和所述目标应用服务器的唯一主机名,判断所述目标应用服务器是否成功抢占锁资源,包括:判断所述锁名对应的业务名是否位于所述对象存储中;若所述业务名位于所述对象存储中,则判断所述键值中是否含有所述目标应用服务器的唯一主机名;若所述键值中含有所述目标应用服务器的唯一主机名,则所述目标应用服务器抢占锁资源成功。

可选的,在所述判断所述锁名对应的业务名是否位于所述对象存储中之后还包括:若所述键名没有位于所述对象存储中,则确定没有应用服务器抢占锁资源,通过所述应用程序接口重新设置所述上传对象函数中的键值对;并执行所述判断所述锁名对应的业务名是否位于所述对象存储中的步骤。

可选的,在所述判断所述键值中是否含有所述目标应用服务器的唯一主机名之后还包括:步骤a,若所述键值中没有所述目标应用服务器的唯一主机名,则所述目标应用服务器抢占锁资源失败;步骤b,更新所述上传对象函数中的键值为第一应用服务器的唯一主机名,其中,所述第一应用服务器为所述多个应用服务器中除所述目标应用服务器之外的任一应用服务器;步骤c,执行所述通过所述应用程序接口调用所述对象存储中的获取对象函数的步骤,以获取所述获取对象函数中的更新键值;步骤d,判断所述更新键值中是否含有所述第一应用服务器的唯一主机名;步骤e,若所述更新键值中含有所述第一应用服务器的主机名,则所述第一应用服务器抢占锁资源成功;否则,返回执行步骤b,步骤c,步骤d。

可选的,在操作所述目标业务之后,所述方法还包括:删除所述对象存储中的锁名,以释放锁资源。

可选的,若所述键值中还包含所述键值设置为含有所述目标应用服务器的唯一主机名的初始时间,在操作所述目标业务成功之前,所述方法还包括:更新所述初始时间为当前时间;基于所述初始时间和所述当前时间监测所述目标应用服务器访问共享数据的时间戳;将所述时间戳与预设时间进行比较;若所述时间戳大于或等于所述预设时间,则删除所述对象存储中的锁名,以释放锁资源。

根据本发明的另一个方面,提供了一种分布式锁的处理装置,包括:设置模块,用于通过对象存储的应用程序接口设置上传对象函数中的键值对,其中,所述键值对包括键名和键值,所述键名设置为分布式锁的锁名,所述键值设置为含有目标应用服务器的唯一主机名,所述锁名由当多个应用服务器并发访问共享数据时待操作目标业务的业务名决定,所述目标应用服务器为所述多个应用服务器中任一应用服务器;判断模块,用于根据所述锁名和所述目标应用服务器的唯一主机名,判断所述目标应用服务器是否成功抢占锁资源;操作模块,用于若所述目标应用服务器成功抢占锁资源,则操作所述目标业务。

可选的,所述装置还包括:第一调用模块,用于在根据所述锁名和所述目标应用服务器的唯一主机名,判断所述目标应用服务器是否成功抢占锁资源之前,通过所述应用程序接口调用所述上传对象函数;第二调用模块,用于通过所述应用程序接口调用所述对象存储中的获取对象函数,以获取所述键值对。

可选的,所述共享数据存储于区块链中,所述判断模块包括:第一判断单元,用于判断所述锁名对应的业务名是否位于所述对象存储中;第二判断单元,用于若所述业务名位于所述对象存储中,则判断所述键值中是否含有所述目标应用服务器的唯一主机名;第一确定单元,用于若所述键值中含有所述目标应用服务器的唯一主机名,则所述目标应用服务器抢占锁资源成功。

可选的,所述判断模块还包括:第二确定单元,用于在所述判断所述锁名对应的业务名是否位于所述对象存储中之后,若所述键名没有位于所述对象存储中,则确定没有应用服务器抢占锁资源,通过所述应用程序接口重新设置所述上传对象函数中的键值对;第一执行单元,用于执行所述判断所述锁名对应的业务名是否位于所述对象存储中的步骤。

可选的,所述判断模块还包括:第三确定单元,用于执行步骤a,在所述判断所述键值中是否含有所述目标应用服务器的唯一主机名之后,若所述键值中没有所述目标应用服务器的唯一主机名,则所述目标应用服务器抢占锁资源失败;更新单元,用于执行步骤b,更新所述上传对象函数中的键值为第一应用服务器的唯一主机名,其中,所述第一应用服务器为所述多个应用服务器中除所述目标应用服务器之外的任一应用服务器;第二执行单元,用于执行步骤c,执行所述通过所述应用程序接口调用所述对象存储中的获取对象函数的步骤,以获取所述获取对象函数中的更新键值;判断单元,用于执行步骤d,判断所述更新键值中是否含有所述第一应用服务器的唯一主机名;处理单元,用于执行步骤e,若所述更新键值中含有所述第一应用服务器的主机名,则所述第一应用服务器抢占锁资源成功;否则,返回执行步骤b,步骤c,步骤d。

可选的,所述装置还包括:第一删除模块,用于在操作所述目标业务之后,删除所述对象存储中的锁名,以释放锁资源。

可选的,若所述键值中还包含所述键值设置为含有所述目标应用服务器的唯一主机名的初始时间,所述装置还包括:更新模块,用于在操作所述目标业务成功之前,更新所述初始时间为当前时间;监测模块,用于基于所述初始时间和所述当前时间监测所述目标应用服务器访问共享数据的时间戳;比较模块,用于将所述时间戳与预设时间进行比较;第二删除模块,用于若所述时间戳大于或等于所述预设时间,则删除所述对象存储中的锁名,以释放锁资源。

根据本发明的又一个方面,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。

根据本发明的再一个方面,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项装置实施例中的步骤。

通过本发明,采用对象存储的应用程序接口将上传对象函数中的键名设置为分布式锁的锁名(由待操作业务的业务名决定),以及将键名对应的键值设置为含有目标应用服务器的唯一主机名;然后根据锁名和目标应用服务器的唯一主机名判断目标应用服务器是否成功抢占锁资源;若抢占成功,才有权限操作目标业务(即有权限访问共享数据),实现了使用对象存储来实现分布式锁,无需采用第三方的组件作为分布式锁的工具,操作简单;去中心化,提高了分布式锁实现的抗并发性,避免了因主节点挂掉而造成数据不同步的情况,解决了相关技术中现有的分布式锁实现方式存在操作复杂、抗并发性弱以及会因主节点挂掉而造成的数据不同步等技术问题,提高了实现分布式锁的性能。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是本发明实施例的一种分布式锁的处理方法应用于计算机终端的硬件结构框图;

图2是根据本发明实施例的一种分布式锁的处理方法的流程图;

图3是根据本发明一具体实施例提供的分布式锁的实现流程图;

图4是根据本发明实施例的一种分布式锁的处理装置的结构框图;

图5是根据本发明实施例的一种电子设备的结构示意图。

具体实施方式

下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

本申请实施例一所提供的方法实施例可以在移动终端、服务器、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本发明实施例的一种分布式锁的处理方法应用于计算机终端的硬件结构框图。如图1所示,计算机终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,可选地,上述计算机终端还可以包括用于通信功能的传输装置106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述计算机终端的结构造成限定。例如,计算机终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。

存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的分布式锁的处理方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器,也可以包括易失性存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。

为了解决相关技术中存在的上述问题,本方案提供一种使用对象存储处理分布式锁的方法,如果项目中有用到对象存储,又有分布式锁使用场景,可以直接使用对象存储来实现分布式锁,而不需要再搭建第三方组件了;本方案提供的分布式锁实现方法可应用于下单、秒杀等业务场景。

其中,对象存储是面向对象/文件的、海量的互联网存储,它也可以直接被称为“云存储”。对象存储按数据存储类型可分为:文件存储(文件系统)、块存储(硬盘)和对象存储(键值数据库),其中,对象存储应对的是PB级别的数据,以集装箱(桶/bucket)为单位码得整整齐齐,里面装满各种对象数据,数十万客户发的货(数据),都可以处理的过来,按照键值(key,value)记得清清楚楚。

对象尽管是文件,它是已被封装的文件(编程中的对象就有封装性的特点),也就是说,在对象存储系统里,你不能直接打开/修改文件,但可以像ftp一样上传文件、下载文件等。另外对象存储没有像文件系统那样有一个很多层级的文件结构,而是只有一个“桶”的概念(也就是存储空间),“桶”里面全部都是对象,是一种非常扁平化的存储方式。其最大的特点就是它的对象名称就是一个域名地址,一旦对象被设置为“公开”,所有网民都可以访问到它;它的拥有者还可以通过REST API的方式访问其中的对象。因此,对象存储最主流的使用场景,就是存储网站、移动app等互联网/移动互联网应用的静态内容(视频、图片、文件、软件安装包等等)。

图2是根据本发明实施例的一种分布式锁的处理方法的流程图,如图2所示,该流程包括如下步骤:

步骤S202,通过对象存储的应用程序接口设置上传对象函数中的键值对,其中,键值对包括键名和键值,键名设置为分布式锁的锁名,键值设置为含有目标应用服务器的唯一主机名,锁名由当多个应用服务器并发访问共享数据时待操作目标业务的业务名决定,目标应用服务器为多个应用服务器中任一应用服务器;

分布式锁是控制分布式系统之间同步访问共享资源(即上述共享数据)的一种方式,目的是确保在多个线程并发时,只有一个线程(每个线程对应一个应用服务器)在同一刻操作这个业务、方法或变量(即上述目标业务),从而访问共享资源。

本实施例中,分布式锁实现的关键是在分布式的应用服务器外,搭建一个存储服务器(即上述对象存储),来存储锁信息(即锁资源);然后通过调用对象存储的应用程序接口API(全称为Application Programming Interface)实现分布式锁,对象存储的接口遵守restful接口规范,调用简单,无需采用第三方的组件作为分布式锁的工具,降低了成本;去中心化,不像zookeeper、redis、数据库等框架存在主节点,从而解决了一旦主节点挂掉造成数据不同步的情况。

在本实施例中,对象存储可以为OBS对象存储(全称为Object-based Storage),或OSS对象存储服务(全称为Object Storage Service),但不限于此。

本实施例通过使用putObject(key,value)内容可覆盖的特性来实现的。

优选地,Java提供了API,可以通过直接调用对象存储的API获取应用服务器的唯一主机名和当前系统时间;将putObject的key设计成分布式锁的锁名(key是锁的唯一标识,按业务决定命名),将value值设计成应用服务器的主机名(即上述唯一主机名)。

步骤S204,根据锁名和目标应用服务器的唯一主机名,判断目标应用服务器是否成功抢占锁资源;

可选的,使用一个bucket来存储锁资源。根据业务名和唯一主机名确定当前应用服务器(即上述目标应用服务器)是否具备执行目标业务的权限(是否抢占锁资源成功),即访问共享数据的权限。

步骤S206,若目标应用服务器成功抢占锁资源,则操作目标业务。

需要强调的是,为进一步保证上述共享数据的私密和安全性,上述共享数据还可以存储于一区块链的节点中。

本发明实施例提供的分布式锁的处理方法,采用对象存储的应用程序接口将上传对象函数中的键名设置为分布式锁的锁名,以及将键名对应的键值设置为含有目标应用服务器的唯一主机名;然后根据锁名和目标应用服务器的唯一主机名判断目标应用服务器是否成功抢占锁资源,若抢占成功,才有权限操作目标业务,实现了使用对象存储来实现分布式锁,无需采用第三方的组件作为分布式锁的工具,操作简单;去中心化,提高了分布式锁实现的抗并发性,避免了因主节点挂掉而造成数据不同步的情况,解决了相关技术中现有的分布式锁实现方式存在操作复杂、抗并发性弱以及会因主节点挂掉而造成的数据不同步等技术问题,提高了实现分布式锁的性能。

在本案的一个可选的实施例中,在根据锁名和目标应用服务器的唯一主机名,判断目标应用服务器是否成功抢占锁资源之前,还包括:通过应用程序接口调用上传对象函数;通过应用程序接口调用对象存储中的获取对象函数,以获取键值对。

在本案的一个可选的实施例中,共享数据存储于区块链中,根据锁名和目标应用服务器的唯一主机名,判断目标应用服务器是否成功抢占锁资源包括:判断锁名对应的业务名是否位于对象存储中;若业务名位于对象存储中,则判断键值中是否含有目标应用服务器的唯一主机名;若键值中含有目标应用服务器的唯一主机名,则目标应用服务器抢占锁资源成功。

本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。

可选地,在操作目标业务之后,还包括:删除对象存储中的锁名,以释放锁资源。

在一个可选的示例中,图3是根据本发明一具体实施例提供的分布式锁的处理流程图,参见图3所示,包括以下步骤:

步骤S302,在将上传对象putObject(key,value)设置成分布式锁的锁名和当前应用服务器(即上述目标应用服务器)的唯一主机名之后,执行putObject操作(即调用上传对象函数);然后调用获取对象getObject函数(即上述获取对象函数),通过API获取getObject接口请求中的key-value(及上述键值对)。

步骤S304,判断getObject接口请求中的key是否在对象存储中,如果在(则识别出getObject(key)正确),则进一步执行步骤S306,获取getObject(value),判断value值中的主机名是否与本应用所在服务器主机名(即上述目标应用服务器的唯一主机名)相同;

步骤S308,若相同,则当前应用服务器(即上述目标应用服务器)获取锁成功,即具有执行共享数据的权限,则操作目标业务;

步骤S310,操作目标业务成功之后,删除对象存储OBS中的key(锁名),以释放锁资源。

可选的,在判断锁名对应的业务名是否位于对象存储中之后,还包括:若键名没有位于对象存储中,则确定没有应用服务器抢占锁资源,通过应用程序接口重新设置上传对象函数中的键值对;并执行判断锁名对应的业务名是否位于对象存储中的步骤。

如图3所示,当调用getObject(key)方法时,若这个key在OBS中不存在,会报错,则说明抢锁失败,即当前没有进程(应用服务器)抢占锁资源;然后执行步骤S302,调用putObject函数(即上述上传对象函数),重新设计键值对,成功之后,执行步骤S304。

在本案的另一个实施例中,在判断键值中是否含有目标应用服务器的唯一主机名之后还包括:步骤a,若键值中没有目标应用服务器的唯一主机名,则目标应用服务器抢占锁资源失败;步骤b,更新上传对象函数中的键值为第一应用服务器的唯一主机名,其中,第一应用服务器为多个应用服务器中除目标应用服务器之外的任一应用服务器;步骤c,执行通过应用程序接口调用对象存储中的获取对象函数的步骤,以获取获取对象函数中的更新键值;步骤d,判断更新键值中是否含有第一应用服务器的唯一主机名;步骤e,若更新键值中含有第一应用服务器的主机名,则第一应用服务器抢占锁资源成功;否则,返回执行步骤b,步骤c,步骤d。

如图3所示,若调用getObject(key)方法时,这个key存在OBS中,则获取value值,判断value值冒号前面的主机名(即应用服务器的唯一主机名)是否是与本应用所在服务器主机名相同;若相同,则当前进程(当前进程对应当前应用服务器,即目标应用服务器)抢锁成功,便可执行目标业务的操作(即访问共享数据),操作完成后,便删除存储对象中的key(释放锁);如果不相同,则获取锁失败,则本应用所在服务器不具备执行目标业务的权限,然后更新上传对象函数中的键值为多个应用服务器中除当前应用服务器的任一应用服务器(即上数据第一应用服务器),返回步骤S304,执行调用getObject方法,以及步骤S306,继续判断value值(即上述更新键值)是否为其他进程对应的应用服务器的主机名(即上述第一应用服务器的唯一主机名),其中,应用服务器与进程为一一映射关系。

根据上述实施例的一个示例,以下单为例,客户下单的时候,一般是调用库存中心进行减库存,具体地:update store set num=$num where id=$id//更新商店库存信息;而通过设置库存的修改方式,在并发量高的时候极易存在数据库的丢失更新。假设有A、B当前两个事务,查询出来的库存都是5,A下了3个单子,则需要把库存修改为2,而B下了1个单子,要把库存修改为4,若A和B并发访问库存时,则会出现A事务的执行结果覆盖B事务的执行结果,或B事务的执行结果覆盖A事务的执行结果,极易混乱,结果不可预料。

通过本实施例,多个事务(例如上述A、B事务)都会去访问库存(共享数据),执行减库存(即上述操作目标业务),在单个事务抢到锁资源之后,才进行减库存操作。例如,A抢到锁资源之后,进行减库存,而B只能等A释放锁资源之后,才会抢占锁资源,然后执行减库存,从而防止多个事务并发对库存进行修改,以免造成数据不准确。

可选的,若键值中还包含键值设置为含有目标应用服务器的唯一主机名的初始时间,在操作目标业务成功之前,还包括:更新初始时间为当前时间;基于初始时间和当前时间监测目标应用服务器访问共享数据的时间戳;将时间戳与预设时间进行比较;若时间戳大于或等于预设时间,则删除对象存储中的锁名,以释放锁资源。

在本案一个优选实施例中,采用字符串拼接方式将value值设计成应用服务器的主机名(即上述唯一主机名)+冒号+当前系统时间的格式,即应用服务器主机名:当前操作系统时间。每个client(客户端,与应用服务器一一对应)都需要启用一个定时job(任务)(比例30秒,即上述预设时间),即过期时间,去监控存储锁资源的bucket,循环检测该bucket下面每个key对应的value,即监测value值中的时间值,并与当前时间进行比较,如果差值(即上述时间戳)大于预设时间(如30秒),则将对象存储中的key,通过设置过期时间,避免死锁。

由于bucket中每个key对应的value值是抢占锁的时间,通常抢到锁的进程在执行完共享数据操作之后,会释放掉该锁资源,如果当前进程挂了,极易造成当前进程一直持有锁资源,从而影响其他进程抢锁;通过本实施例,对bucket下面每个key对应的value中的时间进行监测,若超过抢占锁资源的预设时间(比如30秒),就将对象存储中key删除,即可实现让其它进程来抢锁资源。

通过本发明实施例,使用对象存储OBS实现分布式锁相较于其它现有的分布式锁实现方案(比如zookeeper、redis、数据库等)具有以下有益效果:1)操作简单,简单地调用对象存储中的API即可实现;2)且去中心化,不像使用第三方组件实现分布式锁那样,一旦主节点挂掉,就会造成数据不同步的情况;3)OBS网关还可以动态扩展,可以提高访问共享数据的并发性;4)对象存储OBS接口遵守restful(其中,rest的英文全称为representational state transfer,即表象性状态转变,restful对应的中文是rest式的)接口规范,调用简单;5)OBS底层数据采用了分布式存储机制,即便在极端情况下出现网络故障或者坏盘,client应用也可以与OBS进行数据交互,不会出现client不可用的情况。

基于上文各个实施例提供的分布式锁的处理方法,基于同一发明构思,在本实施例中还提供了一种分布式锁的处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图4是根据本发明实施例的一种分布式锁的处理装置的结构框图,如图4所示,该装置包括:设置模块40,用于通过对象存储的应用程序接口设置上传对象函数中的键值对,其中,键值对包括键名和键值,键名设置为分布式锁的锁名,键值设置为含有目标应用服务器的唯一主机名,锁名由当多个应用服务器并发访问共享数据时待操作目标业务的业务名决定,目标应用服务器为多个应用服务器中任一应用服务器;判断模块42,连接至上述设置模块40,用于根据锁名和目标应用服务器的唯一主机名,判断目标应用服务器是否成功抢占锁资源;操作模块44,连接至上述判断模块42,用于若目标应用服务器成功抢占锁资源,则操作目标业务。

需要强调的是,为进一步保证上述共享数据的私密和安全性,上述共享数据还可以存储于一区块链的节点中。

可选的,上述装置还包括:第一调用模块,用于在根据锁名和目标应用服务器的唯一主机名,判断目标应用服务器是否成功抢占锁资源之前,通过应用程序接口调用上传对象函数;第二调用模块,用于通过应用程序接口调用对象存储中的获取对象函数,以获取键值对。

可选的,共享数据存储于区块链中,判断模块42包括:第一判断单元,用于判断锁名对应的业务名是否位于对象存储中;第二判断单元,用于若业务名位于对象存储中,则判断键值中是否含有目标应用服务器的唯一主机名;第一确定单元,用于若键值中含有目标应用服务器的唯一主机名,则目标应用服务器抢占锁资源成功。

可选的,判断模块42还包括:第二确定单元,用于在判断锁名对应的业务名是否位于对象存储中之后,若键名没有位于对象存储中,则确定没有应用服务器抢占锁资源,通过应用程序接口重新设置上传对象函数中的键值对;第一执行单元,用于执行判断锁名对应的业务名是否位于对象存储中的步骤。

可选的,判断模块42还包括:第三确定单元,用于执行步骤a,在判断键值中是否含有目标应用服务器的唯一主机名之后,若键值中没有目标应用服务器的唯一主机名,则目标应用服务器抢占锁资源失败;更新单元,用于执行步骤b,更新上传对象函数中的键值为第一应用服务器的唯一主机名,其中,第一应用服务器为多个应用服务器中除目标应用服务器之外的任一应用服务器;第二执行单元,用于执行步骤c,执行通过应用程序接口调用对象存储中的获取对象函数的步骤,以获取获取对象函数中的更新键值;判断单元,用于执行步骤d,判断更新键值中是否含有第一应用服务器的唯一主机名;处理单元,用于执行步骤e,若更新键值中含有第一应用服务器的主机名,则第一应用服务器抢占锁资源成功;否则,返回执行步骤b,步骤c,步骤d。

可选的,上述装置还包括:第一删除模块,用于在操作目标业务之后,删除对象存储中的锁名,以释放锁资源。

可选的,若键值中还包含键值设置为含有目标应用服务器的唯一主机名的初始时间,上述装置还包括:更新模块,用于在操作目标业务成功之前,更新初始时间为当前时间;监测模块,用于基于初始时间和当前时间监测目标应用服务器访问共享数据的时间戳;比较模块,用于将时间戳与预设时间进行比较;第二删除模块,用于若时间戳大于或等于预设时间,则删除对象存储中的锁名,以释放锁资源。

需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。

本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:

S1,通过对象存储的应用程序接口设置上传对象函数中的键值对,其中,所述键值对包括键名和键值,所述键名设置为分布式锁的锁名,所述键值设置为含有目标应用服务器的唯一主机名,所述锁名由当多个应用服务器并发访问共享数据时待操作目标业务的业务名决定,所述目标应用服务器为所述多个应用服务器中任一应用服务器;

S2,根据所述锁名和所述目标应用服务器的唯一主机名,判断所述目标应用服务器是否成功抢占锁资源;

S3,若所述目标应用服务器成功抢占锁资源,则操作所述目标业务。

可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。

需要强调的是,为进一步保证上述共享数据的私密和安全性,上述共享数据还可以存储于一区块链的节点中。

基于上述图2所示方法和图4所示装置的实施例,为了实现上述目的,本申请实施例还提供了一种电子设备,如图5所示,包括存储器52和处理器51,其中存储器52和处理器51均设置在总线53上存储器52存储有计算机程序,处理器51执行计算机程序时实现图2所示的分布式锁的处理方法。

基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个存储器(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台电子设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施场景所述的方法。

可选地,该设备还可以连接用户接口、网络接口、摄像头、射频(Radio Frequency,RF)电路,传感器、音频电路、WI-FI模块等等。用户接口可以包括显示屏(Display)、输入单元比如键盘(Keyboard)等,可选用户接口还可以包括USB接口、读卡器接口等。网络接口可选的可以包括标准的有线接口、无线接口(如蓝牙接口、WI-FI接口)等。

本领域技术人员可以理解,本实施例提供的一种电子设备的结构并不构成对该实体设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。

可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 分布式锁的处理方法及装置、电子设备、存储介质
  • 分布式锁的调用方法、装置、电子设备和存储介质
技术分类

06120112966124