分布式锁的实现方法和装置制造方法及图纸

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

Implementation Method and Device of Distributed Lock

【技术实现步骤摘要】
分布式锁的实现方法和装置
本说明书一个或多个实施例涉及计算机
,尤其涉及通过计算机在分布式系统中对数据库进行加锁的方法和装置。
技术介绍
分布式架构是分布在多个处理器运行或分布在多个存储器存储的架构方式。许多大型服务器都通过分布式架构实现。分布式系统之间的数据一致性,是一个重要问题。通常,通过保证在同一时间一个方法只能被一个线程执行来保证数据的一致性。为了保证同一时间一个方法只能被一个线程执行,常规技术提供了分布式锁的方法,用于保证同一个方法在同一时间被一个线程锁定。常用的分布式锁有基于数据库锁表、基于数据库排他锁、基于缓存分布式锁等。这些技术有的可能不能适应高并发的情况、有的可能因为解锁失败或分布式锁时效影响业务、有的可能将行级锁变成表锁而存在高风险。因此,希望能有改进的方案,提供稳定的分布式锁方式,能够适应高并发情况,提高分布式系统的有效性。
技术实现思路
本说明书一个或多个实施例描述了一种分布式锁的实现方法和装置,针对多个用户的业务请求,先通过分布的虚拟机锁在锁定对象的维度上对业务请求进行过滤,针对虚拟机锁过滤后的业务请求,再进一步通过数据库锁从锁定对象的维度保证在同一时间,针对锁定对象的业务只能被一个线程执行,既能适应高并发的业务请求,又能保证系统的稳定性,从而可以提高分布式系统的有效性。根据第一方面,提供了一种分布式锁的实现方法,所述方法包括:接收第一用户针对第一业务发起的业务请求;根据所述业务请求获取第一虚拟机锁,其中,所述第一虚拟机锁与预设的锁定对象唯一对应,所述锁定对象包括以下一项或多项:所述第一用户、所述第一业务;在获取到所述第一虚拟机锁的情况下,针对所述锁定对象创建数据库锁,以根据所述业务请求对所述数据库进行与所述锁定对象相关的数据操作。在一些实施例中,根据所述业务请求获取第一虚拟机锁包括:从第一线程的线程变量中查询第一虚拟机锁对应的第一锁变量,其中,所述第一线程是基于所述业务请求而创建,用于完成所述第一业务,所述第一线程维护至少一个线程变量,所述第一锁变量是与所述锁定对象唯一对应的、至多允许一个线程获取的互斥量,所述第一锁变量在加锁成功的情况下,被添加到所述第一线程的线程变量;在从所述线程变量中查询到所述第一锁变量的情况下,确定获取到所述第一虚拟机锁。在一些实施例中,所述根据所述业务请求获取第一虚拟机锁还包括:在从所述线程变量中查询不到所述第一锁变量的情况下,查询锁变量集中是否记录有所述第一锁变量,其中,所述锁变量集用于记录当前存在的各个锁变量以及各个锁变量的使用状态;在所述锁变量集记录有所述第一锁变量的情况下,检测所述第一锁变量是否被第二线程锁定;在所述第一锁变量没有被第二线程锁定的情况下,对所述第一锁变量加锁以获取所述第一虚拟机锁,并响应于加锁成功,将所述第一锁变量添加到所述第一线程的线程变量,以及确定获取到所述第一虚拟机锁。在一些实施例中,在所述第一锁变量被第二线程锁定的情况下,确定获取所述第一锁变量失败,从而确定获取所述第一虚拟机锁失败。在一些实施例中,在从所述锁变量集查询不到所述第一锁变量的情况下,创建所述第一锁变量,并将所述第一锁变量添加到所述锁变量集;对所述第一锁变量加锁以获取所述第一虚拟机锁;在对所述第一锁变量加锁成功的情况下,更新所述锁变量集中所述第一锁变量的使用状态,并将所述第一锁变量添加到所述第一线程的线程变量,以及确定获取到所述第一虚拟机锁。在一些实施例中,在获取所述第一虚拟机锁失败的情况下:释放所述第一线程;或者,将所述第一线程确定为所述第一虚拟机锁的等待线程。在一些实施例中,在所述第一线程结束时,从所述第一线程的线程变量中获取所述第一锁变量以进行解锁,并将所述第一锁变量从所述第一线程的线程变量中移除。在一些实施例中,所述将所述第一锁变量从所述线程变量中移除包括:将所述第一锁变量从所述第一线程的线程变量中移入所述锁变量集。在一些实施例中,所述针对所述锁定对象创建数据库锁包括:向数据库插入第一锁数据,所述第一锁数据包含所述锁定对象的目标标识,以锁定与所述锁定对象对应的第一数据,并基于所述第一数据进行与所述锁定对象相关的数据操作。在一些实施例中,所述方法还包括:在所述数据操作完成的情况下,删除所述第一锁数据。在一些实施例中,所述方法还包括:在删除所述第一锁数据失败的情况下,通过按照预定时间间隔执行的定时任务对所述第一锁数据进行清理,其中,所述定时任务用于清理所述数据库中超过预定时长的锁数据记录。根据第二方面,提供一种分布式锁的实现装置,所述装置包括:接收单元,配置为接收第一用户针对第一业务发起的业务请求;第一加锁单元,配置为根据所述业务请求获取第一虚拟机锁,其中,所述第一虚拟机锁与预设的锁定对象唯一对应,所述锁定对象包括以下一项或多项:所述第一用户、所述第一业务;第二加锁单元,配置为在获取到所述第一虚拟机锁的情况下,针对所述锁定对象创建数据库锁,以根据所述业务请求对所述数据库进行与所述锁定对象相关的数据操作。根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。通过本说明书实施例提供的分布式锁的实现方法、装置及系统,在分布式锁的实现中,一方面,对于多个用户针对各个业务的业务请求,先将业务和/或用户作为锁定对象,通过第一虚拟机锁进行过滤,且在每个虚拟机内部,锁定对象与虚拟机锁唯一对应,从而通过分布的虚拟机锁从各个业务请求中针对一个锁定对象过滤出至多一个业务请求,大大减少竞争数据库锁的并发量;另一方面,对多个虚拟机过滤出的业务请求,进一步通过数据库锁竞争机制,保证在同一时间针对同一个锁定对象只能有一个业务请求进行数据库操作,满足预定的业务规则。如此,既能适应高并发的业务请求,又能保证系统的稳定性,从而可以提高分布式系统的有效性。附图说明为了更清楚地说明本专利技术实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。图1示出本说明书实施例的实施架构示意图;图2示出根据一个实施例的分布式锁的实现方法的流程图;图3示出一个具体例子中一个业务请求获取第一虚拟机锁的流程图;图4示出一个具体例子中,针对一个业务请求获取数据库锁的流程图;图5示出根据一个实施例的分布式锁的实现装置的示意性框图。具体实施方式下面结合附图,对本说明书提供的方案进行描述。图1是本说明书实施例的一个实施架构示意图。在该实施架构中,服务在n台虚拟机上分布式部署。这n台虚拟机可以运行在相同的物理设备上,也可以分别运行在不同的设备上。多个用户的业务请求被随机分配至n台虚拟机。如图1所示,每台虚拟机被分配不同数量的业务请求。对每台虚拟机而言,可以针对不同的锁定对象设定不同的虚拟机锁,并且每个虚拟机锁唯一对应一个锁定对象。其中的锁定对象可以根据具体业务场景下预设的业务需求确定,其可以是用户(一个用户对应一个虚拟机锁),也可以是本文档来自技高网...

