一种分布式锁加锁方法、装置、设备及介质与流程

文档序号:31469692发布日期:2022-09-09 22:48阅读:75来源:国知局
一种分布式锁加锁方法、装置、设备及介质与流程

1.本技术涉及分布式系统技术领域,尤其涉及一种分布式锁加锁方法、装置、设备及介质。


背景技术:

2.在软件分布式系统中,可能会出现具有关联关系的组件或模块部署在不同进程、不同服务器甚至不同设备上的情况。这些组件因为业务需求,可能会对同一共享数组进行操作,如增删改查,最常见的比如电商中的库存,不同的组件可能会对库存进行增删操作。此时为了保证共享数据的安全性,即保证在同一时刻只有一个组件对共享组件进行操作,比如为了保证库存不发生超卖现象,软件分布式系统中需要用到分布式锁,即在某组件对共享数据操作时,通过分布式锁使其他组件不能操作该共享数据。
3.具体的,当某组件需要操作共享数据时,先按预先约定好的键(key)向分布式锁中心服务器申请加锁,其中,该key用于标识分布式锁,每个分布式锁对应的key不同。分布式锁中心服务器根据该key,确定待加锁的分布式锁,并对该分布式锁进行加锁,从而实现了对共享数据加锁,使得该组件在对共享数据操作时,其他组件不能操作该共享数据。常用的分布式锁中心服务器有redis和zookeeper,其中redis以其高性能,易扩展的特性被广泛应用。
4.在现有技术中,当一个分布式锁被加锁时,如果存在其他组件对该分布式锁控制的共享数据使用的需求,且该其他组件支持延时获取分布式锁,则该其他组件会不断地向分布式锁中心服务器申请加锁,导致资源的浪费。并且,在该分布式锁被释放之后,分布式锁中心服务器从其他组件中选择对该分布式锁加锁的组件时,该分布式锁中心服务器采用的选择模式包括:一种是公平锁模式,即在分布式锁中心服务器中增加消息队列(message queue,mq)组件,如rabbit mq组件,该mq组件对每个申请加锁的组件进行排序,按照排序结果对该分布式锁进行加锁;另一种是非公平锁模式,即在该分布式锁被释放后,首个向分布式中心服务器申请加锁的组件对该分布式锁进行加锁。
5.其中,若分布式锁中心服务器使用非公平锁模式,且分布式锁被加锁时,有加锁需求的组件会不断地向分布式锁中心服务器申请加锁,导致组件的负载压力大且浪费组件的cpu资源。


技术实现要素:

