一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于分布式锁的数据回滚方法、装置、设备和存储介质与流程

2022-06-30 00:17:45 来源:中国专利 TAG:


1.本技术涉及信息安全技术领域,提供一种基于分布式锁的数据回滚方法、装置、终端设备和存储介质。


背景技术:

2.分布式锁是控制分布式系统中各客户端同步访问共享资源的一种方式。在使用redis做分布式锁的时候,服务器集群若采用主从模式,则在主节点发生故障,集群节点执行主从切换的时候,有可能出现分布式锁丢失的问题。
3.针对该问题,现有技术提出一种红锁的解决方案,即服务器集群设置多个主节点,客户端同时向该多个主节点发送上锁请求,只要一半以上的主节点通过请求,则该客户端上锁成功。
4.然而,采用红锁仍然存在以下问题:当某个客户端a获得锁之后,若发生了线程停顿(例如一次很长时间的网络堵塞或波动)且该停顿超过了该锁的过期时间,则另一个客户端b就可以获得该锁,从而完成相应的数据操作;此后,当客户端a的线程恢复之后,仍然会将之后的数据操作执行完,此时有可能产生脏数据等问题。


技术实现要素:

5.有鉴于此,本技术提出一种基于分布式锁的数据回滚方法、装置、终端设备和存储介质,旨在解决现有技术的红锁方案中可能产生的脏数据问题。
6.第一方面,本技术实施例提供了一种基于分布式锁的数据回滚方法,应用于第一客户端,所述第一客户端为分布式系统具有的多个客户端中的任意一个客户端,该方法包括:
7.向所述分布式系统的服务器集群发送上锁请求;
8.在接收到由所述服务器集群基于所述上锁请求返回的分布式锁后,向指定的缓存数据库写入所述分布式锁的第一上锁信息,所述第一上锁信息包含所述分布式锁的标识、上锁时间以及所述第一客户端的标识;所述多个客户端中的每个客户端在接收到所述服务器集群分配的分布式锁后,都会往所述缓存数据库写入相应的上锁信息;
9.在执行完与所述分布式锁对应的任务线程之后,从所述缓存数据库存储的所有上锁信息中查找与所述分布式锁对应且上锁时间最晚的第二上锁信息;
10.若所述第二上锁信息中包含的客户端标识不是所述第一客户端的标识,则对与所述任务线程相关的数据进行回滚。
11.在本技术实施例中,首先由某个第一客户端向服务器集群发送上锁请求;当第一客户端基于该上锁请求获得对应的分布式锁后,向指定的缓存数据库写入该分布式锁的第一上锁信息,该第一上锁信息包含该分布式锁的标识、上锁时间和第一客户端的标识;第一客户端在执行完相应的任务线程之后,从该缓存数据库中查找与该分布式锁对应且上锁时间最晚的第二上锁信息;若该第二上锁信息中包含的客户端标识不是第一客户端的标识,
则第一客户端对该任务线程相关的数据进行回滚。通过这样设置,假设第一客户端在执行任务线程中发生了线程停顿导致分布式锁超期,而另外一个第二客户端已获得该分布式锁,则第一客户端在执行完线程后,会发现从缓存数据库中查找到的第二上锁信息中包含的客户端标识是第二客户端的标识(第二客户端在获得该分布式锁后,与第一客户端一样,会向该缓存数据库写入该分布式锁的上锁信息,其中包含时间更晚的上锁时间以及第二客户端的标识,显然第一客户端查找到的第二上锁信息为第二客户端写入的上锁信息),此时第一客户端会对任务线程相关的数据进行回滚,从而避免产生脏数据等问题。
12.在本技术实施例的一种实现方式中,所述第一上锁信息包含的上锁时间可以通过以下方式确定:
13.查询所述缓存数据库中是否已存在与所述分布式锁对应的其它上锁信息;
14.若所述缓存数据库中已存在与所述分布式锁对应的其它上锁信息,则查找所述其它上锁信息中包含的最晚上锁时间,并将所述最晚上锁时间和指定时长之和确定为所述第一上锁信息包含的上锁时间;
15.若所述缓存数据库中不存在与所述分布式锁对应的其它上锁信息,则将所述第一客户端当前的时钟时间确定为所述第一上锁信息包含的上锁时间。
16.在本技术实施例的一种实现方式中,所述对与所述任务线程相关的数据进行回滚,可以包括:
17.接收由所述服务器集群发送的第二客户端的优先级信息,所述第二客户端为所述多个客户端中与所述第二上锁信息中包含的客户端标识对应的客户端;
18.将所述第二客户端的优先级信息和所述第一客户端的优先级信息进行比较,得到所述第一客户端和所述第二客户端之间的优先级大小;
19.若所述第一客户端的优先级小于所述第二客户端,则对与所述任务线程相关的数据进行回滚。
20.进一步的,在得到所述第一客户端和所述第二客户端之间的优先级大小之后,还可以包括:
21.若所述第一客户端的优先级大于所述第二客户端,则不执行对与所述任务线程相关的数据进行回滚的操作,并发送数据回滚指令至所述第二客户端,所述数据回滚指令用于指示所述第二客户端对其获取所述分布式锁期间执行操作的数据进行回滚。
22.在本技术实施例的一种实现方式中,在从所述缓存数据库存储的所有上锁信息中查找与所述分布式锁对应且上锁时间最晚的第二上锁信息之后,还可以包括:
23.若所述第二上锁信息中包含的客户端标识是所述第一客户端的标识,则判断与所述任务线程相关的数据是否为预定义的核心数据;
24.若与所述任务线程相关的数据不是预定义的核心数据,则不执行对与所述任务线程相关的数据进行回滚的操作;
25.若与所述任务线程相关的数据是预定义的核心数据,则在释放所述分布式锁的阶段向所述服务器集群发送第一释放锁请求,所述第一释放锁请求用于指示所述服务器集群检测所述分布式锁是否仍在所述第一客户端上,若所述分布式锁仍在所述第一客户端上则执行释放锁的流程,若所述分布式锁不在所述第一客户端上则返回第一异常信息至所述第一客户端;
26.在接收到所述第一异常信息之后,对与所述任务线程相关的数据进行回滚。
27.在本技术实施例的一种实现方式中,在从所述缓存数据库存储的所有上锁信息中查找与所述分布式锁对应且上锁时间最晚的第二上锁信息之后,还可以包括:
28.若所述第二上锁信息中包含的客户端标识是所述第一客户端的标识,则获取所述第一客户端的性能数据;
29.若所述性能数据不符合预设的数据回滚性能需求,则不执行对与所述任务线程相关的数据进行回滚的操作;
30.若所述性能数据符合预设的数据回滚性能需求,则在释放所述分布式锁的阶段向所述服务器集群发送第二释放锁请求,所述第二释放锁请求用于指示所述服务器集群检测所述分布式锁是否仍在所述第一客户端上,若所述分布式锁仍在所述第一客户端上则执行释放锁的流程,若所述分布式锁不在所述第一客户端上则返回第二异常信息至所述第一客户端;
31.在接收到所述第二异常信息之后,对与所述任务线程相关的数据进行回滚。
32.在本技术实施例的一种实现方式中,所述第一上锁信息还包含所述分布式锁的过期时间,在从所述缓存数据库存储的所有上锁信息中查找与所述分布式锁对应且上锁时间最晚的第二上锁信息之后,还可以包括:
33.若所述第二上锁信息中包含的客户端标识是所述第一客户端的标识,则判断当前时间是否超过所述过期时间;
34.若当前时间超过所述过期时间,则对与所述任务线程相关的数据进行回滚。
35.第二方面,本技术实施例提供了一种基于分布式锁的数据回滚装置,应用于第一客户端,所述第一客户端为分布式系统具有的多个客户端中的任意一个客户端,该装置包括:
36.上锁请求发送模块,用于向所述分布式系统的服务器集群发送上锁请求;
37.上锁信息写入模块,用于在接收到由所述服务器集群基于所述上锁请求返回的分布式锁后,向指定的缓存数据库写入所述分布式锁的第一上锁信息,所述第一上锁信息包含所述分布式锁的标识、上锁时间以及所述第一客户端的标识;所述多个客户端中的每个客户端在接收到所述服务器集群分配的分布式锁后,都会往所述缓存数据库写入相应的上锁信息;
38.上锁信息查找模块,用于在执行完与所述分布式锁对应的任务线程之后,从所述缓存数据库存储的所有上锁信息中查找与所述分布式锁对应且上锁时间最晚的第二上锁信息;
39.数据回滚模块,用于若所述第二上锁信息中包含的客户端标识不是所述第一客户端的标识,则对与所述任务线程相关的数据进行回滚。
40.第三方面,本技术实施例提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本技术实施例第一方面提出的基于分布式锁的数据回滚方法。
41.第四方面,本技术实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如本技术实施例第一方面提出的基于分布式锁的数据回滚方法。
42.第五方面,本技术实施例提供了一种计算机程序产品,当该计算机程序产品在终端设备上运行时,使得该终端设备执行如本技术实施例第一方面提出的基于分布式锁的数据回滚方法。
43.上述第二方面至第五方面所能实现的有益效果,可以参照上述第一方面的相关说明。
附图说明
44.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
45.图1是本技术实施例提供的一种基于分布式锁的数据回滚方法的一个实施例的流程图;
46.图2是本技术实施例提供的一种上锁信息的示意图;
47.图3是本技术实施例提供的一种基于分布式锁的数据回滚装置的一个实施例的结构图;
48.图4是本技术实施例提供的一种终端设备的示意图。
具体实施方式
49.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本技术实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本技术。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本技术的描述。另外,在本技术说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
50.目前,很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性一直是技术人员需要重点考虑的问题,而采用分布式锁即为解决该问题的一种有效方式。本技术实施例提出的数据回滚方法,主要是为了解决现有分布式锁技术公开的红锁(redlock)方案中,可能产生脏数据的问题。关于该数据回滚方法的具体说明和技术实现细节,可以参见下文所述的方法实施例。
51.本技术实施例可以基于人工智能技术对相关的数据进行获取和处理。其中,人工智能(artificial intelligence,ai)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。
52.人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、机器人技术、生物识别技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
53.应当理解,本技术实施例提供的基于分布式锁的数据回滚方法的执行主体可以是
手机、平板电脑、可穿戴设备、车载设备、增强现实(augmented reality,ar)/虚拟现实(virtual reality,vr)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,umpc)、上网本、个人数字助理(personal digital assistant,pda)、大屏电视等各种类型的终端设备或者服务器,本技术实施例对该终端设备和服务器的具体类型不作任何限制。这里的服务器可以是独立的服务器,也可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(contentdelivery network,cdn)、以及大数据和人工智能平台等基础云计算服务的云服务器。
54.请参阅图1,本技术实施例中一种基于分布式锁的数据回滚方法的一个实施例包括:
55.101、第一客户端向分布式系统的服务器集群发送上锁请求;
56.第一客户端是分布式系统具有的多个客户端中的任意一个客户端(终端设备),首先由其向该分布式系统的服务器集群发送上锁请求,以获得要执行的任务线程所需的分布式锁。通常来说,该上锁请求会包含一个分布式锁的过期时间。
57.102、第一客户端在接收到由所述服务器集群基于所述上锁请求返回的分布式锁后,向指定的缓存数据库写入所述分布式锁的第一上锁信息,所述第一上锁信息包含所述分布式锁的标识、上锁时间以及所述第一客户端的标识;
58.该服务器集群中的各个节点在接收到第一客户端发送的上锁请求后,若一半以上的节点决策通过第一客户端的上锁请求,则第一客户端上锁成功,获得对应的分布式锁。在接收到服务器集群返回的分布式锁后,第一客户端会向指定的缓存数据库写入该分布式锁的上锁信息(用第一上锁信息表示),该上锁信息中包含该分布式锁的标识、上锁时间以及第一客户端的标识。该缓存数据库可以是该服务器集群中设置的任意类型的数据库,假设第一客户端为客户端a,其获得的分布式锁为x,则客户端a会获取当前时间为上锁时间,然后构建“分布式锁x的id 当前时间 客户端a的id”的上锁信息(示意图如图2所示),并将该上锁信息写入该缓存数据库中。
59.应当理解,该分布式系统具有的每个客户端在获取到该服务器集群分配的一个分布式锁后,都会执行和第一客户端一样的操作步骤,往该缓存数据库中写入对应的上锁信息。
60.在本技术实施例的一种实现方式中,所述第一上锁信息包含的上锁时间可以通过以下方式确定:
61.(1)查询所述缓存数据库中是否已存在与所述分布式锁对应的其它上锁信息;
62.(2)若所述缓存数据库中已存在与所述分布式锁对应的其它上锁信息,则查找所述其它上锁信息中包含的最晚上锁时间,并将所述最晚上锁时间和指定时长之和确定为所述第一上锁信息包含的上锁时间;
63.(3)若所述缓存数据库中不存在与所述分布式锁对应的其它上锁信息,则将所述第一客户端当前的时钟时间确定为所述第一上锁信息包含的上锁时间。
64.由于不同客户端的时钟时间可能不一样,故第一客户端在构建上锁信息的时候,若发现缓存数据库中已经有该分布式锁的其它上锁信息(例如距离当前时间最近的上锁信息,是由客户端c在一定时间前获得该分布式锁时写入的),则第一客户端构建的上锁信息
的上锁时间会在客户端c的上锁信息的上锁时间(即最晚上锁时间)上加上某个指定时长t,以保证第一客户端当前写入的上锁信息中的上锁时间是该缓存数据库中已有的该分布式锁的所有上锁信息中最晚的,从而保证第一客户端的上锁信息的有效性。另外,若该缓存数据库中不存在该分布式锁的其它上锁信息,此时只需将第一客户端当前的时钟时间确定为相应的上锁时间,即可保证第一客户端的上锁信息的有效性。
65.103、第一客户端在执行完与所述分布式锁对应的任务线程之后,从所述缓存数据库存储的所有上锁信息中查找与所述分布式锁对应且上锁时间最晚的第二上锁信息;
66.接下来,第一客户端可以基于该分布式锁执行相应的任务线程。需要注意的是,在这个过程中,第一客户端可能发生线程停顿导致分布式锁超期,而别的客户端可以获得该分布式锁。
67.第一客户端在执行完相应的任务线程之后,会从该缓存数据库中查找该分布式锁对应的上锁时间最晚的上锁信息(用第二上锁信息表示)。由于在第一客户端执行任务线程的过程中,别的客户端可能已经获得该分布式锁,并往该缓存数据库中写入上锁时间更晚的上锁信息,故第一客户端此时查找到的第二上锁信息不一定是第一客户端在步骤102中写入的上锁信息(即第一上锁信息)。
68.另外,服务器集群可以定期清理该缓存数据库中上锁时间较早的上锁信息(这部分上锁信息已经没有作用了),以节省缓存区的空间。
69.在实际操作中,上锁信息的存储可以采用键值对的方式,即key-value,其中key由分布式锁的标识和上锁时间构成;value由客户端的标识和分布式锁的过期时间构成。假设第一客户端获得的分布式锁为x,则在查找第二上锁信息时,会从缓存数据库中查找key=分布式锁x的id的所有上锁信息中上锁时间最晚的一条上锁信息,作为第二上锁信息。
70.104、若所述第二上锁信息中包含的客户端标识不是所述第一客户端的标识,则第一客户端对与所述任务线程相关的数据进行回滚。
71.若第二上锁信息中包含的客户端标识不是第一客户端的标识,则表明该分布式锁已经被别的客户端获取,此时第一客户端会对该任务线程相关的数据进行回滚(所谓数据回滚,是指将任务线程执行时修改的数据恢复到任务线程执行前的状态),以避免产生脏数据等问题。反之,若第二上锁信息中包含的客户端标识是第一客户端的标识,则表明该分布式锁未被其它客户端获取(此时有两种可能情况,其一是分布式锁未过期,且还在第一客户端上;其二是分布式锁已过期,但没有其它客户端获得该分布式锁),无论是哪种情况,都不存在产生脏数据的问题,故第一客户端可不执行数据回滚的操作。
72.在本技术实施例的一种实现方式中,所述对与所述任务线程相关的数据进行回滚,可以包括:
73.(1)接收由所述服务器集群发送的第二客户端的优先级信息,所述第二客户端为所述分布式系统中与所述第二上锁信息中包含的客户端标识对应的客户端;
74.(2)将所述第二客户端的优先级信息和所述第一客户端的优先级信息进行比较,得到所述第一客户端和所述第二客户端之间的优先级大小;
75.(3)若所述第一客户端的优先级小于所述第二客户端,则对与所述任务线程相关的数据进行回滚。
76.服务器集群可以预先存储各个客户端的优先级信息,用于表示各个客户端的重要
程度,一般来说执行核心业务的客户端的重要程度较高,可以分配较高的优先级。例如,第一客户端a在检测到第二上锁信息中的客户端标识是第二客户端b的标识之后,可以通过服务器集群获取到客户端b的优先级信息,将其和自身的优先级进行比较。若客户端a的优先级小于客户端b的优先级,则表示客户端b执行任务的重要程度高于客户端a。因此,为了保证客户端b的任务线程正常处理以及避免产生脏数据,则客户端a需要进行数据回滚。
77.进一步的,在得到所述第一客户端和所述第二客户端之间的优先级大小之后,还可以包括:
78.若所述第一客户端的优先级大于所述第二客户端,则不执行对与所述任务线程相关的数据进行回滚的操作,并发送数据回滚指令至所述第二客户端,所述数据回滚指令用于指示所述第二客户端对其获取所述分布式锁期间执行操作的数据进行回滚。
79.反之,若第一客户端a的优先级大于第二客户端b的优先级,则应当优先考虑客户端a的任务线程正常处理,此时客户端a可不执行数据回滚的操作。而为了避免产生脏数据,客户端a还可以发送一个数据回滚指令至客户端b,该数据回滚指令用于指示客户端b对其获取该分布式锁期间执行的任务线程相关的数据进行回滚。
80.在本技术实施例的一种实现方式中,在从所述缓存数据库存储的所有上锁信息中查找与所述分布式锁对应且上锁时间最晚的第二上锁信息之后,还可以包括:
81.(1)若所述第二上锁信息中包含的客户端标识是所述第一客户端的标识,则判断与所述任务线程相关的数据是否为预定义的核心数据;
82.(2)若与所述任务线程相关的数据不是预定义的核心数据,则不执行对与所述任务线程相关的数据进行回滚的操作;
83.(3)若与所述任务线程相关的数据是预定义的核心数据,则在释放所述分布式锁的阶段向所述服务器集群发送第一释放锁请求,所述第一释放锁请求用于指示所述服务器集群检测所述分布式锁是否仍在所述第一客户端上,若所述分布式锁仍在所述第一客户端上则执行释放锁的流程,若所述分布式锁不在所述第一客户端上则返回第一异常信息至所述第一客户端;
84.(4)在接收到所述第一异常信息之后,对与所述任务线程相关的数据进行回滚。
85.第一客户端可以预先构建一个核心数据集,定义一部分重要数据为核心数据。然后,通过检测该任务线程相关的数据是否属于该核心数据集中的数据以判断是否为核心数据。对于核心数据而言,其对数据准确性的要求很高。因此,针对核心数据,在释放分布式锁的阶段可以多执行一次验证,检验该分布式锁是否还在第一客户端上,若不在则对核心数据进行回滚,以进一步提高数据安全性。反之,针对非核心数据,则不必执行额外的验证操作。
86.在本技术实施例的一种实现方式中,在从所述缓存数据库存储的所有上锁信息中查找与所述分布式锁对应且上锁时间最晚的第二上锁信息之后,还可以包括:
87.(1)若所述第二上锁信息中包含的客户端标识是所述第一客户端的标识,则获取所述第一客户端的性能数据;
88.(2)若所述性能数据不符合预设的数据回滚性能需求,则不执行对与所述任务线程相关的数据进行回滚的操作;
89.(3)若所述性能数据符合预设的数据回滚性能需求,则在释放所述分布式锁的阶
段向所述服务器集群发送第二释放锁请求,所述第二释放锁请求用于指示所述服务器集群检测所述分布式锁是否仍在所述第一客户端上,若所述分布式锁仍在所述第一客户端上则执行释放锁的流程,若所述分布式锁不在所述第一客户端上则返回第二异常信息至所述第一客户端;
90.(4)在接收到所述第二异常信息之后,对与所述任务线程相关的数据进行回滚。
91.第一客户端的性能数据可以是客户端的cpu性能和内存大小等数据;若该性能数据不符合设定的数据回滚性能需求,则表示第一客户端的性能较差,若再执行释放锁阶段的验证可能会造成卡顿等问题,故可不再进行验证。而若该性能数据符合数据回滚性能需求,则表示第一客户端的性能较好,不必担心卡顿等系统性能问题,故在释放锁的阶段可以再进行一次验证(检验分布式锁是否仍在第一客户端上,若是则正常执行释放锁的操作,否则进行数据回滚),以进一步提高数据安全性。
92.在本技术实施例的一种实现方式中,所述第一上锁信息还包含所述分布式锁的过期时间,在从所述缓存数据库存储的所有上锁信息中查找与所述分布式锁对应且上锁时间最晚的第二上锁信息之后,还可以包括:
93.(1)若所述第二上锁信息中包含的客户端标识是所述第一客户端的标识,则判断当前时间是否超过所述过期时间;
94.(2)若当前时间超过所述过期时间,则对与所述任务线程相关的数据进行回滚。
95.若当前时间超过分布式锁的过期时间,表示虽然没有别的客户端获得该分布式锁,但由于该分布式锁已经过期,即第一客户端上的分布式锁已经不存在,因此别的客户端可以申请获得该分布式锁。考虑到可能存在别的客户端在获取到该分布式锁后写入上锁信息失败的可能性(这样会误认为该分布式锁未被其它客户端获取),故第一客户端仍然对该任务线程相关的数据进行回滚,从而进一步提高数据安全性。而若当前时间未超过分布式锁的过期时间,则表示该分布式锁仍然在第一客户端上,故不必执行数据回滚的操作。
96.在本技术实施例中,首先由某个第一客户端向服务器集群发送上锁请求;当第一客户端基于该上锁请求获得对应的分布式锁后,向指定的缓存数据库写入该分布式锁的第一上锁信息,该第一上锁信息包含该分布式锁的标识、上锁时间和第一客户端的标识;第一客户端在执行完相应的任务线程之后,从该缓存数据库中查找该分布式锁对应的上锁时间最晚的第二上锁信息;若该第二上锁信息中包含的客户端标识不是第一客户端的标识,则第一客户端对该任务线程相关的数据进行回滚。通过这样设置,假设第一客户端在执行任务线程中发生了线程停顿导致分布式锁超期,而另外一个第二客户端已获得该分布式锁,则第一客户端在执行完线程后,会发现从缓存数据库中查找到的第二上锁信息中包含的客户端标识是第二客户端的标识(第二客户端在获得该分布式锁后,与第一客户端一样,会向该缓存数据库写入该分布式锁的上锁信息,其中包含时间更晚的上锁时间以及第二客户端的标识,显然第一客户端查找到的第二上锁信息为第二客户端写入的上锁信息),此时第一客户端会对任务线程相关的数据进行回滚,从而避免产生脏数据等问题。
97.应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
98.对应于上文实施例所述的基于分布式锁的数据回滚方法,图3示出了本技术实施
例提供的一种基于分布式锁的数据回滚装置的结构框图,为了便于说明,仅示出了与本技术实施例相关的部分。
99.该装置应用于第一客户端,所述第一客户端为分布式系统具有的多个客户端中的任意一个客户端,请参照图3,该装置包括:
100.上锁请求发送模块301,用于向所述分布式系统的服务器集群发送上锁请求;
101.上锁信息写入模块302,用于在接收到由所述服务器集群基于所述上锁请求返回的分布式锁后,向指定的缓存数据库写入所述分布式锁的第一上锁信息,所述第一上锁信息包含所述分布式锁的标识、上锁时间以及所述第一客户端的标识;所述多个客户端中的每个客户端在接收到所述服务器集群分配的分布式锁后,都会往所述缓存数据库写入相应的上锁信息;
102.上锁信息查找模块303,用于在执行完与所述分布式锁对应的任务线程之后,从所述缓存数据库存储的所有上锁信息中查找与所述分布式锁对应且上锁时间最晚的第二上锁信息;
103.数据回滚模块304,用于若所述第二上锁信息中包含的客户端标识不是所述第一客户端的标识,则对与所述任务线程相关的数据进行回滚。
104.在本技术实施例的一种实现方式中,所述数据回滚装置还可以包括:
105.上锁信息查询模块,用于查询所述缓存数据库中是否已存在与所述分布式锁对应的其它上锁信息;
106.最晚上锁时间查找模块,用于若所述缓存数据库中已存在与所述分布式锁对应的其它上锁信息,则查找所述其它上锁信息中包含的最晚上锁时间,并将所述最晚上锁时间和指定时长之和确定为所述第一上锁信息包含的上锁时间;
107.上锁时间确定模块,用于若所述缓存数据库中不存在与所述分布式锁对应的其它上锁信息,则将所述第一客户端当前的时钟时间确定为所述第一上锁信息包含的上锁时间。
108.在本技术实施例的一种实现方式中,所述数据回滚模块可以包括:
109.优先级信息接收单元,用于接收由所述服务器集群发送的第二客户端的优先级信息,所述第二客户端为所述多个客户端中与所述第二上锁信息中包含的客户端标识对应的客户端;
110.优先级比较单元,用于将所述第二客户端的优先级信息和所述第一客户端的优先级信息进行比较,得到所述第一客户端和所述第二客户端之间的优先级大小;
111.数据回滚单元,用于若所述第一客户端的优先级小于所述第二客户端,则对与所述任务线程相关的数据进行回滚。
112.进一步的,所述数据回滚模块还可以包括:
113.数据回滚指令发送单元,用于若所述第一客户端的优先级大于所述第二客户端,则不执行对与所述任务线程相关的数据进行回滚的操作,并发送数据回滚指令至所述第二客户端,所述数据回滚指令用于指示所述第二客户端对其获取所述分布式锁期间执行操作的数据进行回滚。
114.在本技术实施例的一种实现方式中,所述数据回滚装置还可以包括:
115.核心数据判断模块,用于若所述第二上锁信息中包含的客户端标识是所述第一客
户端的标识,则判断与所述任务线程相关的数据是否为预定义的核心数据;
116.第一执行模块,用于若与所述任务线程相关的数据不是预定义的核心数据,则不执行对与所述任务线程相关的数据进行回滚的操作;
117.第一验证模块,用于若与所述任务线程相关的数据是预定义的核心数据,则在释放所述分布式锁的阶段向所述服务器集群发送第一释放锁请求,所述第一释放锁请求用于指示所述服务器集群检测所述分布式锁是否仍在所述第一客户端上,若所述分布式锁仍在所述第一客户端上则执行释放锁的流程,若所述分布式锁不在所述第一客户端上则返回第一异常信息至所述第一客户端;
118.第一回滚模块,用于在接收到所述第一异常信息之后,对与所述任务线程相关的数据进行回滚。
119.在本技术实施例的一种实现方式中,所述数据回滚装置还可以包括:
120.性能数据获取模块,用于若所述第二上锁信息中包含的客户端标识是所述第一客户端的标识,则获取所述第一客户端的性能数据;
121.第二执行模块,用于若所述性能数据不符合预设的数据回滚性能需求,则不执行对与所述任务线程相关的数据进行回滚的操作;
122.第二验证模块,用于若所述性能数据符合预设的数据回滚性能需求,则在释放所述分布式锁的阶段向所述服务器集群发送第二释放锁请求,所述第二释放锁请求用于指示所述服务器集群检测所述分布式锁是否仍在所述第一客户端上,若所述分布式锁仍在所述第一客户端上则执行释放锁的流程,若所述分布式锁不在所述第一客户端上则返回第二异常信息至所述第一客户端;
123.第二回滚模块,用于在接收到所述第二异常信息之后,对与所述任务线程相关的数据进行回滚。
124.在本技术实施例的一种实现方式中,所述数据回滚装置还可以包括:
125.过期判断模块,用于若所述第二上锁信息中包含的客户端标识是所述第一客户端的标识,则判断当前时间是否超过所述过期时间;
126.第三回滚模块,用于若当前时间超过所述过期时间,则对与所述任务线程相关的数据进行回滚。
127.本技术实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可读指令,所述计算机可读指令被处理器执行时实现如图1表示的任意一种基于分布式锁的数据回滚方法。
128.本技术实施例还提供一种计算机程序产品,当该计算机程序产品在服务器上运行时,使得服务器执行实现如图1表示的任意一种基于分布式锁的数据回滚方法。
129.图4是本技术一实施例提供的终端设备的示意图。如图4所示,该实施例的终端设备4包括:处理器40、存储器41以及存储在所述存储器41中并可在所述处理器40上运行的计算机可读指令42。所述处理器40执行所述计算机可读指令42时实现上述各个基于分布式锁的数据回滚方法实施例中的步骤,例如图1所示的步骤101至104。或者,所述处理器40执行所述计算机可读指令42时实现上述各装置实施例中各模块/单元的功能,例如图3所示模块301至304的功能。
130.示例性的,所述计算机可读指令42可以被分割成一个或多个模块/单元,所述一个
或者多个模块/单元被存储在所述存储器41中,并由所述处理器40执行,以完成本技术。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机可读指令段,该指令段用于描述所述计算机可读指令42在所述终端设备4中的执行过程。
131.所述终端设备4可以是智能手机、笔记本、掌上电脑及云端终端设备等计算设备。所述终端设备4可包括,但不仅限于,处理器40、存储器41。本领域技术人员可以理解,图4仅仅是终端设备4的示例,并不构成对终端设备4的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备4还可以包括输入输出设备、网络接入设备、总线等。
132.所述处理器40可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
133.所述存储器41可以是所述终端设备4的内部存储单元,例如终端设备4的硬盘或内存。所述存储器41也可以是所述终端设备4的外部存储设备,例如所述终端设备4上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。进一步地,所述存储器41还可以既包括所述终端设备4的内部存储单元也包括外部存储设备。所述存储器41用于存储所述计算机可读指令以及所述终端设备所需的其他程序和数据。所述存储器41还可以用于暂时地存储已经输出或者将要输出的数据。
134.需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本技术方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
135.所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本技术的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
136.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、
计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质。例如u盘、移动硬盘、磁碟或者光盘等。
137.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
138.以上所述实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围,均应包含在本技术的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献