CN110032424A - 分布式锁的实现方法和装置 - Google Patents

分布式锁的实现方法和装置 Download PDF

Info

Publication number
CN110032424A
CN110032424A CN201910082414.6A CN201910082414A CN110032424A CN 110032424 A CN110032424 A CN 110032424A CN 201910082414 A CN201910082414 A CN 201910082414A CN 110032424 A CN110032424 A CN 110032424A
Authority
CN
China
Prior art keywords
lock
variable
thread
virtual machine
case
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
Application number
CN201910082414.6A
Other languages
English (en)
Other versions
CN110032424B (zh
Inventor
杨宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced New Technologies Co Ltd
Advantageous New Technologies Co Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201910082414.6A priority Critical patent/CN110032424B/zh
Publication of CN110032424A publication Critical patent/CN110032424A/zh
Application granted granted Critical
Publication of CN110032424B publication Critical patent/CN110032424B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2336Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
    • G06F16/2343Locking methods, e.g. distributed locking or locking implementation details
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本说明书实施例提供分布式锁的实现方法和装置,在分布式锁的实现中,一方面,对于多个用户针对第一业务的业务请求,先针对锁定对象获取第一虚拟机锁,且在每个虚拟机内部,锁定对象与第一虚拟机锁唯一对应,可以通过分布的虚拟机锁对业务请求进行过滤;另一方面,对多个虚拟机针对虚拟机过滤出的业务请求,进一步通过数据库锁竞争机制进行过滤,以保证在同一时间对于一个锁定对象只能有线程执行数据库操作。如此,可以提高分布式锁的有效性。

Description

分布式锁的实现方法和装置
技术领域
本说明书一个或多个实施例涉及计算机技术领域,尤其涉及通过计算机在分布式系统中对数据库进行加锁的方法和装置。
背景技术
分布式架构是分布在多个处理器运行或分布在多个存储器存储的架构方式。许多大型服务器都通过分布式架构实现。分布式系统之间的数据一致性,是一个重要问题。通常,通过保证在同一时间一个方法只能被一个线程执行来保证数据的一致性。
为了保证同一时间一个方法只能被一个线程执行,常规技术提供了分布式锁的方法,用于保证同一个方法在同一时间被一个线程锁定。常用的分布式锁有基于数据库锁表、基于数据库排他锁、基于缓存分布式锁等。这些技术有的可能不能适应高并发的情况、有的可能因为解锁失败或分布式锁时效影响业务、有的可能将行级锁变成表锁而存在高风险。
因此,希望能有改进的方案,提供稳定的分布式锁方式,能够适应高并发情况,提高分布式系统的有效性。
发明内容
本说明书一个或多个实施例描述了一种分布式锁的实现方法和装置,针对多个用户的业务请求,先通过分布的虚拟机锁在锁定对象的维度上对业务请求进行过滤,针对虚拟机锁过滤后的业务请求,再进一步通过数据库锁从锁定对象的维度保证在同一时间,针对锁定对象的业务只能被一个线程执行,既能适应高并发的业务请求,又能保证系统的稳定性,从而可以提高分布式系统的有效性。
根据第一方面,提供了一种分布式锁的实现方法,所述方法包括:接收第一用户针对第一业务发起的业务请求;根据所述业务请求获取第一虚拟机锁,其中,所述第一虚拟机锁与预设的锁定对象唯一对应,所述锁定对象包括以下一项或多项:所述第一用户、所述第一业务;在获取到所述第一虚拟机锁的情况下,针对所述锁定对象创建数据库锁,以根据所述业务请求对所述数据库进行与所述锁定对象相关的数据操作。
在一些实施例中,根据所述业务请求获取第一虚拟机锁包括:从第一线程的线程变量中查询第一虚拟机锁对应的第一锁变量,其中,所述第一线程是基于所述业务请求而创建,用于完成所述第一业务,所述第一线程维护至少一个线程变量,所述第一锁变量是与所述锁定对象唯一对应的、至多允许一个线程获取的互斥量,所述第一锁变量在加锁成功的情况下,被添加到所述第一线程的线程变量;在从所述线程变量中查询到所述第一锁变量的情况下,确定获取到所述第一虚拟机锁。
在一些实施例中,所述根据所述业务请求获取第一虚拟机锁还包括:在从所述线程变量中查询不到所述第一锁变量的情况下,查询锁变量集中是否记录有所述第一锁变量,其中,所述锁变量集用于记录当前存在的各个锁变量以及各个锁变量的使用状态;在所述锁变量集记录有所述第一锁变量的情况下,检测所述第一锁变量是否被第二线程锁定;在所述第一锁变量没有被第二线程锁定的情况下,对所述第一锁变量加锁以获取所述第一虚拟机锁,并响应于加锁成功,将所述第一锁变量添加到所述第一线程的线程变量,以及确定获取到所述第一虚拟机锁。
在一些实施例中,在所述第一锁变量被第二线程锁定的情况下,确定获取所述第一锁变量失败,从而确定获取所述第一虚拟机锁失败。
在一些实施例中,在从所述锁变量集查询不到所述第一锁变量的情况下,创建所述第一锁变量,并将所述第一锁变量添加到所述锁变量集;对所述第一锁变量加锁以获取所述第一虚拟机锁;在对所述第一锁变量加锁成功的情况下,更新所述锁变量集中所述第一锁变量的使用状态,并将所述第一锁变量添加到所述第一线程的线程变量,以及确定获取到所述第一虚拟机锁。
在一些实施例中,在获取所述第一虚拟机锁失败的情况下:释放所述第一线程;或者,将所述第一线程确定为所述第一虚拟机锁的等待线程。
在一些实施例中,在所述第一线程结束时,从所述第一线程的线程变量中获取所述第一锁变量以进行解锁,并将所述第一锁变量从所述第一线程的线程变量中移除。
在一些实施例中,所述将所述第一锁变量从所述线程变量中移除包括:将所述第一锁变量从所述第一线程的线程变量中移入所述锁变量集。
在一些实施例中,所述针对所述锁定对象创建数据库锁包括:向数据库插入第一锁数据,所述第一锁数据包含所述锁定对象的目标标识,以锁定与所述锁定对象对应的第一数据,并基于所述第一数据进行与所述锁定对象相关的数据操作。
在一些实施例中,所述方法还包括:在所述数据操作完成的情况下,删除所述第一锁数据。
在一些实施例中,所述方法还包括:在删除所述第一锁数据失败的情况下,通过按照预定时间间隔执行的定时任务对所述第一锁数据进行清理,其中,所述定时任务用于清理所述数据库中超过预定时长的锁数据记录。
根据第二方面,提供一种分布式锁的实现装置,所述装置包括:接收单元,配置为接收第一用户针对第一业务发起的业务请求;第一加锁单元,配置为根据所述业务请求获取第一虚拟机锁,其中,所述第一虚拟机锁与预设的锁定对象唯一对应,所述锁定对象包括以下一项或多项:所述第一用户、所述第一业务;第二加锁单元,配置为在获取到所述第一虚拟机锁的情况下,针对所述锁定对象创建数据库锁,以根据所述业务请求对所述数据库进行与所述锁定对象相关的数据操作。
根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
通过本说明书实施例提供的分布式锁的实现方法、装置及系统,在分布式锁的实现中,一方面,对于多个用户针对各个业务的业务请求,先将业务和/或用户作为锁定对象,通过第一虚拟机锁进行过滤,且在每个虚拟机内部,锁定对象与虚拟机锁唯一对应,从而通过分布的虚拟机锁从各个业务请求中针对一个锁定对象过滤出至多一个业务请求,大大减少竞争数据库锁的并发量;另一方面,对多个虚拟机过滤出的业务请求,进一步通过数据库锁竞争机制,保证在同一时间针对同一个锁定对象只能有一个业务请求进行数据库操作,满足预定的业务规则。如此,既能适应高并发的业务请求,又能保证系统的稳定性,从而可以提高分布式系统的有效性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出本说明书实施例的实施架构示意图;
图2示出根据一个实施例的分布式锁的实现方法的流程图;
图3示出一个具体例子中一个业务请求获取第一虚拟机锁的流程图;
图4示出一个具体例子中,针对一个业务请求获取数据库锁的流程图;
图5示出根据一个实施例的分布式锁的实现装置的示意性框图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
图1是本说明书实施例的一个实施架构示意图。在该实施架构中,服务在n台虚拟机上分布式部署。这n台虚拟机可以运行在相同的物理设备上,也可以分别运行在不同的设备上。多个用户的业务请求被随机分配至n台虚拟机。如图1所示,每台虚拟机被分配不同数量的业务请求。对每台虚拟机而言,可以针对不同的锁定对象设定不同的虚拟机锁,并且每个虚拟机锁唯一对应一个锁定对象。其中的锁定对象可以根据具体业务场景下预设的业务需求确定,其可以是用户(一个用户对应一个虚拟机锁),也可以是业务(一个业务对应一个虚拟机锁),还可以是用户和业务(一个用户的一个业务对应一个虚拟机锁)。例如,在用户与金融服务器签约,签约协议有多个(对应多个业务)的场景下,锁定对象可以是用户,这样,一个用户同一时间只能与服务器进行一个签约协议的签约,锁定对象也可以是业务(如一个业务对应其中一个签约协议),这样,服务器同一时间对一个签约协议只能与一个用户进行签约。
如此,对于每台虚拟机接收的业务请求,针对每个锁定对象只发放一个虚拟机锁,也就是说,相同的锁定对象只有一个业务线程可以得到虚拟机锁,通过虚拟机锁进入下一步骤。这样,对于一个锁定对象而言,在同一时刻,每个虚拟机至多过滤出一个业务请求(业务线程),n台虚拟机至多过滤出n个业务请求(对应n个业务线程)。
进一步地,在同一时刻,对于同一个锁定对象而言,至多n个业务线程向数据库请求数据库锁,且有一个业务线程请求数据库锁成功,保证在同一时间只能有一个线程锁定上述锁定对象对应的数据。这样使得同一数据库锁的最大并发数量为n,大大减少了数据库锁的并发请求。再者,由于虚拟机锁分布在多个虚拟机上,也保证了系统的稳定性,可更好地适应高并发情况。下面具体描述分布式锁的实现过程。
图2示出根据一个实施例的分布式锁的实现方法流程图。其中,图2示出的方法的执行主体例如是图1中的虚拟机。该虚拟机可以是提供分布式服务的n台虚拟机中的任意一台。如图2所示,分布式锁的实现方法包括以下步骤:步骤21,接收第一用户针对第一业务发起的业务请求;步骤22,根据业务请求获取第一虚拟机锁,其中,第一虚拟机锁与预设的锁定对象唯一对应,锁定对象包括以下一项或多项:第一用户、第一业务;步骤23,在获取到第一虚拟机锁的情况下,针对锁定对象创建数据库锁,以根据业务请求对数据库进行与锁定对象相关的数据操作。
首先,在步骤21中,接收第一用户针对第一业务发起的业务请求。可以理解,这里的第一用户、第一业务中的“第一”并不表示特指,而是泛指某一、任一。第一用户和第一业务也不表示对应关系,也就是说,第一用户请求的可以是第一业务,也可以是第二业务,等等。同理,第一用户可以请求第一业务,第二用户、第三用户……也可以请求第一业务。用户可以是虚拟机所服务的客户端用户,不同的用户通过登录设备、账户(user ID)等进行区分。在前述的用户与金融服务器签约的例子中,第一业务例如可以是与金融服务器中某个签约协议进行签约等等业务中的任一业务,在此不做限定。
如图1所示,多个用户向服务端发送业务请求时,业务请求可能被随机分配至各个虚拟机。在本步骤中,某个用户(第一用户)针对某个业务(第一业务)的业务请求被分配至作为本实施例执行主体的虚拟机。虚拟机可以直接接收第一用户的该业务请求,也可以经过设在n台虚拟机之前的分配服务器接收第一用户的该业务请求,在此不做限定。
接着,通过步骤22,根据业务请求获取第一虚拟机锁。这是为了过滤出针对预设的锁定对象的唯一业务请求,其中,第一虚拟机锁与预设的锁定对象唯一对应。也就是说,一台虚拟机针对同一锁定对象,至多给出一把虚拟机锁,获得这把虚拟机锁的业务请求才能继续后续操作。这样,可以保证同一时间,一台虚拟机对一个锁定对象至多允许一个业务请求通过。其中,锁定对象可以理解为虚拟机锁锁定数据时所针对的对象。在本实施例中,锁定对象可以是上述第一用户,也可以是第一业务,在此不做限定。
实际应用中,虚拟机在接收到业务请求时,可以创建一个线程,用于处理对应的业务。其中,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程只拥有在运行中必不可少的少量资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。在对应的业务处理完毕的情况下,线程就会结束。针对任一个业务请求,都可以创建相应的线程。例如,在当前时刻,用户A针对第一业务发起业务请求,可以根据用户A的业务请求创建第一业务的线程a,用户B也针对第一业务发起业务请求,可以根据用户B的业务请求创建第一业务的线程b,且线程a和线程b相互独立。
相应地,在一个实施例中,针对第一用户的第一业务创建的第一线程,可以基于相应的业务请求而创建,用于完成该第一用户的第一业务。第一进程可以维护至少一个线程变量,作为必要资源。第一锁变量可以是预先指定的互斥量,该互斥量与锁定对象唯一对应,且至多允许一个线程获取。举例而言:如果锁定对象为用户,那么同一个用户的业务线程中,在一台虚拟机内部同一时刻只有一个线程可以获取虚拟机锁;如果锁定对象为业务,那么同一个业务的业务线程中,在一台虚拟机内部同一时刻只有一个线程可以获取虚拟机锁;等等。
可以理解,虚拟机锁是个形象的说法,其实际可能是通过变量实现的。例如针对一个业务可以指定一个锁变量,获取虚拟机锁就意味着获取相应的锁变量。而获取锁变量,可以通过诸如在被允许使用锁变量的情况下,将锁变量加锁的方法实现。锁变量被加锁成功之后,还可以被添加到相应的业务线程,以供该业务线程重复使用该虚拟机锁时,可以从业务线程中确定当前线程是否拥有相应的虚拟机锁,或者释放虚拟机锁(对锁变量进行解锁)时,从当前业务线程中获取锁变量并进行解锁。
具体地,为了使锁变量同一时间至多允许一个线程获取,一台虚拟机可以通过一个统一的锁变量集来管理各个业务对应的锁变量。该锁变量集可以记录各个业务对应的锁变量是否创建,以及已创建的锁变量的使用状态,即是否被其他线程获取。锁变量集可以通过各种锁变量标识(ID)来记录锁变量。该使用状态例如可以通过标志位等来记录,例如1表示被其他线程锁定,0表示未被其他线程锁定。锁变量集可以通过列表、集合等各种合理方式实现,在此不做限定。可选地,锁变量集可以利用虚拟机的公共容器“ConcurrentReferenceHashMap”实现。“ConcurrentReferenceHashMap”中,各个锁变量对应的接口“Entry”,在实现过程中可以通过“Weak Reference”(弱引用)的方式,以便锁变量在预定时间内没有被任何线程使用时及时被清理掉。
在这样的前提下,根据一个可能的设计,针对第一用户关于第一业务的业务请求,可以在针对第一虚拟机锁对应的锁变量加锁成功后,将第一锁变量作为第一线程的线程变量记录,以便下次使用时从第一线程获取第一虚拟机锁,用于在一次业务中重复使用或进行解锁。第一锁变量被解锁之后,还可以重新将第一锁变量释放到锁变量集,以供其他线程使用。例如前述的用户与金融服务器签约的例子中,锁定对象为用户,第一用户与X签约协议的业务请求对应的线程对针对第一用户的第一虚拟机锁使用完毕后,放入锁变量集,之后第一用户与Y签约协议的业务请求对应的线程可以获取该第一虚拟机锁,完成第一用户与Y签约协议的签约业务。
如此,在实际使用时,如图3所示,在第一线程需要虚拟机锁时,可以先从第一线程的线程变量中查询第一虚拟机锁的第一锁变量,如果第一线程的线程变量中存在第一锁变量,则表明第一线程已成功获取第一虚拟机锁。
继续参考图3。另一方面,在第一线程的线程变量中不存在第一锁变量的情况下,根据一个实施例,还可以进一步查询锁变量集中是否记录有该第一锁变量。如果锁变量集记录有该第一锁变量,再进一步检测其是否被其他线程,例如第二线程锁定。如果没有,则获取第一锁变量对其加锁。在一个具体实现中,该加锁过程例如可以通过“TryLock”方法实现,并可以具体为诸如synchronized、reentrantlock之类的形式,在此不再赘述。响应于对第一锁变量加锁成功,可以进一步将第一锁变量添加到第一线程的线程变量中,并确定为第一线程获取到第一虚拟机锁。
可以理解,在锁变量集记录有第一锁变量的情况下,第一锁变量还可能被第二线程锁定。因此,在另一个实施例中,如图3所示,如果第一锁变量的使用状态为被第二线程锁定,则可以确定获取第一锁变量失败,从而确定为第一用户获取第一虚拟机锁失败。此时,可以让第一线程继续等待获取第一虚拟机锁,也可以将第一线程“挂起”,等待被唤醒,还可以将第一线程释放,在此不做限定。
如图3所示,在一些实施例中,还可能在锁变量集中查询不到第一锁变量。也就是说,针对该锁定对象,暂时没有线程使用第一虚拟机锁。此时,可以针对该锁定对象创建第一锁变量,并加入锁变量集。接着,还可以令当前线程,即第一线程,试图将第一锁变量加锁。如果加锁成功,则可以在锁变量集中更新第一锁变量的使用状态,如更新为被锁定。另外,还可以将第一锁变量添加到第一线程的线程变量,并确定第一线程获取第一虚拟机锁。也可以理解为,针对第一用户的业务请求,将第一虚拟机锁分配给第一业务。如果加锁失败,则确定获取第一虚拟机锁失败,可以让第一线程继续等待获取第一虚拟机锁,也可以将第一线程“挂起”,等待被唤醒,还可以将第一线程释放,在此不做限定。
进一步地,如果获取第一虚拟机锁成功,在第一线程结束时,即上述业务请求处理完毕的情况下,可以再次从第一线程的线程变量中获取第一锁变量,对第一锁变量解锁,并将第一锁变量从线程变量中移除。从而,完成第一线程对第一虚拟机锁的解锁过程。如此,可以及时释放第一锁变量,以供其他线程获取。可选地,可以将第一锁变量放回锁变量集,并将锁变量集中第一锁变量的使用状态修改为“未锁定”。
如图1所示,本说明书实施例的实施架构中,为各个业务请求分配虚拟机锁,是为了对同一锁定对象的各个业务请求进行初步过滤,允许有限数量的业务请求继续后续流程,降低数据库的高并发度,以及高并发导致的各种风险,保持系统的稳定性。那么,在接下来的步骤23中,在获取到第一虚拟机锁的情况下,还可以针对锁定对象创建数据库锁,以根据业务请求对数据库进行与锁定对象相关的数据操作。如果将步骤22中获取虚拟机锁的过程理解为本实施例的执行主体(如图1示出的任一台虚拟机),内部的资源分配或竞争,那么本步骤23中获取数据库锁的过程则可以理解为各个执行主体(如图1所示的各台虚拟机)之间的资源分配或竞争。
如图4所示,根据一个实施方式,可以针对第一用户向数据库插入一条锁数据。这里,称该所数据为第一锁数据。其中,该第一锁数据可以包含与锁定对象(第一用户或第一业务)唯一对应的目标标识,如用户标识(user ID)等。如此,可以锁定数据库中与该第一用户相关的第一数据。以便基于第一数据进行与锁定对象相关的操作,例如,前述的用户与金融服务器签约的例子中,与锁定对象用户A相关的数据操作——用户A与金融服务器进行的签约协议签约操作。
进一步地,在一个实施例中,数据操作完成,可以删除该第一锁数据。在具体实现中,第一锁数据还可能删除失败。因此,还可以设定与业务请求无关的定时任务,按照预定时间间隔清理插入数据库超过预定时长的锁数据。例如,定时任务每分钟执行一次,清理插入数据库超过1分钟的锁数据,也就是说,每次定时任务清理在上次定时任务进行之前插入数据库的锁数据。如此,可以避免解锁失败导致的数据丢失或后续业务的失败。
回顾以上过程,在分布式锁的实现中,一方面,对于多个用户针对第一业务的业务请求,先针对锁定对象获取第一虚拟机锁,且在每个虚拟机内部,锁定对象与第一虚拟机锁唯一对应,可以通过分布的虚拟机锁在锁定对象维度对业务请求进行过滤,从而减少数据库的并发量;另一方面,对多个虚拟机过滤出的业务请求,进一步通过数据库锁竞争机制,从锁定对象维度进行过滤,以保证在同一时间针对同一个锁定对象只能有一个业务请求进行数据库操作。如此,既能适应高并发的业务请求,又能保证系统的稳定性,从而可以提高分布式系统的有效性。
根据另一方面的实施例,还提供一种分布式锁的实现装置,适用于图1所示的各个虚拟机。图5示出根据一个实施例的分布式锁的实现示意性框图。如图5所示,分布式锁的实现装置500包括:接收单元51,配置为接收第一用户针对第一业务发起的业务请求;第一加锁单元52,配置为根据业务请求获取第一虚拟机锁,其中,第一虚拟机锁与预设的锁定对象唯一对应,锁定对象包括以下一项或多项:第一用户、第一业务;第二加锁单元53,配置为在获取到第一虚拟机锁的情况下,针对锁定对象创建数据库锁,以根据业务请求对数据库进行与锁定对象相关的数据操作。
根据一个实施方式,第一加锁单元52进一步可以配置为:
从第一线程的线程变量中查询第一虚拟机锁对应的第一锁变量,在从线程变量中查询到第一锁变量的情况下,确定获取到第一虚拟机锁。
其中,第一线程是基于业务请求而创建,用于完成上述第一业务。第一线程可以维护至少一个线程变量。第一锁变量是与锁定对象唯一对应的、至多允许一个线程获取的互斥量。第一锁变量在加锁成功的情况下,被添加到第一线程的线程变量。一个线程对该第一锁变量加锁成功,意味着获取到第一虚拟机锁。
进一步地,在一个实施例中,第一加锁单元52还可以配置为:
在从线程变量中查询不到第一锁变量的情况下,查询锁变量集中是否记录有第一锁变量,若是,检测第一锁变量是否被第二线程锁定,并在第一锁变量没有被第二线程锁定的情况下,对第一锁变量加锁以获取第一虚拟机锁。响应于对第一锁变量加锁成功,可以将第一锁变量添加到第一线程的线程变量,并确定获取到第一虚拟机锁。
其中,上述锁变量集用于记录当前存在的各个锁变量以及各个锁变量的使用状态。
在另一方面的实施例中,在第一锁变量被第二线程锁定的情况下,第一加锁单元52还可以确定获取第一锁变量失败,从而获取第一虚拟机锁失败。
在又一方面的实施例中,在从锁变量集查询不到第一锁变量的情况下,第一加锁单元52还可以创建第一锁变量,并将第一锁变量添加到锁变量集,然后对锁变量加锁以获取第一虚拟机锁。在对第一锁变量加锁成功的情况下,第一加锁单元52还可以更新锁变量集中第一锁变量的使用状态,并将第一锁变量添加到第一线程的线程变量。这也意味着,第一线程获取到所述第一虚拟机锁。
在进一步的实施例中,如果获取第一虚拟机锁失败,第一加锁单元52还可以:释放第一线程,或者将第一线程确定为第一虚拟机锁的等待线程,在此不做限定。
在一个可能的设计中,在所述第一线程结束时,第一加锁单元52还可以从第一线程的线程变量中获取第一锁变量进行解锁,并将第一锁变量从第一线程的线程变量中移除。可选地,第一加锁单元52可以将第一锁变量从第一线程的线程变量中移入锁变量集。
根据一种实施方式,第二加锁单元53还可以配置为:向数据库插入第一锁数据,其中,第一锁数据包含锁定对象的目标标识,以锁定与锁定对象对应的第一数据,并基于第一数据进行与锁定对象相关的数据操作。
在一个实施例中,在数据操作完成的情况下,第二加锁单元53可以删除第一锁数据,已完成数据锁的解锁。
在进一步的实施例中,装置500还可以包括清理单元(未示出),可以配置为:按照预定时间间隔执行的定时任务对数据库中的、超过预定时长的锁数据记录进行清理。如此,在删除第一锁数据失败的情况下,还可以通过定时任务清理第一锁数据。
值得说明的是,图5所示的装置500是与图2示出的方法实施例相对应的装置实施例,图2示出的方法实施例中的相应描述同样适用于装置500,在此不再赘述。
通过以上装置,针对多个用户的业务请求,先通过分布的虚拟机锁对业务请求进行过滤,针对虚拟机锁过滤后的业务请求,再进一步通过数据库锁保证在同一时间同一个锁定对象的数据只能被一个业务请求进行操作,既能适应高并发的业务请求,又能保证系统的稳定性,从而可以提高分布式系统的有效性。
如此,根据本说明书的实施例,可以提供一种分布式锁的实现系统。该分布式锁的实现系统请参考图1所示。该系统可以包括多个图5示出的装置,每个装置可以设于图1所示的一台虚拟机中。各个装置可以分别配置为:接收多个用户针对各个业务发起的业务请求;根据业务请求确定获取到虚拟机锁的各个业务请求,其中,各个虚拟机锁与各个预设的锁定对象唯一对应,所述锁定对象包括,各个用户和/或各个业务;针对获取到虚拟机锁的各个业务请求,分别获取针对各个锁定对象的数据库锁,以根据获取到数据库锁的业务请求对数据库进行相关的数据操作。其中,各个数据库锁与各个锁定对象唯一对应。如此,对于同一锁定对象,在同一时间只能获取一把数据库锁。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2所述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。

Claims (24)

1.一种分布式锁的实现方法,所述方法包括:
接收第一用户针对第一业务发起的业务请求;
根据所述业务请求获取第一虚拟机锁,其中,所述第一虚拟机锁与预设的锁定对象唯一对应,所述锁定对象包括以下一项或多项:所述第一用户、所述第一业务;
在获取到所述第一虚拟机锁的情况下,针对所述锁定对象创建数据库锁,以根据所述业务请求对所述数据库进行与所述锁定对象相关的数据操作。
2.根据权利要求1所述的方法,其中,根据所述业务请求获取第一虚拟机锁包括:
从第一线程的线程变量中查询第一虚拟机锁对应的第一锁变量,其中,所述第一线程是基于所述业务请求而创建,用于完成所述第一业务,所述第一线程维护至少一个线程变量,所述第一锁变量是与所述锁定对象唯一对应的、至多允许一个线程获取的互斥量,所述第一锁变量在加锁成功的情况下,被添加到所述第一线程的线程变量;
在从所述线程变量中查询到所述第一锁变量的情况下,确定获取到所述第一虚拟机锁。
3.根据权利要求2所述的方法,其中,所述根据所述业务请求获取第一虚拟机锁还包括:
在从所述线程变量中查询不到所述第一锁变量的情况下,查询锁变量集中是否记录有所述第一锁变量,其中,所述锁变量集用于记录当前存在的各个锁变量以及各个锁变量的使用状态;
在所述锁变量集记录有所述第一锁变量的情况下,检测所述第一锁变量是否被第二线程锁定;
在所述第一锁变量没有被第二线程锁定的情况下,对所述第一锁变量加锁以获取所述第一虚拟机锁,并响应于加锁成功,将所述第一锁变量添加到所述第一线程的线程变量,以及确定获取到所述第一虚拟机锁。
4.根据权利要求3所述的方法,其中:
在所述第一锁变量被第二线程锁定的情况下,确定获取所述第一锁变量失败,从而确定获取所述第一虚拟机锁失败。
5.根据权利要求3所述的方法,其中:
在从所述锁变量集查询不到所述第一锁变量的情况下,创建所述第一锁变量,并将所述第一锁变量添加到所述锁变量集;
对所述第一锁变量加锁以获取所述第一虚拟机锁;
在对所述第一锁变量加锁成功的情况下,更新所述锁变量集中所述第一锁变量的使用状态,并将所述第一锁变量添加到所述第一线程的线程变量,以及确定获取到所述第一虚拟机锁。
6.根据权利要求4所述的方法,其中,在获取所述第一虚拟机锁失败的情况下:
释放所述第一线程;或者
将所述第一线程确定为所述第一虚拟机锁的等待线程。
7.根据权利要求3所述的方法,其中,在所述第一线程结束时,从所述第一线程的线程变量中获取所述第一锁变量进行解锁,并将所述第一锁变量从所述第一线程的线程变量中移除。
8.根据权利要求7所述的方法,其中,所述将所述第一锁变量从所述线程变量中移除包括:
将所述第一锁变量从所述第一线程的线程变量中移入所述锁变量集。
9.根据权利要求1所述的方法,其中,所述针对所述锁定对象创建数据库锁包括:
向数据库插入第一锁数据,所述第一锁数据包含所述锁定对象的目标标识,以锁定与所述锁定对象对应的第一数据,并基于所述第一数据进行与所述锁定对象相关的数据操作。
10.根据权利要求9所述的方法,其中,所述方法还包括:
在所述数据操作完成的情况下,删除所述第一锁数据。
11.根据权利要求10所述的方法,其中,所述方法还包括:
在删除所述第一锁数据失败的情况下,通过按照预定时间间隔执行的定时任务对所述第一锁数据进行清理,其中,所述定时任务用于清理所述数据库中超过预定时长的锁数据记录。
12.一种分布式锁的实现装置,所述装置包括:
接收单元,配置为接收第一用户针对第一业务发起的业务请求;
第一加锁单元,配置为根据所述业务请求获取第一虚拟机锁,其中,所述第一虚拟机锁与预设的锁定对象唯一对应,所述锁定对象包括以下一项或多项:所述第一用户、所述第一业务;
第二加锁单元,配置为在获取到所述第一虚拟机锁的情况下,针对所述锁定对象创建数据库锁,以根据所述业务请求对所述数据库进行与所述锁定对象相关的数据操作。
13.根据权利要求12所述的装置,其中,所述第一加锁单元进一步配置为:
从第一线程的线程变量中查询第一虚拟机锁对应的第一锁变量,其中,所述第一线程是基于所述业务请求而创建,用于完成所述第一业务,所述第一线程维护至少一个线程变量,所述第一锁变量是与所述锁定对象唯一对应的、至多允许一个线程获取的互斥量,所述第一锁变量在加锁成功的情况下,被添加到所述第一线程的线程变量;
在从所述线程变量中查询到所述第一锁变量的情况下,确定获取到所述第一虚拟机锁。
14.根据权利要求13所述的装置,其中,所述第一加锁单元还配置为:
在从所述线程变量中查询不到所述第一锁变量的情况下,查询锁变量集中是否记录有所述第一锁变量,其中,所述锁变量集用于记录当前存在的各个锁变量以及各个锁变量的使用状态;
在所述锁变量集记录有所述第一锁变量的情况下,检测所述第一锁变量是否被第二线程锁定;
在所述第一锁变量没有被第二线程锁定的情况下,对所述第一锁变量加锁以获取所述第一虚拟机锁,并响应于加锁成功,将所述第一锁变量添加到所述第一线程的线程变量,以及确定获取到所述第一虚拟机锁。
15.根据权利要求14所述的装置,其中,所述第一加锁单元还配置为:
在所述第一锁变量被第二线程锁定的情况下,确定获取所述第一锁变量失败,从而确定获取所述第一虚拟机锁失败。
16.根据权利要求14所述的装置,其中,所述第一加锁单元还配置为:
在从所述锁变量集查询不到所述第一锁变量的情况下,创建所述第一锁变量,并将所述第一锁变量添加到所述锁变量集;
对所述锁变量加锁以获取所述第一虚拟机锁;
在对所述第一锁变量加锁成功的情况下,更新所述锁变量集中所述第一锁变量的使用状态,并将所述第一锁变量添加到所述第一线程的线程变量,以及确定获取到所述第一虚拟机锁。
17.根据权利要求15所述的装置,其中,所述第一加锁单元还配置为,在获取所述第一虚拟机锁失败的情况下:
释放所述第一线程;或者
将所述第一线程确定为所述第一虚拟机锁的等待线程。
18.根据权利要求14所述的装置,其中,所述第一加锁单元还配置为:在所述第一线程结束时,从所述第一线程的线程变量中获取所述第一锁变量以进行解锁,并将所述第一锁变量从所述第一线程的线程变量中移除。
19.根据权利要求18所述的装置,其中,所述第一加锁单元还配置为:
将所述第一锁变量从所述第一线程的线程变量中移入所述锁变量集。
20.根据权利要求12所述的装置,其中,所述第二加锁单元还配置为:
向数据库插入第一锁数据,所述第一锁数据包含所述锁定对象的目标标识,以锁定与所述锁定对象对应的第一数据,并基于所述第一数据进行与所述锁定对象相关的数据操作。
21.根据权利要求20所述的装置,其中,所述第二加锁单元还配置为:
在所述数据操作完成的情况下,删除所述第一锁数据。
22.根据权利要求21所述的装置,其中,所述装置还包括清理单元,配置为:
在删除所述第一锁数据失败的情况下,通过按照预定时间间隔执行的定时任务对所述第一锁数据进行清理,其中,所述定时任务用于清理所述数据库中超过预定时长的锁数据记录。
23.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-11中任一项的所述的方法。
24.一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-11中任一项所述的方法。
CN201910082414.6A 2019-01-28 2019-01-28 分布式锁的实现方法和装置 Active CN110032424B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910082414.6A CN110032424B (zh) 2019-01-28 2019-01-28 分布式锁的实现方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910082414.6A CN110032424B (zh) 2019-01-28 2019-01-28 分布式锁的实现方法和装置

Publications (2)

Publication Number Publication Date
CN110032424A true CN110032424A (zh) 2019-07-19
CN110032424B CN110032424B (zh) 2023-10-20

Family

ID=67235526

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910082414.6A Active CN110032424B (zh) 2019-01-28 2019-01-28 分布式锁的实现方法和装置

Country Status (1)

Country Link
CN (1) CN110032424B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110888858A (zh) * 2019-10-29 2020-03-17 北京奇艺世纪科技有限公司 数据库的操作方法和装置、存储介质、电子装置
CN111210270A (zh) * 2020-01-02 2020-05-29 广州虎牙科技有限公司 业务处理方法、装置、服务集群、计算机设备和存储介质
CN111666158A (zh) * 2020-06-23 2020-09-15 中信银行股份有限公司 一种基于Kubernetes的容器调度方法、装置、存储介质及电子设备
CN111752696A (zh) * 2020-06-25 2020-10-09 武汉众邦银行股份有限公司 一种基于rpc及线程锁的分布式定时任务调度方法
CN113626496A (zh) * 2021-07-30 2021-11-09 浪潮云信息技术股份公司 一种分布式唯一id生成方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6920447B2 (en) * 2001-02-15 2005-07-19 Microsoft Corporation Concurrent data recall in a hierarchical storage environment using plural queues
CN101364230A (zh) * 2008-09-24 2009-02-11 金蝶软件(中国)有限公司 一种并发访问控制方法及装置
CN102156928A (zh) * 2011-04-29 2011-08-17 浪潮通信信息系统有限公司 一种通过业务逻辑锁进行系统并发控制的方法
CN105511967A (zh) * 2015-12-28 2016-04-20 曙光云计算技术有限公司 用于云平台的资源对象的管理方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6920447B2 (en) * 2001-02-15 2005-07-19 Microsoft Corporation Concurrent data recall in a hierarchical storage environment using plural queues
CN101364230A (zh) * 2008-09-24 2009-02-11 金蝶软件(中国)有限公司 一种并发访问控制方法及装置
CN102156928A (zh) * 2011-04-29 2011-08-17 浪潮通信信息系统有限公司 一种通过业务逻辑锁进行系统并发控制的方法
CN105511967A (zh) * 2015-12-28 2016-04-20 曙光云计算技术有限公司 用于云平台的资源对象的管理方法和装置

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110888858A (zh) * 2019-10-29 2020-03-17 北京奇艺世纪科技有限公司 数据库的操作方法和装置、存储介质、电子装置
CN110888858B (zh) * 2019-10-29 2023-06-30 北京奇艺世纪科技有限公司 数据库的操作方法和装置、存储介质、电子装置
CN111210270A (zh) * 2020-01-02 2020-05-29 广州虎牙科技有限公司 业务处理方法、装置、服务集群、计算机设备和存储介质
CN111666158A (zh) * 2020-06-23 2020-09-15 中信银行股份有限公司 一种基于Kubernetes的容器调度方法、装置、存储介质及电子设备
CN111752696A (zh) * 2020-06-25 2020-10-09 武汉众邦银行股份有限公司 一种基于rpc及线程锁的分布式定时任务调度方法
CN111752696B (zh) * 2020-06-25 2023-09-12 武汉众邦银行股份有限公司 一种基于rpc及线程锁的分布式定时任务调度方法
CN113626496A (zh) * 2021-07-30 2021-11-09 浪潮云信息技术股份公司 一种分布式唯一id生成方法

Also Published As

Publication number Publication date
CN110032424B (zh) 2023-10-20

Similar Documents

Publication Publication Date Title
CN110032424A (zh) 分布式锁的实现方法和装置
US11994959B2 (en) System and method for transaction recovery in a multitenant application server environment
CN104461744B (zh) 一种资源分配方法及装置
KR101993432B1 (ko) 2-단계 커미트 호출들의 엄격한 순서화에 근거하여 트랜잭션 복구를 지원하는 시스템들 및 방법들
CN110032571A (zh) 业务流程处理方法、装置、存储介质及计算设备
CN102306197B (zh) 保证跨数据源操作结果一致性的装置和方法
CN105653406B (zh) 一种管理分布式存储系统的方法及分布式存储系统
US20110119675A1 (en) Concurrent Data Processing and Electronic Bookkeeping
CN105447029B (zh) 一种数据库故障时的业务处理方法和设备
DE4216871A1 (de) Ausfuehrungsordnen zum sicherstellen der serienherstellbarkeit verteilter transaktionen
CN104793981B (zh) 一种虚拟机集群的在线快照管理方法及装置
EP2501106B1 (en) System and method for session synchronization with independent external systems
CN106708608A (zh) 一种分布式锁服务方法、获取方法及相应装置
CN106293946A (zh) 资源获取的方法及服务器
CN105631006B (zh) 一种数据调度采集装置与方法
CN110019200A (zh) 一种索引的建立、使用方法及装置
CN109189431A (zh) 一种客户端升级方法、装置、设备及可读存储介质
CN105391755B (zh) 一种分布式系统中数据处理方法、装置及系统
CN110535939A (zh) 一种服务发现与抢占方法、装置、计算机设备及存储介质
CN110852571B (zh) 加盟商的房源管理方法、计算机可读存储介质及服务器
CN109522092A (zh) 一种云管平台纳管虚拟机方法和装置
CN108446167A (zh) 一种分布式事务处理方法及系统
CN108829709A (zh) 分布式数据库管理方法、装置、存储介质和处理器
CN112685142A (zh) 分布式数据处理系统
CN109901933A (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
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20201015

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Applicant after: Innovative advanced technology Co.,Ltd.

Address before: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Applicant before: Advanced innovation technology Co.,Ltd.

Effective date of registration: 20201015

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Applicant after: Advanced innovation technology Co.,Ltd.

Address before: A four-storey 847 mailbox in Grand Cayman Capital Building, British Cayman Islands

Applicant before: Alibaba Group Holding Ltd.

GR01 Patent grant
GR01 Patent grant