【技术保护点】
1.一种分布式锁的实现方法,所述方法包括:接收第一用户针对第一业务发起的业务请求;根据所述业务请求获取第一虚拟机锁,其中,所述第一虚拟机锁与预设的锁定对象唯一对应,所述锁定对象包括以下一项或多项:所述第一用户、所述第一业务;在获取到所述第一虚拟机锁的情况下,针对所述锁定对象创建数据库锁,以根据所述业务请求对所述数据库进行与所述锁定对象相关的数据操作。

【技术特征摘要】
1.一种分布式锁的实现方法,所述方法包括:接收第一用户针对第一业务发起的业务请求;根据所述业务请求获取第一虚拟机锁,其中,所述第一虚拟机锁与预设的锁定对象唯一对应,所述锁定对象包括以下一项或多项:所述第一用户、所述第一业务;在获取到所述第一虚拟机锁的情况下,针对所述锁定对象创建数据库锁,以根据所述业务请求对所述数据库进行与所述锁定对象相关的数据操作。2.根据权利要求1所述的方法,其中,根据所述业务请求获取第一虚拟机锁包括:从第一线程的线程变量中查询第一虚拟机锁对应的第一锁变量,其中,所述第一线程是基于所述业务请求而创建,用于完成所述第一业务,所述第一线程维护至少一个线程变量,所述第一锁变量是与所述锁定对象唯一对应的、至多允许一个线程获取的互斥量,所述第一锁变量在加锁成功的情况下,被添加到所述第一线程的线程变量;在从所述线程变量中查询到所述第一锁变量的情况下,确定获取到所述第一虚拟机锁。3.根据权利要求2所述的方法,其中,所述根据所述业务请求获取第一虚拟机锁还包括:在从所述线程变量中查询不到所述第一锁变量的情况下,查询锁变量集中是否记录有所述第一锁变量,其中,所述锁变量集用于记录当前存在的各个锁变量以及各个锁变量的使用状态;在所述锁变量集记录有所述第一锁变量的情况下,检测所述第一锁变量是否被第二线程锁定;在所述第一锁变量没有被第二线程锁定的情况下,对所述第一锁变量加锁以获取所述第一虚拟机锁,并响应于加锁成功,将所述第一锁变量添加到所述第一线程的线程变量,以及确定获取到所述第一虚拟机锁。4.根据权利要求3所述的方法,其中:在所述第一锁变量被第二线程锁定的情况下,确定获取所述第一锁变量失败,从而确定获取所述第一虚拟机锁失败。5.根据权利要求3所述的方法,其中:在从所述锁变量集查询不到所述第一锁变量的情况下,创建所述第一锁变量,并将所述第一锁变量添加到所述锁变量集;对所述第一锁变量加锁以获取所述第一虚拟机锁;在对所述第一锁变量加锁成功的情况下,更新所述锁变量集中所述第一锁变量的使用状态,并将所述第一锁变量添加到所述第一线程的线程变量,以及确定获取到所述第一虚拟机锁。6.根据权利要求4所述的方法,其中,在获取所述第一虚拟机锁失败的情况下:释放所述第一线程;或者将所述第一线程确定为所述第一虚拟机锁的等待线程。7.根据权利要求3所述的方法,其中,在所述第一线程结束时,从所述第一线程的线程变量中获取所述第一锁变量进行解锁,并将所述第一锁变量从所述第一线程的线程变量中移除。8.根据权利要求7所述的方法,其中,所述将所述第一锁变量从所述线程变量中移除包括:将所述第一锁变量从所述第一线程的线程变量中移入所述锁变量集。9.根据权利要求1所述的方法,其中,所述针对所述锁定对象创建数据库锁包括:向数据库插入第一锁数据,所述第一锁数据包含所述锁定对象的目标标识,以锁定与所述锁定对象对应的第一数据,并基于所述第一数据进行与所述锁定对象相关的数据操作。10.根据权利要求9所述的方法,其中,所述方法还包括:在所述数据操作完成的情况下,删除所述第一锁数据。11.根据权利要求10所述的方法,其中,所述方法还包括:在删除所述第一锁数据失败的情况下,通过按照预定时间间隔执行的定时任务对所述第一锁数据进行清理,其中,所述定时任务用于清理所述数据库中超过预定时长的锁数据记录。12.一种分布式锁的实现装置,所述装置包括:接收单元,配置为接收第一用户针对第一业务发起的业务请求;第一加锁单元,配置为根据所述业务请求获取第一虚拟机锁,其中,所述第一虚拟机锁与预设的锁定对象唯一对应,所述锁定对象包括以下一项...

【专利技术属性】
技术研发人员:杨宇
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1