6.本技术提供了一种分布式锁加锁方法、装置、设备及介质,用以解决现有技术中在非公平模式下,分布式锁被加锁时组件负载压力大且组件的cpu资源浪费的问题。
7.第一方面,本技术实施例提供了一种分布式锁加锁方法,所述方法包括:
8.接收第一组件发送的第一加锁申请,其中所述第一加锁申请中携带有待加锁的目标分布式锁的键key、第一加锁信息,以及所述第一组件是否支持延时申请分布式锁;
9.若所述key对应的目标分布式锁已被加锁,且所述第一组件支持延时申请分布式
锁,则将所述第一组件添加到所述目标分布式锁对应的目标竞争者队列中;
10.若识别到所述目标分布式锁被释放,且当前模式为非公平锁模式,则生成随机数,并根据所述随机数和所述目标竞争者队列中包含的组件数量,确定对所述目标分布式锁进行加锁的第二组件,使用所述第二组件对应的第二加锁信息对所述目标分布式锁进行加锁。
11.第二方面,本技术实施例还提供了一种分布式锁加锁装置,所述设备包括:
12.接收模块,用于接收第一组件发送的第一加锁申请,其中所述第一加锁申请中携带有待加锁的目标分布式锁的键key、第一加锁信息,以及所述第一组件是否支持延时申请分布式锁;
13.处理模块,用于若所述key对应的目标分布式锁已被加锁,且所述第一组件支持延时申请分布式锁,则将所述第一组件添加到所述目标分布式锁对应的目标竞争者队列中;
14.加锁模块,用于若识别到所述目标分布式锁被释放,且当前模式为非公平锁模式,则生成随机数,并根据所述随机数和所述目标竞争者队列中包含的组件数量,确定对所述目标分布式锁进行加锁的第二组件,使用所述第二组件对应的第二加锁信息对所述目标分布式锁进行加锁。
15.第三方面,本技术实施例还提供了一种电子设备,所述电子设备包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如上述任一所述分布式锁加锁方法的步骤。
16.第四方面,本技术实施例还提供了一种计算机可读存储介质,其存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一所述分布式锁加锁方法的步骤。
17.在本技术实施中,接收第一组件发送的第一加锁申请,其中该第一加锁申请中携带有待加锁的目标分布式锁的key、第一加锁信息,以及该第一组件是否支持延时申请分布式锁,若该key对应的目标分布式锁已被加锁,且该第一组件支持延时申请分布式锁,则将该第一组件添加到该目标分布式锁对应的目标竞争者队列中,若识别到该目标分布式锁被释放,且当前模式为非公平锁模式,则生成随机数,并根据该随机数和该目标竞争者队列中包含的组件数量,确定对该目标分布式锁进行加锁的第二组件,使用该第二组件对应的第二加锁信息对该目标分布式锁进行加锁。即,在本技术实施例中,在非公平锁模式下,当第一组件存在对目标分布式锁进行加锁的需求时,该第一组件向分布式锁代理模块发送第一加锁申请,若该目标分布式锁当前被加锁,且该第一组件支持延时获取分布式锁,则该分布式锁代理模块会将第一组件添加到目标竞争者队列中,之后该第一组件无需再次发送加锁申请。分布式锁代理模块识别到目标分布式锁被释放后,从目标竞争者队列中选择出对目标分布式锁进行加锁的第二组件,避免了每个有对该目标分布式锁加锁需求的组件不断地向分布式锁中心服务器申请加锁,降低了分布式中心服务器的负载压力,也节约了每个组件的cpu资源。
附图说明
18.为了更清楚地说明本技术的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
19.图1为本技术实施例提供的一种分布式锁加锁过程示意图;
20.图2为本技术实施例提供的第一种分布式锁代理模块的部署结构示意图;
21.图3为本技术实施例提供的第二种分布式锁代理模块的部署结构示意图;
22.图4为本技术实施例提供的第三种分布式锁代理模块的部署结构示意图;
23.图5为本技术实施例提供的竞争者队列的示意图;
24.图6为本技术实施例提供的目标分布锁处理线程对目标分布式锁进行加锁的过程;
25.图7为本技术实施例提供的定时器数组的示意图;
26.图8为本技术实施例提供的分布式锁代理模块的内容结构示意图;
27.图9为本技术实施例提供的第一组件延时申请分布式锁的流程示意图;
28.图10为本技术实施例提供的定时器的子流程示意图;
29.图11为本技术实施例提供的当目标分布式锁被释放后的分布式锁请求流程示意图;
30.图12为本技术实施例提供的一种风险数据获取装置结构示意图;
31.图13为本技术实施例提供的一种电子设备结构示意图。
具体实施方式
32.为了使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术作进一步地详细描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本技术保护的范围。
33.在本技术实施例中,接收第一组件发送的第一加锁申请,其中该第一加锁申请中携带有待加锁的目标分布式锁的键key、第一加锁信息,以及该第一组件是否支持延时申请分布式锁,若该key对应的目标分布式锁已被加锁,且该第一组件支持延时申请分布式锁,则将该第一组件添加到该目标分布式锁对应的目标竞争者队列中,若识别到该目标分布式锁被释放,且当前模式为非公平锁模式,则生成随机数,并根据该随机数和该目标竞争者队列中包含的组件数量,确定对该目标分布式锁进行加锁的第二组件,使用该第二组件对应的第二加锁信息对该目标分布式锁进行加锁。
34.当分布式锁被加锁时,为了降低分布式锁中在非公平模式下的负载压力,本技术实施例提供了一种分布式锁加锁方法、装置、设备及介质。
35.实施例1:
36.图1为本技术实施例提供的一种分布式锁加锁过程示意图,该过程包括:
37.s101:接收第一组件发送的第一加锁申请,其中所述第一加锁申请中携带有待加锁的目标分布式锁的键key、第一加锁信息以及所述第一组件是否支持延时申请分布式锁。
38.本技术实施例提供的一种分布式锁加锁方法应用于分布式锁代理模块,其中该分布式锁代理模块可以位于服务器、组件或电子设备中。
39.在软件分布式系统中,该软件分布式系统中包含至少两个组件及一个分布式锁中心服务器,其中该至少两个组件可能位于同一服务器中,还可能位于不同的服务器中。在本技术实施例中,技术人员通过程序新增分布式锁代理模块,该分布式锁代理模块用于执行
本技术实施例中的分布式锁加锁方法,并且技术人员将该分布式锁代理模块添加到服务器、组件或电子设备中。其中,可以将该分布式锁代理模块添加到分布式锁中心服务器中,还可以将分布式锁代理模块添加到组件所在的服务器中,还可以是将分布式锁代理模块添加到组件中,在此不做限制。
40.图2为本技术实施例提供的第一种分布式锁代理模块的部署结构示意图,如该图2所示,组件a、组件b和组件c位于同一服务器中,其中分布式锁代理模块位于该组件a、组件b和组件c所在的服务器中。
41.图3为本技术实施例提供的第二种分布式锁代理模块的部署结构示意图,如该图3所示,组件a、组件b、组件c和组件d分别位于不同的服务器中,其中该组件a、组件b、组件c和组件d所在的服务器中都包含一个分布式锁代理模块。
42.图4为本技术实施例提供的第三种分布式锁代理模块的部署结构示意图,如该图4所示,组件a和组件b位于同一服务器中,组件c位于一个单独的服务器中,组件d位于一个单独的服务器中,其中分布式锁代理模块位于分布式锁中心服务器中。
43.在本技术实施例中,当第一组件有对共享数据进行使用的需求时,该第一组件根据保存的共享数据与分布式锁的对应关系,确定待使用的共享数据对应的目标分布式锁的键(key),并且该第一组件向分布式锁代理模块发送第一加锁申请。该分布式锁代理模块接收该第一组件发送的第一加锁申请,并基于该第一加锁申请对该目标分布式锁进行加锁。
44.具体的,该第一加锁申请中携带有目标分布式锁的key,分布式锁代理模块根据该key确定待加锁的目标分布式锁;该第一加锁申请中还携带有第一加锁信息,分布式锁代理模块根据该第一加锁信息对该目标分布式锁进行加锁;该第一加锁申请中还携带有该第一组件是否支持延时申请分布式锁的信息。
45.其中,在本技术实施中,该第一加锁信息中至少携带有目标分布式锁的key和值(value),分布式锁代理模块在基于第一加锁信息对目标分布式锁进行加锁时,获取该key和value,并将该目标分布式锁的key设置为该value。其中,基于该第一加锁信息对目标分布式锁进行加锁的过程与现有技术相同,在此不再进行赘述。
46.另外,在本技术实施例,该第一加锁信息中还携带有该第一组件是否支持延时申请分布式锁的信息。该第一组件是否支持延时申请分布式锁的信息用于标识该目标分布式锁当前已经被其他组件加锁时,该第一组件是否支持等待该目标分布式锁被释放后,再对该目标分布式锁进行加锁。
47.s102:若所述key对应的目标分布式锁已被加锁,且所述第一组件支持延时申请分布式锁,则将所述第一组件添加到所述目标分布式锁对应的目标竞争者队列中。
48.在本技术实施例中,分布式锁代理模块接收到第一组件发送的第一加锁申请后,该分布式锁代理模块根据该第一加锁申请中携带的目标分布式锁的key以及第一加锁信息,对目标分布式锁进行加锁。
49.具体的,该分布式锁代理模块在自身正在运行的分布式锁处理线程中,查找该目标分布式锁的key对应的目标分布式锁处理线程,并通过该目标分布式锁处理线程及该第一加锁信息对该目标分布式锁进行加锁。若该分布式锁代理模块中不存在该目标分布式锁的key对应的目标分布式锁处理线程,则该分布式锁代理模块生成目标分布式锁处理线程,再通过该目标分布式锁处理线程及该第一加锁信息对该目标分布式锁进行加锁。
50.在本技术实施例中,若分布式锁代理模块通过目标分布式锁处理线程对该目标分布式锁加锁失败,则该分布式锁代理模块确定该目标分布式锁已经被加锁,则该分布式锁代理模块获取第一加锁申请中携带的第一组件是否支持延时申请分布锁信息。若该第一组件支持延时申请分布式锁,则该分布式锁代理模块将该第一组件添加到该目标分布式锁对应的目标竞争者队列中。
51.具体的,在本技术实施例中,分布式锁代理模块中保存有每个分布式锁对应的竞争者队列,若分布式锁代理模块确定第一组件对应的待加锁的目标分布式锁已被加锁且该第一组件支持延时获取分布式锁,则该分布式锁代理模块在保存的每个分布式锁对应的每个竞争者队列中,查找该目标分布式锁对应的目标竞争者队列,并将该第一组件添加到该目标竞争者队列中。
52.在本技术实施例中,若分布式锁代理模块未查找该目标分布式锁对应的目标竞争者队列,则该分布式锁代理模块创建该目标竞争者队列。
53.需要说明的是,在本技术实施例中,在将第一组件添加到目标竞争者队列中时,为了实现在公平锁模式的场景下的分布式锁请求,该分布式锁代理模块将该第一组件添加到该目标竞争者队列的末位。
54.图5为本技术实施例提供的竞争者队列的示意图,如该图5所示,该竞争者队列中包含多个元素,其中每个元素对应的一个组件,在每个元素中保存有该元素对应的组件的信息。
55.s103:若识别到所述目标分布式锁被释放,且当前模式为非公平锁模式,则生成随机数,并根据所述随机数和所述目标竞争者队列中包含的组件数量,确定对所述目标分布式锁进行加锁的第二组件,使用所述第二组件对应的第二加锁信息对所述目标分布式锁进行加锁。
56.在本技术实施例中,当分布式锁代理模块识别到目标分布式锁被释放,则该分布式锁代理模块根据当前模式,从目标竞争者队列中选择对该目标分布式锁加锁的第二组件。其中,该当前模式为分布式锁中心服务器从组件中选择对该目标分布式锁加锁的第二组件时,该分布式锁中心服务器采用的选择模式。
57.具体的,若该当前模式为非公平锁模式,则该分布式锁代理模块生成随机数,并根据该随机数和目标竞争者队列中包含的组件数量,确定对该分布式锁进行加锁的第二组件,并使用该第二组件对应的第二加锁信息对该目标分布式锁进行加锁。
58.其中,在本技术实施例中,分布式锁代理模块在生成随机数时,可以将当前时间作为随机种子,并根据该随机种子和随机算法生成随机数。
59.图6为本技术实施例提供的目标分布锁处理线程对目标分布式锁进行加锁的过程,如该图6所示,该过程包括:
60.s601:目标分布式锁处理线程向该目标分布式锁发送查看该目标分布式锁是否加锁的请求,若该目标分布式锁未加锁,则执行s602,若该目标分布式锁已被加锁,则返回加锁失败的信息。
61.s602:采用对应的加锁信息对该目标分布式锁进行加锁。
62.s603:检查是否加锁成功,若是,则返回加锁成功的信息,若否,则返回加锁失败的信息。
63.在本技术实施例中,若当前模式为非公平锁模式,则分布式锁代理模块生成随机数,并根据该随机数和该目标竞争者队列中的组件数量,确定对目标分布式锁进行加锁的第二组件。在本技术实施例中,在非公平锁模式下,由分布式锁代理模块从目标竞争者队列中选择出对目标分布式锁进行加锁的第二组件,避免了每个有对该目标分布式锁加锁需求的组件不断地向分布式锁中心服务器申请加锁,降低了分布式中心服务器的负载压力,也节约了每个组件的cpu资源。
64.实施例2:
65.为了降低分布式锁中心服务器的负载压力,避免分布式锁中心服务器cpu资源的浪费,在上述实施例的基础上,在本技术实施例中,若所述第一组件支持延时申请分布式锁,则所述第一加锁申请中还携带有延时时长;
66.所述将所述第一组件添加到所述目标分布式锁对应的目标竞争者队列中之前,所述方法还包括:
67.根据所述延时时长及定时器指针在定时器数组中的第二位置,确定所述第一组件在预先设置的定时器数组中的第一位置,并将所述第一组件添加到所述定时器数组中的第一位置中;
68.所述将所述第一组件添加到所述目标分布式锁对应的目标竞争者队列中包括:
69.将所述第一位置和所述第一加锁信息保存到所述目标竞争者队列中。
70.在本技术实施例中,若第一组件发送的第一加锁申请中携带的该第一组件是否支持延时申请分布式锁的信息为该第一组件支持延时申请分布式锁,则该第一加锁申请中还携带有延时时长。该延时时长为第一组件发送第一加锁申请后,识别到该第一组件需要加锁的目标分布式锁已被加锁,该第一组件等待该目标分布式锁被释放的最大等待时长。即第一组件发送第一加锁申请后,若目标分布式锁已被加锁,则该第一组件在该延时时长内等待该目标分布式锁被释放。例如,该第一组件支持延时申请加锁,且该第一加锁申请中携带的延时时长为五分钟,若第一组件发送第一加锁申请后,目标分布式锁被加锁,则该第一组件在之后的五分钟内等待该目标分布式锁被释放,若在五分钟内该第一组件未对该目标分布式加锁,则认为该第一组件加锁失败。
71.在现有技术中,针对每个组件,若该组件支持延时申请分布式锁,则分布式锁代理模块在接收到该组件发送的加锁申请,并且该组件对应的目标分布式锁被加锁之后,分布式锁中心服务器将生成一个定时器,用于根据该组件的延时时长,对该组件进行定时。基于此,在现有技术中,分布式锁中心服务器接收到多少个支持延时申请分布式锁的组件的加锁申请,该分布式锁中心服务器就会生成多少个定时器,导致分布式锁中心服务器的负载压力,并且导致分布式锁中心服务器的cpu资源的浪费。
72.在本技术实施例中,分布式锁代理模块中仅存在一个定时器,但是该分布式锁代理模块中保存有技术人员预先配置的定时器数组,该定时器的指针不断轮询该定时器数组中的位置,进行实现计时。其中,在本技术实施例中,技术人员在配置定时器数组时,在该定时器数组中配置了多个位置,并且每个位置代表一个时间单位,此外,该定时器数组中的每个位置都对应一个存储空间,可以在该位置进行存储操作。
73.基于此,在本技术实施例中,当分布式锁代理模块确定目标分布式锁被加锁,并且第一组件支持延时申请分布式锁之后,该分布式锁代理模块将该第一组件保存到定时器数
组中对应的位置,再基于该第一组件在定时器数组中的位置,将该第一组件添加到目标分布式锁对应的目标竞争者队列中。
74.具体的,在本技术实施例中,分布式锁代理模块根据第一组件对应的延时时长及定时器指针在定时器数组中的第二位置,确定该第一组件在定时器数组中的第一位置,将该第一组件添加到该定时器数组中的第一位置中,并将该第一位置和该第一加锁信息保存到该目标竞争者队列中。
75.图7为本技术实施例提供的定时器数组的示意图,如该图7所示,该定时器数组中包含多个位置,其中每个位置代表一个时间单位,每个位置中保存有位于该位置的组件的信息。并且,在该图7中定时器指针停留在该定时器数组的第二个位置处。
76.图8为本技术实施例提供的分布式锁代理模块的内容结构示意图,如该图8所示,该分布式锁代理模块中保存有竞争者队列、定时器数组、定时器和分布式锁处理线程。
77.实施例3:
78.为了及时在竞争者队列和定时器数组中删除已经加锁成功的第二组件,减轻分布式锁代理模块的负载压力,在上述各实施例的基础上,在本技术实施例中,所述方法还包括:
79.向所述第二组件返回加锁成功的信息,并在所述目标竞争者队列中删除所述第二组件;
80.根据所述目标竞争者队列中保存的第二组件对应的第三位置,在所述定时器数组的第三位置中删除所述第二组件。
81.在本技术实施例中,当分布式锁代理模块使用第二组件对应的第二加锁信息对目标分布式锁进行加锁之后,该分布式锁代理模块向该第二组件返回加锁成功的信息,并从目标竞争者队列和定时器数组中删除该第二组件。
82.其中,在本技术实施例中,第二组件在向分布式锁代理模块发送第二加锁申请时,该第二加锁申请中还携带有该分布式锁代理模块向该第二组件发送信息时所需的回调方法。并且,在将该第二组件保存到目标竞争队列以及定时器数组中时,还将该回调方法也保存到了该目标竞争者队列和定时器数组中。
83.基于此,在本技术实施例中,当分布式锁代理模块使用第二组件对应的第二加锁信息对目标分布式锁进行加锁之后,该分布式锁代理模块获取目标竞争者队列中保存的该第二组件对应的回调方法,该回调方法为分布式锁代理模块识别第二组件的方法,如该回调方法可以是基于第二组件对应的标识信息或者该第二组件所在服务器的ip地址等识别该第二组件。分布式锁代理模块获取到该回调方法之后,根据该回调方法向该第二组件返回加锁成功的信息。在返回该加锁成功的信息后,该分布式锁代理模块获取在目标竞争者队列中保存的该第二组件在定时器数组中的第三位置,并在该目标竞争者队列中删除该第二组件。之后,该分布式锁代理模块根据该第三位置,在该定时器数组中查找并删除该第二组件。
84.实施例4:
85.为了更好的监控对支持延时申请分布式锁的第一组件的延时情况,在上述各实施例的基础上,在本技术实施例中,所述根据所述延时时长及定时器指针在定时器数组中的第二位置,确定所述第一组件在预先设置的定时器数组中的第一位置包括:
86.确定所述延时时长与所述定时器数组中包含的位置的总数量的第一余数,确定所述第一余数与所述第二位置对应的序号的第一和值,确定所述第一和值与所述总数量的第二余数;
87.将所述定时器数组中所述第二余数对应为位置,确定为所述第一位置。
88.在本技术实施例中,分布式锁代理模块在确定第一组件在预先设置的定时器数组中的第一位置时,该分布式锁代理模块根据该第一组件发送的第一加锁申请,确定该第一加锁申请中携带的延时时长,并根据该延时时长以及定时器指针在定时器数组中的第二位置,确定该第一组件在该定时器数组中的第一位置。
89.具体的,在本技术实施例中,该分布式锁代理模块确定延时时长与定时器数组中包含的位置的总数量的第一余数,并确定该第一余数与第二位置对应的序号的第一和值,计算该第一和值与该总数量的第二余数。分布式锁代理模块将该定时器数组中的第二余数对应的位置确定为该第一组件在该定时器数组中的第一位置。需要说明的是,在本技术实施例中,定时器数组中位置的序号是从0开始的。
90.其中,上述计算过程可以通过以下公式实现:
91.t=(m%n+x)%n
92.其中,t表示第一位置在定时器数组中的序号,也就是第二余数,m表示延时时长,以秒为单位,n表示定时器数组中包含的位置的总数量,x表示定时器指针在定时器数组中的第二位置对应的序号,%表示求余运算。
93.例如,在本技术实施例中,第一组件的延时时长为10s,定时器数组中包含的位置的总数量为4个,定时器指针在该定时器数组中的第二位置为第二位,该第二位置对应的序号为1,该分布式锁代理模块确定延时时长与定时器数组中包含的位置的总数量的第一余数为2,第一余数与第二位置对应的序号的第一和值为3,该第一和值与总数量的第二余数为3,则确定该第二余数对应的位置为该定时器数组中的第四位,即确定第一组件在该定时器数组中的位置为第四位。
94.实施例5:
95.为了进一步地监控对支持延时申请分布式锁的第一组件的延时情况,在上述各实施例的基础上,在本技术实施例中,所述方法还包括:
96.确定所述第一和值与所述延时时长的第二和值,将所述第二和值与所述总数量的比值的整数部分确定为所述第一组件在所述定时器数组中保存的目标轮数;
97.所述将所述第一组件添加到所述第一位置中包括:
98.将所述第一组件对应的所述目标分布式锁的key、所述第一加锁信息和所述目标轮数对应保存到所述第一位置中。
99.在本技术实施例中,由于分布式锁代理模块的定时器数组中包含的位置的总数量是固定的,并且也是有限的,因此,可能出现第一组件的延时时长长于该定时器数组中包含的总数量的单位时间的值。例如,在本技术实施例中,定时器数组中包含的位置为五个,其中每个位置对应1s,而第一组件的延时时长为10s,则此时第一组件的延时时长长于该定时器数组中包含的每个位置的单位时间的和值5s。因此,在本技术实施例中,在确定每个第一组件在定时器数组中的第一位置的时候,可能存在定时器指针经过该第二位置至少两次的情况,即定时器指针需要转动多轮,才会达到该第一组件的延时时长。
100.基于此,在本技术实施例中,在将第一组件保存到定时器数组中的第一位置时,还会将该第一组件对应的目标轮数保存到该第一位置中。其中,该目标轮数即为定时器指针在该定时器数组中轮回几次之后到达该第一位置,才会达到该第一组件的延时时长。
101.具体的,在本技术实施例中,分布式锁代理模块确定延时时长与定时器数组中包含的位置的总数量的第一余数,计算该第一余数与定时器指针在该定时器数组中的第二位置对应的序号的第一和值。计算该第一和值与该第一组件的延时时长的第二和值,以及该第二和值与该总数量的比值,该分布式锁代理模块将该比值的整数部分确定为第一组件在定时器数组中保存的目标轮数,并将该目标轮数保存到该第一位置中。
102.其中,在本技术实施例中,上述计算目标轮数的过程可以通过以下公式实现:
103.s=(m+(m%n+x))/n
104.其中,s表示目标轮数,m表示延时时长,n表示定时器数组中包含的位置的总数量,x表示定时器指针在定时器数组中的第二位置对应的序号,%表示求余运算,/表示求整运算。
105.例如,在本技术实施例中,第一组件的延时时长为10s,定时器数组中包含的位置的总数量为4个,定时器指针在该定时器数组中的第二位置为第二位,该第二位置对应的序号为1,该则该分布式锁代理模块确定延时时长与定时器数组中包含的位置的总数量的第一余数为2,第一余数与第二位置对应的序号的第一和值为3,该第一和值与延时时长的第二和值为13,该第二和值与总数量的比值的整数部分为3,则确定第一组件在定时器数组中保存的目标轮数为3。
106.图9为本技术实施例提供的第一组件延时申请分布式锁的流程示意图,如该图9所示,该过程包括:
107.s901:接收第一组件发送的第一加锁申请。
108.s902:目标分布式锁对应的目标分布式锁处理线程向该目标分布式锁发送查看该目标分布式锁是否加锁的请求;若该目标分布式锁未被加锁,则执行s903,若该目标分布式锁已被加锁,则执行s905。
109.s903:根据该第一加锁申请中携带的目标分布式锁的key和第一加锁信息,对该目标分布式锁进行加锁。
110.s904:判断是否加锁成功,若是,则向该第一组件返回加锁成功的信息。
111.s905:根据第一加锁申请中携带的延时时长、定时器指针在定时器数组中的第二位置以及定时器数组中包含的位置的数量,确定该第一组件在定时器数组中的第一位置,以及该第一组件对应的目标轮数。
112.s906:将该第一组件对应的该目标分布式锁的key、该第一加锁信息和该目标轮数对应保存到该第一位置中。
113.s907:判断当前是否存在该目标分布式锁对应的目标竞争者队列,若是,则执行s908,若否,则执行s909。
114.s908:将该第一组件的第一位置和第一加锁信息保存到该目标竞争者队列中。
115.s909:创建该目标分布式锁对应的目标竞争者队列,并将该第一组件的第一位置和第一加锁信息保存到该目标竞争者队列中。
116.实施例6:
117.为了更好地对支持延时申请分布式锁的组件进行控制,在上述各实施例的基础上,在本技术实施例中,所述方法还包括:
118.每隔预设的时间单位,对所述定时器指针的第二位置进行更新;
119.对更新后的第二位置中保存的每个组件的轮数进行更新;
120.识别更新后的轮数小于预设阈值的第三组件,并在所述定时器数组中和所述目标竞争者队列中删除所述第三组件,向所述第三组件返回加锁失败的信息。
121.在本技术实施例中,分布式锁代理模块中的每个分布式锁处理线程每隔预设的时间单位都会尝试对对应的分布式锁进行加锁。其中,在本技术实施例中,每个分布式锁处理线程都是采用原子操作向对应的分布式锁进行加锁的。该原子操作为现有技术,在此不在进行赘述。
122.具体的,每隔预设的时间单位,目标分布式锁对应的目标分布式锁处理线程向该目标分布式锁发送查看该目标分布式锁是否加锁的请求,若该目标分布式锁未加锁,则采用对应的加锁信息对该目标分布式锁进行加锁。
123.此外,每隔预设的时间单位,该分布式锁代理模块会对定时器指针的第二位置进行更新。具体的,在本技术实施例中,每隔预设的时间单位,该分布式锁代理模块将该定时器指针在定时器数组中的位置向后移动一位,若该定时器指针在定时器数组中的位置为最后一位,则在对该定时器指针的第二位置进行更新时,是将该定时器指针的位置从定时器数组中的最后一位移动到定时器数组中的第一位。
124.在本技术实施例中,当分布式锁代理模块对定时器指针的第二位置进行更新之后,该分布式锁代理模块识别更新后的第二位置。此时,针对更新后的第二位置中保存的组件来说,该定时器指针已经轮询过一次了,需要对该定时器数组中该更新后的第二位置中保存的每个组件对应的轮数进行更新,即将该定时器数组中保存的每个组件对应的轮数减1。
125.分布式锁代理模块识别更新后的轮数小于预设阈值的第三组件,并在定时器数组和目标竞争者队列中删除该第三组件,并向该第三组件返回加锁失败的信息。
126.具体的,在本技术实施例中,该预设阈值为0。即若分布式锁代理模块识别到第三组件更新后的轮数小于0,则说明该当前时间已经达到或超过该第三组件对应的延时时长,且当前没有使用该第三组件的加锁信息对目标分布式锁进行加锁。分布式锁代理模块将从在定时器数组和目标竞争者队列中删除该第三组件,并向该第三组件返回加锁失败的信息。
127.在本技术实施例中,若该目标竞争者队列中仅包含该第三组件,则在删除该第三组件之后,分布式锁代理模块中已经不包含等待加锁该目标分布式锁的组件了,则该分布式锁代理模块暂停该目标分布式锁对应的目标分布锁处理线程。
128.此外,在本技术实施例中,在对定时器指针的第二位置进行更新后,该分布式锁代理模块还可以先识别更新后的第二位置中保存的轮数不超过的预设阈值的组件,并将该组件作为第三组件。
129.图10为本技术实施例提供的定时器的子流程示意图,如该图10所示,该过程包括:
130.s1001:每隔预设的时间单位,判断定时器指针的第二位置是否为定时器数组中的最后一位,若是,则执行s1002,若否,则执行s1003。
131.s1002:将该定时器指针的第二位置更新为定时器数组中的首位,并执行s1004。
132.s1003:将该定时器指针的第二位置向后移动一位,并执行s1004。
133.s1004:确定更新后的第二位置中保存的每个组件的轮数。
134.s1005:判断是否存在轮数不超过预设阈值的第三组件,若不存在,则执行s1006,若存在,则执行s1007。
135.s1006:将每个轮数减小一个数值,并保存。
136.s1007:在该定时器数组中和该目标竞争者队列中删除该第三组件。
137.s1008:判断该第三组件是否为该目标竞争者队列中的唯一组件,若是,则执行s1009。
138.s1009:停止该目标分布式锁对应的目标分布式锁处理线程。
139.实施例7:
140.为了降低分布式锁中心服务器的复杂性,提高分布式锁中心服务器的安全性,在上述各实施例的基础上,在本技术实施例中,若识别到所述目标分布式锁被释放,且当前模式为公平锁模式,所述方法还包括:
141.确定所述目标竞争者队列中的首个第四组件,使用所述第四组件对应的第三加锁信息对所述目标分布式锁进行加锁。
142.在现有技术中,在分布式锁被释放之后,分布式锁中心服务器从其他组件中选择对该分布式锁加锁的组件时,该分布式锁中心服务器采用的选择模式包括公平锁模式,即在分布式锁中心服务器中增加mq组件,如rabbit mq组件,该mq组件对每个申请加锁的组件进行排序,按照排序结果对该分布式锁进行加锁。但是增加mq组件的同时也增加了分布式锁中心服务器的复杂性,降低了分布式锁中心服务器的安全性。
143.在本技术实施例中,分布式锁代理模块中保存有已创建的竞争者队列,其中每个竞争者队列对应一个分布式锁。并且,在本技术实施例中,每个分布式锁对应的每个竞争者队列即可以应用公平锁模式下,还可以应用于非公平锁模式下,但是在不同的选择模式下,分布式锁代理模块从目标竞争者队列中选择对目标分布式锁进行上锁的组件的方法不同。当分布式锁代理模块接收到第一组件发送的第一加锁申请,且待加锁的目标分布式锁被上锁时,该分布式锁代理模块将该第一组件添加到该目标分布式锁对应的目标竞争者队列中,并且是将第一组件添加到该目标竞争者队列中的最后一位。
144.基于此,在本技术实施例中,若当前模式为公平锁模式,且目标分布式锁被释放,则应该选择最早向分布式锁代理模块发送加锁申请的组件对该目标分布式锁进行加锁。
145.具体的,若当前模式为公平锁模式,且目标分布式锁被释放,则分布式锁代理模块确定该目标分布式锁对应的目标竞争者队列,并确定该目标竞争者队列中的首个第四组件,该第四组件即为最早向分布式锁代理模块发送加锁申请的组件。分布式锁代理模块使用该第四组件对应的第三加锁信息对该目标分布式锁进行加锁。
146.图11为本技术实施例提供的当目标分布式锁被释放后的分布式锁请求流程示意图,如该图11所示,该过程包括:
147.s1101:判断当前模式是否为公平锁模式,若是,则执行s1102,若否,则执行s1108。
148.s1102:确定目标分布式锁对应的目标竞争者队列。
149.s1103:确定该目标竞争者队列中的首个第四组件,使用该第四组件对应的第三加
锁信息对该目标分布式锁进行加锁。
150.s1104:判断是否加锁成功,若是,则执行s1105,若否,则执行s1101。
151.s1105:从目标竞争者队列中删除该第四组件。
152.s1106:根据该目标竞争者队列中保存的该第四组件对应的位置,在该定时器数的该位置中删除该第四组件。
153.s1107:向该第四组件返回加锁成功的信息。
154.s1108:确定目标分布式锁对应的目标竞争者队列。
155.s1109:生成随机数,并根据该随机数和该目标竞争者队列中包含的组件数量,确定对该目标分布式锁进行加锁的第二组件。
156.s1110:使用该第二组件对应的第二加锁信息对该目标分布式锁进行加锁,并执行s1111。
157.s1111:判断是否加锁成功,若是,则执行s1112,若否,则执行s1101。
158.s1112:从目标竞争者队列中删除该第二组件。
159.s1113:根据该目标竞争者队列中保存的该第二组件对应的位置,在该定时器数的该位置中删除该第二组件。
160.s1114:向该第二组件返回加锁成功的信息。
161.实施例8:
162.图12为本技术实施例提供的一种风险数据获取装置结构示意图,该装置包括:
163.接收模块1201,用于接收第一组件发送的第一加锁申请,其中所述第一加锁申请中携带有待加锁的目标分布式锁的键key、第一加锁信息,以及所述第一组件是否支持延时申请分布式锁;
164.处理模块1202,用于若所述key对应的目标分布式锁已被加锁,且所述第一组件支持延时申请分布式锁,则将所述第一组件添加到所述目标分布式锁对应的目标竞争者队列中;
165.加锁模块1203,用于若识别到所述目标分布式锁被释放,且当前模式为非公平锁模式,则生成随机数,并根据所述随机数和所述目标竞争者队列中包含的组件数量,确定对所述目标分布式锁进行加锁的第二组件,使用所述第二组件对应的第二加锁信息对所述目标分布式锁进行加锁。
166.在一种可能的实施方式中,所述处理模块1202,还用于根据所述延时时长及定时器指针在定时器数组中的第二位置,确定所述第一组件在预先设置的定时器数组中的第一位置,并将所述第一组件添加到所述定时器数组中的第一位置中;将所述第一位置和所述第一加锁信息保存到所述目标竞争者队列中。
167.在一种可能的实施方式中,所述装置还包括:
168.发送模块1204,用于向所述第二组件返回加锁成功的信息,并在所述目标竞争者队列中删除所述第二组件;
169.所述处理模块1202,还用于根据所述目标竞争者队列中保存的第二组件对应的第三位置,在所述定时器数组的第三位置中删除所述第二组件。
170.在一种可能的实施方式中,所述处理模块1202,具体用于确定所述延时时长与所述定时器数组中包含的位置的总数量的第一余数,确定所述第一余数与所述第二位置对应
的序号的第一和值,确定所述第一和值与所述总数量的第二余数;将所述定时器数组中所述第二余数对应为位置,确定为所述第一位置。
171.在一种可能的实施方式中,所述处理模块1202,还用于确定所述第一和值与所述延时时长的第二和值,将所述第二和值与所述总数量的比值的整数部分确定为所述第一组件在所述定时器数组中保存的目标轮数;将所述第一组件对应的所述目标分布式锁的key、所述第一加锁信息和所述目标轮数对应保存到所述第一位置中。
172.在一种可能的实施方式中,所述处理模块1202,还用于每隔预设的时间单位,对所述定时器指针的第二位置进行更新;对更新后的第二位置中保存的每个组件的轮数进行更新;识别更新后的轮数小于预设阈值的第三组件,并在所述定时器数组中和所述目标竞争者队列中删除所述第三组件;
173.所述发送模块1204,还用于向所述第三组件返回加锁失败的信息。
174.在一种可能的实施方式中,所述加锁模块1203,还用于若识别到所述目标分布式锁被释放,且当前模式为公平锁模式,确定所述目标竞争者队列中的首个第四组件,使用所述第四组件对应的第三加锁信息对所述目标分布式锁进行加锁。
175.实施例9:
176.在上述实施例的基础上,本技术实施例还提供了一种电子设备,图13为本技术实施例提供的一种电子设备结构示意图,如图13所示,包括:处理器1301、通信接口1302、存储器1303和通信总线1304,其中,处理器1301,通信接口1302,存储器1303通过通信总线1304完成相互间的通信;
177.存储器1303中存储有计算机程序,当程序被处理器1301执行时,使得处理器1301执行如下步骤:
178.接收第一组件发送的第一加锁申请,其中所述第一加锁申请中携带有待加锁的目标分布式锁的键key、第一加锁信息,以及所述第一组件是否支持延时申请分布式锁;
179.若所述key对应的目标分布式锁已被加锁,且所述第一组件支持延时申请分布式锁,则将所述第一组件添加到所述目标分布式锁对应的目标竞争者队列中;
180.若识别到所述目标分布式锁被释放,且当前模式为非公平锁模式,则生成随机数,并根据所述随机数和所述目标竞争者队列中包含的组件数量,确定对所述目标分布式锁进行加锁的第二组件,使用所述第二组件对应的第二加锁信息对所述目标分布式锁进行加锁。
181.在一种可能的实施方式中,若所述第一组件支持延时申请分布式锁,则所述第一加锁申请中还携带有延时时长;
182.所述处理器还用于:
183.根据所述延时时长及定时器指针在定时器数组中的第二位置,确定所述第一组件在预先设置的定时器数组中的第一位置,并将所述第一组件添加到所述定时器数组中的第一位置中;
184.所述处理器还用于:
185.将所述第一位置和所述第一加锁信息保存到所述目标竞争者队列中。
186.在一种可能的实施方式中,所述处理器还用于:
187.向所述第二组件返回加锁成功的信息,并在所述目标竞争者队列中删除所述第二
组件;
188.根据所述目标竞争者队列中保存的第二组件对应的第三位置,在所述定时器数组的第三位置中删除所述第二组件。
189.在一种可能的实施方式中,所述处理器还用于:
190.确定所述延时时长与所述定时器数组中包含的位置的总数量的第一余数,确定所述第一余数与所述第二位置对应的序号的第一和值,确定所述第一和值与所述总数量的第二余数;
191.将所述定时器数组中所述第二余数对应为位置,确定为所述第一位置。
192.在一种可能的实施方式中,所述处理器还用于:
193.确定所述第一和值与所述延时时长的第二和值,将所述第二和值与所述总数量的比值的整数部分确定为所述第一组件在所述定时器数组中保存的目标轮数;
194.所述处理器还用于:
195.将所述第一组件对应的所述目标分布式锁的key、所述第一加锁信息和所述目标轮数对应保存到所述第一位置中。
196.在一种可能的实施方式中,所述处理器还用于:
197.每隔预设的时间单位,对所述定时器指针的第二位置进行更新;
198.对更新后的第二位置中保存的每个组件的轮数进行更新;
199.识别更新后的轮数小于预设阈值的第三组件,并在所述定时器数组中和所述目标竞争者队列中删除所述第三组件,向所述第三组件返回加锁失败的信息。
200.在一种可能的实施方式中,若识别到所述目标分布式锁被释放,且当前模式为公平锁模式,所述处理器还用于:
201.确定所述目标竞争者队列中的首个第四组件,使用所述第四组件对应的第三加锁信息对所述目标分布式锁进行加锁。
202.由于上述电子设备解决问题的原理与分布式锁加锁方法相似,因此上述电子设备的实施可以参见方法的实施例,重复之处不再赘述。
203.上述电子设备提到的通信总线可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(extended industry standard architecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口1302用于上述电子设备与其他设备之间的通信。存储器可以包括随机存取存储器(random access memory,ram),也可以包括非易失性存储器(non-volatile memory,nvm),例如至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器的存储装置。
204.上述处理器可以是通用处理器,包括中央处理器、网络处理器(network processor,np)等;还可以是数字指令处理器(digital signal processing,dsp)、专用集成电路、现场可编程门陈列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。
205.实施例10:
206.在上述各实施例的基础上,本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质内存储有可由处理器执行的计算机程序,当程序在处理器上运行时,使
得处理器执行时实现如下步骤:
207.接收第一组件发送的第一加锁申请,其中所述第一加锁申请中携带有待加锁的目标分布式锁的键key、第一加锁信息,以及所述第一组件是否支持延时申请分布式锁;
208.若所述key对应的目标分布式锁已被加锁,且所述第一组件支持延时申请分布式锁,则将所述第一组件添加到所述目标分布式锁对应的目标竞争者队列中;
209.若识别到所述目标分布式锁被释放,且当前模式为非公平锁模式,则生成随机数,并根据所述随机数和所述目标竞争者队列中包含的组件数量,确定对所述目标分布式锁进行加锁的第二组件,使用所述第二组件对应的第二加锁信息对所述目标分布式锁进行加锁。
210.在一种可能的实施方式中,若所述第一组件支持延时申请分布式锁,则所述第一加锁申请中还携带有延时时长;
211.所述将所述第一组件添加到所述目标分布式锁对应的目标竞争者队列中之前,所述方法还包括:
212.根据所述延时时长及定时器指针在定时器数组中的第二位置,确定所述第一组件在预先设置的定时器数组中的第一位置,并将所述第一组件添加到所述定时器数组中的第一位置中;
213.所述将所述第一组件添加到所述目标分布式锁对应的目标竞争者队列中包括:
214.将所述第一位置和所述第一加锁信息保存到所述目标竞争者队列中。
215.在一种可能的实施方式中,所述方法还包括:
216.向所述第二组件返回加锁成功的信息,并在所述目标竞争者队列中删除所述第二组件;
217.根据所述目标竞争者队列中保存的第二组件对应的第三位置,在所述定时器数组的第三位置中删除所述第二组件。
218.在一种可能的实施方式中,所述根据所述延时时长及定时器指针在定时器数组中的第二位置,确定所述第一组件在预先设置的定时器数组中的第一位置包括:
219.确定所述延时时长与所述定时器数组中包含的位置的总数量的第一余数,确定所述第一余数与所述第二位置对应的序号的第一和值,确定所述第一和值与所述总数量的第二余数;
220.将所述定时器数组中所述第二余数对应为位置,确定为所述第一位置。
221.在一种可能的实施方式中,所述方法还包括:
222.确定所述第一和值与所述延时时长的第二和值,将所述第二和值与所述总数量的比值的整数部分确定为所述第一组件在所述定时器数组中保存的目标轮数;
223.所述将所述第一组件添加到所述第一位置中包括:
224.将所述第一组件对应的所述目标分布式锁的key、所述第一加锁信息和所述目标轮数对应保存到所述第一位置中。
225.在一种可能的实施方式中,所述方法还包括:
226.每隔预设的时间单位,对所述定时器指针的第二位置进行更新;
227.对更新后的第二位置中保存的每个组件的轮数进行更新;
228.识别更新后的轮数小于预设阈值的第三组件,并在所述定时器数组中和所述目标
竞争者队列中删除所述第三组件,向所述第三组件返回加锁失败的信息。
229.在一种可能的实施方式中,若识别到所述目标分布式锁被释放,且当前模式为公平锁模式,所述方法还包括:
230.确定所述目标竞争者队列中的首个第四组件,使用所述第四组件对应的第三加锁信息对所述目标分布式锁进行加锁。
231.由于上述计算机可读存储介质解决问题的原理与分布式锁加锁方法相似,因此上述计算机可读存储介质的实施可以参见方法的实施例,重复之处不再赘述。
232.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
233.本技术是参照根据本技术的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
234.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
235.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1