CN114398157A - 分布式事务处理方法、装置、设备、存储介质及程序产品 - Google Patents
分布式事务处理方法、装置、设备、存储介质及程序产品 Download PDFInfo
- Publication number
- CN114398157A CN114398157A CN202111617497.8A CN202111617497A CN114398157A CN 114398157 A CN114398157 A CN 114398157A CN 202111617497 A CN202111617497 A CN 202111617497A CN 114398157 A CN114398157 A CN 114398157A
- Authority
- CN
- China
- Prior art keywords
- request
- clock
- timestamp
- network card
- transaction
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及分布式事务技术领域,尤其涉及一种分布式事务处理方法、装置、设备、存储介质及程序产品。方法包括:接收事务协调者传输的第一请求,其中,所述第一请求包含第一时间戳,所述第一时间戳通过所述事务协调者对应的本地时钟模块获得;通过预设的推迟机制,推迟所述第一请求的执行时间;当所述第一请求未执行时,接收到第二请求,其中,所述第二请求包含第二时间戳,所述第二时间戳小于所述第一时间戳;在所述第二时间戳指示的执行时间,执行所述第二请求;所述推迟机制结束时,执行所述第一请求。本发明用以解决现有技术中分布式事务处理过程中事务中止率高的缺陷,降低分布式事务处理过程中的事务中止率。
Description
技术领域
本发明涉及分布式事务技术领域,尤其涉及一种分布式事务处理方法、装置、设备、存储介质及程序产品。
背景技术
事务(Transaction)是用户并发访问数据库的运算单元,该运算单元具有原子性、一致性、隔离性、持久性的特征。随着各种应用数据量的增大,数据必须被划分到不同节点的服务器,涉及到多个服务器参与的事务被称为分布式事务(Distributed Transaction)。分布式事务在执行过程中,一个事务往往包含多个请求,而部分请求之间存在依赖关系。请求间的依赖关系,导致分布式事务系统中的服务器节点在访问数据时,尤其是访问热点数据时,出现高事务中止率,造成单个事务的执行延迟和整个分布式事务系统的吞吐率降低。
现有技术中,分布式事务的处理过程基于时间戳实现,针对基于时间戳的分布式事务处理方法进行优化时,主要包括两种方式:一种方式是对于分布式时钟进行扩展性优化,这种改进虽然帮助分布式事务系统增加了扩展性,但进一步降低了精度,依然会导致分布式事务在热点数据上频繁中止;另一种方式是在提交阶段寻找机会,挽救本来中止的事务,但是冲突往往在执行阶段就已经发生,提交阶段的中止已经无可挽回,依旧无法有效降低事务中止率。
发明内容
本发明提供一种分布式事务处理方法、装置、设备、存储介质及程序产品,用以解决现有技术中分布式事务处理过程中事务中止率高的缺陷,降低分布式事务处理过程中的事务中止率。
本发明提供一种分布式事务处理方法,应用于事务执行者,包括:接收事务协调者传输的第一请求,其中,所述第一请求包含第一时间戳,所述第一时间戳通过所述事务协调者对应的本地时钟模块获得;通过预设的推迟机制,推迟所述第一请求的执行时间;当所述第一请求未执行时,接收到第二请求,其中,所述第二请求包含第二时间戳,所述第二时间戳小于所述第一时间戳;在所述第二时间戳指示的执行时间,执行所述第二请求;所述推迟机制结束时,执行所述第一请求。
根据本发明提供的一种分布式事务处理方法,所述通过预设的推迟机制,推迟所述第一请求的执行时间,包括:确定所述第一请求为目标数据项的读请求;推迟所述第一请求的执行时间。
根据本发明提供的一种分布式事务处理方法,所述推迟所述第一请求的执行时间,包括:获取所述目标数据项在预设时长内的请求访问量;确定所述请求访问量大于预设访问阈值时,推迟所述第一请求的执行时间。
根据本发明提供的一种分布式事务处理方法,所述推迟所述第一请求的执行时间,包括:将所述第一请求的执行时间推迟第一预设时长;当所述第一预设时长推迟完毕时,获取所述目标数据项的请求失败率;判断所述请求失败率是否小于预设的失败阈值,若是,执行所述第一请求;若否,将所述第一请求的执行时间再次推迟第二预设时长,并以所述第二预设时长为周期,获取所述目标数据项的所述请求失败率,直至所述请求失败率小于所述失败阈值。
根据本发明提供的一种分布式事务处理方法,所述执行所述第一请求之前,还包括:确定所述第一请求包含依赖信息,其中,所述依赖信息用于指示第三请求的执行过程依赖所述第一请求的执行结果,所述第三请求包括所述第一时间戳;所述执行所述第一请求之后,还包括:当未接收到所述第三请求时,接收到第四请求,其中,所述第四请求包含第四时间戳,其中,所述第四时间戳大于所述第一时间戳;阻塞所述第四请求的执行,直至接收并执行所述第三请求后,执行所述第四请求,以使所述第三请求执行于所述第四请求之前。
根据本发明提供的一种分布式事务处理方法,所述确定所述第一请求包含依赖信息时,还包括:判断是否存在所述第三请求执行的环境基础,若否,生成所述第一请求的请求失败信息,并将所述请求失败信息传输给所述事务协调者;若是,生成所述第三请求的预占位信息,并在所述第一请求执行完毕时,生成第一提交信息,将所述第一提交信息传输给所述事务协调者;所述阻塞所述第四请求的执行,包括:根据所述预占位信息,阻塞所述第四请求的执行。
根据本发明提供的一种分布式事务处理方法,所述第一请求为目标数据项的读请求,所述第三请求为所述目标数据项的写请求;所述阻塞所述第四请求的执行,包括:确定所述第四请求为所述目标数据项的读请求;阻塞所述第四请求的执行。
根据本发明提供的一种分布式事务处理方法,所述执行所述第一请求,包括:基于本地处理器时钟,确定所述本地处理器计时达到所述第一时间戳指示的所述执行时间时,执行所述第一请求;其中,所述本地处理器时钟与本地网卡时钟同步,所述本地网卡时钟与预设根网卡时钟同步。
本发明提供一种分布式事务处理方法,应用于事务协调者,包括:接收到上层应用传输的目标事务时,生成时钟请求执行,并传输给本地时钟模块;获取所述本地时钟模块返回的第一时间戳;基于所述第一时间戳,生成所述第一请求,并将所述第一请求传输给事务执行者。
根据本发明提供的一种分布式事务处理方法,所述基于所述第一时间戳,生成所述第一请求之前,还包括:确定依赖信息,其中,所述依赖信息用于指示第三请求的执行过程依赖第一请求的执行结果;所述基于所述第一时间戳,生成所述第一请求,包括:基于所述第一时间戳和所述依赖信息,生成所述第一请求。
根据本发明提供的一种分布式事务处理方法,所述将所述第一请求传输给事务执行者之后,还包括:获取所述事务执行者传输的请求失败信息;生成所述目标事务的事务失败信息,并将所述事务失败信息传输给所述上层应用,其中,所述请求失败信息表示所述事务执行者不存在所述第三请求执行的环境基础;或者,获取所述事务执行者传输的第一提交信息,生成所述第三请求,并将所述第三请求传输给所述事务执行者。
根据本发明提供的一种分布式事务处理方法,所述第一请求为目标数据项的读请求,所述第三请求为所述目标数据项的写请求;所述获取所述事务执行者传输的第一提交信息,生成所述第三请求,并将所述第三请求传输给所述事务执行者,包括:获取所述事务执行者传输的第一提交信息;根据所述第一提交信息,计算需要写入所述目标数据项的最新数据;基于所述最新数据,生成所述第三请求,并将所述第三请求传输给所述事务执行者。
本发明提供一种分布式事务处理方法,应用于本地时钟模块,包括:接收到事务协调者传输的时钟请求指令时,获取本地处理器时钟生成的第一时间戳,其中,所述本地处理器时钟与本地网卡时钟同步,所述本地网卡时钟与预设根网卡时钟同步;将所述第一时间戳返回给所述事务协调者。
根据本发明提供的一种分布式事务处理方法,所述接收到事务协调者传输的时钟请求指令之前,还包括:获取所述预设根网卡时钟与所述本地网卡时钟之间的第一映射关系;根据所述第一映射关系,调整所述本地网卡时钟,以使所述本地网卡时钟和所述预设根网卡时钟同步;获取所述本地网卡时钟与本地处理器时钟之间的第二映射关系;根据所述第二映射关系,调整所述本地处理器时钟,以使所述本地处理器时钟和所述本地网卡时钟同步。
根据本发明提供的一种分布式事务处理方法,所述获取预设根网卡时钟与本地网卡时钟之间的第一映射关系,包括:在至少一个连续的时间片内,分别进行至少一次以下处理:以面向数据报的不可靠服务模式,由本地网卡向预设根网卡发送第一数据包,获取所述第一数据包离开所述本地网卡时,所述本地网卡时钟对应的第一本地网卡时间戳;以面向连接的可靠服务模式,由所述本地网卡向所述预设根网卡发送第二数据包,获取所述第二数据包离开所述本地网卡时,所述本地网卡时钟对应的第二本地网卡时间戳;获取所述预设根网卡传输的第一根网卡时间戳和第二根网卡时间戳,其中,所述第一根网卡时间戳为所述第一数据包达到所述预设根网卡时,所述预设根网卡时钟对应的时间戳,所述第二根网卡时间戳为所述第二数据包达到所述预设根网卡时,所述预设根网卡时钟对应的时间戳;根据第一本地网卡时间戳、所述第一根网卡时间戳、所述第二本地网卡时间戳和所述第二根网卡时间戳,获取所述预设根网卡时钟与所述本地网卡时钟的第一时间戳探针对;根据至少一个所述时间片内的至少一个所述第一时间戳探针对,获取所述第一映射关系。
根据本发明提供的一种分布式事务处理方法,所述根据至少一个所述时间片内的至少一个所述第一时间戳探针对,获取所述第一映射关系,包括:根据至少一个时间片内的所述第一时间戳探针对,拟合所述预设根网卡时钟与所述本地网卡时钟之间线性关系;获取第i个时间片内所述线性关系的第i个中点函数值,以及获取第i+1个时间片内所述线性关系的第i+1个中点函数值,其中,i为大于等于0的整数;将连接所述第i个中点函数值和所述第i+1个中点函数值形成的直线,与第i+3个时间片右端点的交点,作为第i个预测点;将至少两个所述预测点依次连接,获得所述第一映射关系。
根据本发明提供的一种分布式事务处理方法,所述获取所述本地网卡时钟与本地处理器时钟之间的第二映射关系,包括:在至少一个连续的时间片内,分别进行至少一次以下处理:获取所述本地处理器时钟的第一处理器时间戳;获取所述本地网卡时钟生成的第一网卡时间戳;获取所述本地处理器时间生成的第二处理器时间戳;基于第一处理器时间戳、第二处理器时间戳和预设的拟合系数,确定与所述第一网卡时间戳对应的中心处理器时间戳;根据所述中心处理器时间戳和所述第一网卡时间戳,获取所述本地网卡时钟与所述本地处理器时钟的第二时间戳探针对;根据至少一个所述时间片内的至少一个所述第二时间戳探针对,获取所述第二映射关系。
本发明还提供一种分布式事务处理的事务执行者装置,包括:第一接收模块,用于接收事务协调者传输的第一请求,其中,所述第一请求包含第一时间戳,所述第一时间戳通过所述事务协调者对应的本地时钟模块获得;推迟模块,用于通过预设的推迟机制,推迟所述第一请求的执行时间;第二接收模块,用于当所述第一请求未执行时,接收到第二请求,其中,所述第二请求包含第二时间戳,所述第二时间戳小于所述第一时间戳;第一执行模块,用于在所述第二时间戳指示的执行时间,执行所述第二请求;第二执行模块,用于所述推迟机制结束时,执行所述第一请求。
本发明还提供一种分布式事务处理的事务协调者装置,包括:第三接收模块,用于接收到上层应用传输的目标事务时,生成时钟请求执行,并传输给本地时钟模块;获取模块,用于获取所述本地时钟模块返回的第一时间戳;生成模块,用于基于所述第一时间戳,生成所述第一请求,并将所述第一请求传输给事务执行者。
本发明还提供一种分布式事务处理的本地时钟模块,包括:接收单元,用于接收到事务协调者传输的时钟请求指令时,获取本地处理器时钟生成的第一时间戳,其中,所述本地处理器时钟与本地网卡时钟同步,所述本地网卡时钟与预设根网卡时钟同步;返回单元,用于将所述第一时间戳返回给所述事务协调者。
本发明还提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述的以事务执行者为执行主体的分布式事务处理方法的步骤;或者,所述处理器执行所述程序时实现如上述任一种所述的以事务协调者为执行主体的分布式事务处理方法的步骤;或者所述处理器执行所述程序时实现如上述任一种所述的以本地时钟模块为执行主体的分布式事务处理方法的步骤。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述以事务执行者为执行主体的分布式事务处理方法的步骤;或者,该计算机程序被处理器执行时实现如上述任一种所述以事务协调者为执行主体的分布式事务处理方法的步骤;或者,该计算机程序被处理器执行时实现如上述任一种所述以本地时钟模块为执行主体的分布式事务处理方法的步骤。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述以事务执行者为执行主体的分布式事务处理方法的步骤;或者,所述计算机程序被处理器执行时实现如上述任一种所述以事务协调者为执行主体的分布式事务处理方法的步骤;或者,所述计算机程序被处理器执行时实现如上述任一种所述以本地时钟模块为执行主体的分布式事务处理方法的步骤。
本发明提供的分布式事务处理方法、装置、设备、存储介质及程序产品,事务执行者接收事务协调者传输的第一请求,其中,第一请求包含第一时间戳,第一时间戳通过事务协调者对应的本地时钟模块获得;通过预设的推迟机制,推迟第一请求的执行时间;当第一请求未执行时,接收到第二请求,其中,第二请求包含第二时间戳,第二时间戳小于第一时间戳;在第二时间戳指示的执行时间,执行第二请求;推迟机制结束时,执行第一请求。现有技术中,当第一请求先达到事务执行者时,事务执行者会执行第一请求;但是由于第二时间戳小于第一时间戳,第一请求执行后,会导致第二请求无法执行,则第二请求对应的事务将会中止。而本发明中,事务执行者接收到第一请求后,会将第一请求推迟,以使包含更小的第二时间戳的第二请求优先执行,然后再执行第一请求。这样,避免了第二请求无法执行导致对应事务中止的情况,降低分布式事务处理过程中整体的事务中止率。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的分布式事务处理方法由事务执行者实施的流程示意图;
图2是本发明提供的分布式事务处理方法由事务协调者实施的流程示意图;
图3是本发明提供的分布式事务处理方法由本地时钟模块实施的流程示意图;
图4是本发明提供的网卡时钟同步的流程示例图;
图5是本发明提供的获取第一映射函数的流程示例图;
图6是本发明提供的分布式事务系统的结构示例图;
图7是本发明提供的分布式事务处理方法实施读修改写操作的流程示意图;
图8是本发明提供的分布式事务处理的事务执行者装置的结构示意图;
图9是本发明提供的分布式事务处理的事务协调者装置的结构示意图;
图10是本发明提供的分布式事务处理的本地时钟模块的结构示意图;
图11是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
发明人对现有技术进行分析,分布式事务处理的过程实现于分布式事务系统中,分布式事务系统包括至少一个服务器,各个服务器之间通过高速数据中心网络(简称高速网络),具体的,通过高速远程直接数据存取(Remote Direct Memory Access,RDMA)网络连接。每个服务器中均包括事务协调者、事务执行者、备份参与者、时钟模块和内存。各个服务器的内存中存储有不同的数据项。事务协调者、事务执行者、备份参与者和时钟模块分别是服务器内部的程序模块,用于实现分布式事务处理过程中的相应功能。
上层应用能够与分布式系统进行数据交互,上层应用根据需要生成一个事务,并将该事务传输给一个服务器,该服务器中的事务协调者将该事务包含的至少一个请求,分发至分布式事务系统中的各个服务器的事务执行者,各个服务器的事务执行者根据接收到的请求访问该服务器内存中的数据项,以完成整个事务。
而对于一个服务器的事务执行者来说,接收到的请求可以为同一个事务包含的不同请求,也可以为不同事务包含的不同请求,各个请求中包含有时间戳,指示该请求的执行时间。事务执行者按照请求时间戳所指示的时间顺序逐个执行各个请求。
发明人对上述基于时间戳的分布式事务处理方法进行分析,发现影响事务中止率的主要有三个原因:一是分布式事务系统中各个服务器的时钟不够精准,时钟与时钟之间缺乏同步,事务获取的时间戳和物理时间存在大量不一致;二是访问本地数据和通过网络访问数据存在延迟差距,这导致请求被服务的顺序和请求包含的时间戳顺序不一致;三是有依赖请求必须经过依赖等待,即前置请求执行后,才能发送并执行,等待造成了请求执行的乱序。
基于上述分析,下面结合图1-图7描述本发明的分布式事务处理方法。
首先,以事务执行者为执行主体介绍本发明的分布式事务处理方法。
一个实施例中,如图1所示,分布式事务处理方法由事务执行者实施的流程步骤如下:
步骤101,接收事务协调者传输的第一请求,其中,第一请求包含第一时间戳,第一时间戳通过事务协调者对应的本地时钟模块获得。
本实施例中,第一请求属于目标事务,该目标事务由上层应用传输给事务协调者。接收该第一请求的事务执行者,与传输第一请求的事务协调者可以位于同一服务器,也可以位于不同的服务器。事实上,目标事务包含多个请求,事务协调者将目标事务的多个请求分发至不同事务执行者时,既可以分发至该事务协调者所在服务器中的事务执行者,也可以分发至非该事务协调者所在服务器中的事务执行者。
本实施例中,第一请求包含第一时间戳,该第一时间戳通过事务协调者对应的本地时钟模块获得。第一时间戳用于指示第一请求的执行时间。
步骤102,通过预设的推迟机制,推迟第一请求的执行时间。
本实施例中,事务执行者并不是对接收的所有请求均采用推迟机制进行推迟。而是通过一些条件对接收的请求进行筛选,将符合条件的请求推迟。
一个实施例中,再基于时间戳的分布式事务处理方法中,读请求不会失败,写请求会由于与已经发生的、拥有更小时间戳的读请求出现冲突而失败。因此,通过预设的推迟机制,推迟第一请求的执行时间,具体实现过程如下:确定第一请求为目标数据项的读请求;推迟第一请求的执行时间。
本实施例中,将读请求进行推迟,避免时间戳更大的写请求失败,进而降低事务中止率。
一个实施例中,推迟事务内所有读请求的执行,会急剧增加事务的执行延迟。确定第一请求为目标数据项的读请求之后,推迟第一请求的执行时间,具体实现过程为:获取目标数据项在预设时长内的请求访问量;确定请求访问量大于预设访问阈值时,推迟第一请求的执行时间。
本实施例中,预设访问阈值根据实际情况和需要设定具体数值。当目标数据项在预设时段内的请求访问量大于预设访问阈值时,例如,目标数据项在距离当前时刻1小时内的访问量大于预设访问阈值时,表明在该预设时段内,该目标数据项为热点数据,由于热点数据上的请求更多,更容易发生请求乱序的情况,所以对发生在热点数据上的第一请求推迟执行。对于非热点数据上的读请求,即目标数据项在预设时段内的请求访问量小于或等于预设访问阈值时,由于非热点数据上请求到达的周期长,推迟所述读请求的收益低,若推迟不仅没有成功执行很多迟到的写请求,而且增加了读请求的执行延迟。所以,不推迟非热点数据上的读请求,直接按照该读请求包含的时间戳执行。
一个具体的实施例中,为了探测分布式事务系统中的热点数据,采用了动态热点监测机制。该机制统计距离当前时刻10毫秒内各个数据项的请求数量(又称请求访问量),根据每个数据项上的请求吞吐量判断数据是否被频繁访问。如果数据项成为热点数据,则对访问该数据项的读请求推迟执行;如果通过监测发现数据项的访存频率降低,已经变成“冷数据”,也就是访问该数据项的频率降低,则停止对所述数据项应用推迟机制。
一个实施例中,应用推迟机制推迟第一请求时,启发式地决定请求的推迟时间。具体的,推迟第一请求的执行时间,实现过程如下:将第一请求的执行时间推迟第一预设时长;当第一预设时长推迟完毕时,获取目标数据项的请求失败率;判断请求失败率是否小于预设的失败阈值,若是,执行第一请求;若否,将第一请求的执行时间再次推迟第二预设时长,并以第二预设时长为周期,获取目标数据项的请求失败率,直至请求失败率小于失败阈值。其中,请求失败率指的是历史上请求目标数据项失败的次数与请求目标数据项的总次数的比值。
本实施例中,第一预设时长小于第二预设时长。当第一请求的执行时间推迟第一预设时长期间,若第二请求或者对目标数据项的其他写请求执行完毕,则该目标数据项的失败率会降低。若该失败率降低至小于预设的失败阈值,则不再推迟第一请求的执行时间;若失败率仍然小于失败阈值,则将第一请求的执行时间推迟第二预设时长,以第二预设时长为周期,周期性观察失败率是否小于失败阈值,直至失败率仍然小于失败阈值。
本实施例中,事务执行者会先使用一个较小的推迟时间(即第一预设时长),根据数据项上请求的失败率,决定是否增加读请求(即第一请求)的推迟时间(即第二预设时长),以容忍更多迟到的写请求(例如第二请求为目标数据项的写请求)优先执行。启发式地决定请求的推迟时间,当失败率降低至失败阈值以下时,停止推迟第一请求的执行,可以有效减少不必要的推迟,在降低请求失败率及事务中止率的前提下,优化事务执行延迟。
一个实施例中,事务执行者在处理请求时,还可以推迟先到来的本地请求,优先执行远端发起的请求,具体的,第一请求为事务执行者所在服务器生成的请求推迟时,将事务执行者所在服务器生成的请求推迟,优先执行非事务执行者所在服务器生成的请求,由此避免请求在传输过程中由于网络延迟差距导致的请求到来的乱序。
步骤103,当第一请求未执行时,接收到第二请求,其中,第二请求包含第二时间戳,第二时间戳小于第一时间戳。
本实施例中,当第一请求推迟过程中,接收到包含更小的第二时间戳的第二请求,则可以优先执行第二请求。
步骤104,在第二时间戳指示的执行时间,执行第二请求。
本实施例中,根据第二时间戳指示的执行时间,执行第二请求。当第二请求为目标数据项的写请求时,则可以避免第二请求失败,进而避免第二请求对应的事务中止,降低分布式事务处理的事务中止率。当第二请求为读请求时,则可以避免时间戳的混乱,避免请求中止,进一步降低事务中止率。
步骤105,推迟机制结束时,执行第一请求。
本实施例中,给定第一请求推迟结束的条件,即推迟机制结束时,则执行第一请求,避免出现第一请求无法正常执行的情况。
一个实施例中,第一请求的执行以本地处理器时钟为基准,具体的,执行第一请求,实现过程如下:基于本地处理器时钟,确定本地处理器计时达到第一时间戳指示的执行时间时,执行第一请求;其中,本地处理器时钟与本地网卡时钟同步,本地网卡时钟与预设根网卡时钟同步。
本实施例中,第一请求以第一时间戳的执行过程,以本地处理器时钟为基础。本地处理器时钟与本地网卡时钟同步,本地网卡时钟与预设根网卡时钟同步,则保证了本地处理器时钟与根网卡时钟同步。当分布式事务系统中每一个服务器的本地处理器时钟,均与根网卡时钟同步时,则保证了整个分布式事务系统的时钟一致性,避免时钟与时钟之间不同步造成的事务中止,进一步降低事务中止率。
本实施例中,本地处理器时钟与本地网卡时钟同步的过程,以及本地网卡时钟与预设根网卡时钟同步的过程,可以通过各个服务器中时钟模块来实现。
一个实施例中,执行第一请求之前,确定第一请求包含依赖信息,其中,依赖信息用于指示第三请求的执行过程依赖第一请求的执行结果,第三请求包括第一时间戳;执行第一请求之后,当未接收到第三请求时,接收到第四请求,其中,第四请求包含第四时间戳,其中,第四时间戳大于第一时间戳;阻塞第四请求的执行,直至接收并执行第三请求后,执行第四请求,以使第三请求执行于第四请求之前。
本实施例中,事务执行者接收到第四请求,由于第四请求包含的第四时间戳大于第三请求包含的第一时间戳。当未接收到第三请求时,若接收到第四请求,则会先执行第四请求。但是,由于第三请求为有依赖请求,且第四时间戳大于第一时间戳,若先执行第四请求,则会导致第三请求无法执行。所以,当接收到第四请求时,阻塞第四请求的执行,使第三请求执行于第四请求之前,这样就可以保证第三请求和第四请求均可以正常执行,进而降低事务中止率。
本实施例中,一个事务包含多个请求,在该事务的各个请求中,无依赖请求不依赖该事务内的其他请求,即该请求可直接传输给事务执行者执行;有依赖请求依赖该事务内的其他请求,即该请求的执行过程依赖于另一请求(又称前置请求)的执行结果。对于无依赖请求,事务协调者将每一个无依赖请求直接发送给对应的事务执行者,事务执行者直接执行该无依赖请求;对于有依赖请求,事务协调者将有依赖请求的存在信息(即依赖信息)和前置请求,预先一并发送给事务执行者,让事务执行着提前感知有依赖请求的存在并进行“提前占位”,减少请求执行失败率,从而降低事务中止率。其中,事务中止率指的是分布式事务系统历史上未成功执行的事务除以系统处理的所有事务得到的比率。
本实施例中,目标事务中的第一请求和第三请求存在依赖关系,即第三请求为有依赖请求,第一请求为第三请求的前置请求。事务执行者接收到第一请求后,根据第一请求包含的依赖信息确定第三请求的存在。
一个实施例中,依赖信息为预先设置于第一请求中的布尔变量。当存在依赖第一请求的第三请求时,事务协调者发送第一请求时,将第一请求中的布尔变量置为“1”,指示第三请求的存在。而事务协调者发送无依赖请求时,将无依赖请求中的布尔变量置为“0”,指示该无依赖请求不存在依赖关系。事务执行者通过布尔变量设置的具体值,可以确定接收的请求是否存在依赖关系。
本实施例中,布尔变量占用数据量很小,在能够准确的表示依赖关系的同时,对数据传输负担的影响较小。
一个实施例中,第一请求的执行是为了完成整个目标事务,所以确定第一请求中包含第三请求的依赖信息后,可以预先判断事务执行者是否存在第三请求执行的环境基础。具体的,确定第一请求包含依赖信息时,还包括:判断是否存在第三请求执行的环境基础,若否,生成第一请求的请求失败信息,并将请求失败信息传输给事务协调者;若是,生成第三请求的预占位信息,并在第一请求执行完毕时,生成第一提交信息,将第一提交信息传输给事务协调者;阻塞第四请求的执行,包括:根据预占位信息,阻塞第四请求的执行。
本实施例中,事务执行者预先判断是否存在第三请求执行的环境基础,当不存在时,事务执行者直接生成请求失败信息,并将该请求失败信息传输给事务协调者。由于目标事务包含的任意一个请求失败时,该目标事务整体执行失败。所以当事务协调者接收到请求失败信息后,直接生成目标事务的事务失败信息,并将该事务失败信息告知上层应用。上述过程在第三请求传输之前,预先判断了第三请求执行的环境基础,当第三请求执行的环境基础不存在时,事务协调者将直接提交事务失败信息,节省了传输第三请求占用的处理资源,进一步提高整个分布式事务系统的事务处理效率。
一个实施例中,第一请求为目标数据项的读请求,第三请求为目标数据项的写请求,目标数据项通过事务执行者访问。
而在基于时间戳的分布式事务处理中,读请求不会失败,写请求会由于与已经发生的读请求发生冲突而失败。具体的,若第一请求执行之后,第三请求执行之前,执行了其他的读请求,则会造成第三请求的失败。冲突原因主要是请求执行的顺序和请求所标记的时间戳顺序不一致,不一致的主要原因包括本地访问延迟和远端网络访问延迟的差异、网络链路的不对称性均等。
基于上述,阻塞第四请求的执行,具体实现过程如下:确定第四请求为目标数据项的读请求;阻塞第四请求的执行。
事务执行者在收到第四请求,并确定第四请求为目标数据项的读请求后,会阻塞第四请求的执行,对于推迟期间到达的修改同一目标数据项的写请求(即第三请求)优先执行,通过这种方式将第四请求安排到第三请求之后执行,避免了冲突的发生。同时,事务执行者收到第四请求之后缓存一段时间,也就是推迟第四请求的执行时间,若其他可能拥有更小时间戳的请求在第四请求缓存期间到来后,可以先执行更小时间戳的请求,有效避免请求执行时产生的冲突。
下面,以事务协调者为执行主体介绍本发明的分布式事务处理方法。
一个实施例中,如图2所示,分布式事务处理方法由事务协调者实施的流程步骤如下:
步骤201,接收到上层应用传输的目标事务时,生成时钟请求执行,并传输给本地时钟模块;
步骤202,获取本地时钟模块返回的第一时间戳;
步骤203,基于第一时间戳,生成第一请求,并将第一请求传输给事务执行者。
本实施例中,上层应用将目标事务传输至分布式事务系统中的一个服务器,该服务器上的事务协调者接收目标事务。事务协调者根据目标事务的具体内容,生成该目标事务对应的各个请求,该各个请求中包括第一请求,每个请求需要配置时间戳。以第一请求为例,事务协调者向本地时钟模块请求第一时间戳,具体的,事务协调者向本地时钟模块中的本地处理器时钟请求第一时间戳,并根据第一时间戳和依赖信息,生成第一请求。最后将第一请求传输给对应服务器的事务执行者,以使该事务执行者执行第一请求。相应的,事务协调者需要将目标事务包含的各个请求分发至各自对应的事务执行者。
一个实施例中,事务协调者获得目标事务后,根据该目标事务确定各个请求之间的依赖关系。具体的,基于第一时间戳,生成第一请求之前,确定依赖信息,其中,依赖信息用于指示第三请求的执行过程依赖第一请求的执行结果;基于第一时间戳,生成第一请求,具体过程为:基于第一时间戳和依赖信息,生成第一请求。
一个实施例中,依赖信息为预先设置于第一请求中的布尔变量。当存在依赖第一请求的第三请求时,事务协调者发送第一请求时,将第一请求中的布尔变量置为“1”,指示第三请求的存在。而当第一请求为无依赖请求时,事务协调者将第一请求中的布尔变量置为“0”,指示该第一请求不存在依赖关系。
一个实施例中,将第一请求传输给事务执行者之后,获取事务执行者传输的请求失败信息;生成目标事务的事务失败信息,并将事务失败信息传输给上层应用,其中,请求失败信息表示事务执行者不存在第三请求执行的环境基础;或者,获取事务执行者传输的第一提交信息,生成第三请求,并将第三请求传输给事务执行者。
本实施例中,事务协调者将第一请求传输给事务执行者后,事务执行者将第一请求执行结果回复发送给事务协调者。而事务协调者如果收到目标事务中任何一个请求执行失败,既包括第一请求失败,也包括目标事务中其他请求失败,则会中止所述事务;否则,在收到目标事务中所有请求成功信息后,事务协调者认为目标事务的所有请求已经成功完成,就会通知所有事务执行者提交事务的修改,将事务的修改发送给每一个服务器中的备份参与者进行备份,最后将事务提交给上层应用。
本实施例中,生成第三请求时,同样从时钟模块中的本地处理器时钟获取的第一时间戳,配置给第三请求。
一个实施例中,第一请求为目标数据项的读请求,第三请求为目标数据项的写请求。具体的,获取事务执行者传输的第一提交信息,生成第三请求,并将第三请求传输给事务执行者,实现过程如下:获取事务执行者传输的第一提交信息;根据第一提交信息,计算需要写入目标数据项的最新数据;基于最新数据,生成第三请求,并将第三请求传输给事务执行者。
本实施例中,事务执行者执行第一请求(读请求)后,将第一提交信息传输给事务协调者,第一提交信息中包括读取目标数据项包含的数据。事务协调者根据第一提交信息,计算需要写入目标数据项的最新数据。然后将包含最新数据的写请求(即第三请求)传输给事务执行者。事务执行者接收第三请求后,无需再进行计算,直接将最新数据写入即可。由此,可以减轻事务执行者处理资源的压力。
一个实施例中,第三请求已经修改目标数据项中的数据,而四请求需要读取的其实是第三请求修改之前的数据。因此,服务器内存中的数据项,包括多个历史版本的数据项。每个历史版本的数据项包括该版本数据项的生成时间戳,最新被访问时间戳,以及版本状态。当事务执行者执行第四请求时,通过第四请求包含的第四时间戳,读取对应的历史版本的数据项,保证读取数据的正确性。
下面,以本地时钟模块为执行主体介绍本发明的分布式事务处理方法。
一个实施例中,如图3所示,分布式事务处理方法由本地时钟模块实施的流程步骤如下:
步骤301,接收到事务协调者传输的时钟请求指令时,获取本地处理器时钟生成的第一时间戳,其中,本地处理器时钟与本地网卡时钟同步,本地网卡时钟与预设根网卡时钟同步;
步骤302,将第一时间戳返回给事务协调者。
本实施例中,一个服务器的本地时钟模块包括本地处理器时钟和本地网卡时钟。当时钟模块接收到事务协调者传输的时钟请求指令时,获取本地处理器时钟生成的第一时间戳,并将第一时间戳返回给事务协调者。
本实施例中,时钟模块还需要维护本地处理器时钟与本地网卡时钟的同步,以及本地网卡时钟与预设根网卡时钟的同步。
一个实施例中,为了使本地处理器时钟与本地网卡时钟同步,本地网卡时钟与预设根网卡时钟同步,本地时钟模块接收到事务协调者传输的时钟请求指令之前,获取预设根网卡时钟与本地网卡时钟之间的第一映射关系;根据第一映射关系,调整本地网卡时钟,以使本地网卡时钟和预设根网卡时钟同步;获取本地网卡时钟与本地处理器时钟之间的第二映射关系;根据第二映射关系,调整本地处理器时钟,以使本地处理器时钟和本地网卡时钟同步。
本实施例中,通过维护本地处理器时钟与本地网卡时钟的同步,以及本地网卡时钟与预设根网卡时钟的同步,即保证了本地处理器时钟和根网卡时钟的同步。当分布式事务系统中,每一个服务器的本地处理器时钟均与根网卡时钟同步,进而实现了整个分布式事务系统的时钟同步。
一个实施例中,第一映射关系根据时间戳得到,具体的,获取预设根网卡时钟与本地网卡时钟之间的第一映射关系,实现过程如下:在至少一个连续的时间片内,分别进行至少一次以下处理:以面向数据报的不可靠服务模式,由本地网卡向预设根网卡发送第一数据包,获取第一数据包离开本地网卡时,本地网卡时钟对应的第一本地网卡时间戳;以面向连接的可靠服务模式,由本地网卡向预设根网卡发送第二数据包,获取第二数据包离开本地网卡时,本地网卡时钟对应的第二本地网卡时间戳;获取预设根网卡传输的第一根网卡时间戳和第二根网卡时间戳,其中,第一根网卡时间戳为第一数据包达到预设根网卡时,预设根网卡时钟对应的时间戳,第二根网卡时间戳为第二数据包达到预设根网卡时,预设根网卡时钟对应的时间戳;根据第一本地网卡时间戳、第一根网卡时间戳、第二本地网卡时间戳和第二根网卡时间戳,获取预设根网卡时钟与本地网卡时钟的第一时间戳探针对;根据至少一个时间片内的至少一个第一时间戳探针对,获取第一映射关系。
本实施例中,分布式事务系统内网络接口控制器(又称网卡,network interfacecontroller,NIC)时钟之间的同步,所有NIC时钟和根NIC时钟建立树状结构,每个NIC时钟通过NIC两两同步间接地和根NIC时钟进行同步。两个NIC时钟之间的同步,首先批量获得探针对。探针对的获得采用了远程直接数据存取(RDMA)技术提供的接口ibv_cq_ex,以及模式面向数据报的不可靠服务(UD)模式和面向连接的可靠服务(RC)模式。本实施例中,RNIC B表示预先建立的树状结构中的预设根网卡,RNIC A表示预先建立的树状结构中的与预设根网卡关联的一个子网卡。
如图4所示,网卡RNIC A的时钟和网卡RNIC B的时钟进行同步,RNIC A使用UD模式的发送命令向RNIC B发送(SEND)一个数据包,ibv_cq_ex结构会缓存数据包在链路两端驻留的时间戳;RNIC A会再使用RC模式的发送命令向RNIC B发送一个数据包,由于RC模式是可靠传输,ibv_cq_ex结构会缓存数据包的确认消息在链路两端驻留的时间戳,由此形成了一个仅需要RNIC A介入的往返探针消息。最后,RNIC B只需要异步地将收集的时间戳获取并批量传输给RNIC A,具体的,可以通过确认字符(Acknowledge character,ACK)实现,RNIC A即可获得所述时间片内所有探针对进行拟合生成线性函数。通过所述方法,探针的发送任务可以灵活地分配给两个同步节点中的任何一个,而不需要两端都介入,减少了探针发送任务引入的中央处理器(central processing unit,CPU)占用。
上述实现过程中,当子网卡RNIC A并不与预设根网卡直接关联时,RNIC B可以为预先建立的树状结构中与RNIC A关联的上级子网卡,此时,时钟同步过程与上述过程类同。
一个实施例中,根据至少一个时间片内的至少一个第一时间戳探针对,获取第一映射关系,具体实现过程如下:根据至少一个时间片内的第一时间戳探针对,拟合预设根网卡时钟与本地网卡时钟之间线性关系;获取第i个时间片内线性关系的第i个中点函数值,以及获取第i+1个时间片内线性关系的第i+1个中点函数值,其中,i为大于等于0的整数;将连接第i个中点函数值和第i+1个中点函数值形成的直线,与第i+3个时间片右端点的交点,作为第i个预测点;将至少两个预测点依次连接,获得第一映射关系。
具体的,如图5所示,当本地网卡时钟为RNIC A,预设根网卡为RNIC B时,时钟A(clockA)表示RNIC A的时钟,时钟B(clockB)表示RNIC B的时钟,clockA轴上0到1(包括1)表示一个时间片,1到2(包括2)表示一个时间片,以此类推。分时间片统计两时钟之间的探针消息,并拟合出一个线性函数,代表在本时间片内时钟A到时钟B的线性关系;对于该线性关系,计算出在第i个时间片中点Mi的函数值;连接相邻时间片中点Mi和Mi+1的值,形成新的线性函数,交于第i+3个时间片的右端点,得到预测点Ai;连接相邻的预测点Ai和Ai+1,得到连续的预测线性函数,将该函数作为所有时间片内时钟A到时钟B的第一映射函数。
例如,第0个时间片中点函数值为M0,第1个时间片中点函数值为M1,第2个时间片中点函数值为M2,第3个时间片中点函数值为M3。连接相邻时间片中点M0和M1的值,形成新的线性函数,交于第3个时间片的右端点,得到预测点A0;连接相邻时间片中点M1和M2的值,形成新的线性函数,交于第4个时间片的右端点,得到预测点A1;连接相邻时间片中点M2和M3的值,形成新的线性函数,交于第5个时间片的右端点,得到预测点A2。A0、A1和A2连接形成的连续的预测线性函数,则为时钟A到时钟B的第一映射函数。
上述实现过程中,当子网卡RNIC A并不与预设根网卡直接关联时,RNIC B可以为预先建立的树状结构中与RNIC A关联的上级子网卡,此时,获得第一映射函数的处理过程与上述过程类同。
一个实施例中,第二映射关系根据时间戳得到,具体的,获取本地网卡时钟与本地处理器时钟之间的第二映射关系,实现过程如下:在至少一个连续的时间片内,分别进行至少一次以下处理:获取本地处理器时钟的第一处理器时间戳;获取本地网卡时钟生成的第一网卡时间戳;获取本地处理器时间生成的第二处理器时间戳;基于第一处理器时间戳、第二处理器时间戳和预设的拟合系数,确定与第一网卡时间戳对应的中心处理器时间戳;根据中心处理器时间戳和第一网卡时间戳,获取本地网卡时钟与本地处理器时钟的第二时间戳探针对;根据至少一个时间片内的至少一个第二时间戳探针对,获取第二映射关系。
本实施例中,单个服务器内本地处理器时钟(又称CPU时钟)和本地网卡时钟(又称NIC时钟)的同步,通过批量获取探针对获得同一时刻CPU时钟和NIC时钟的时间。首先获得一次CPU时钟的时间戳C1,再获得一次NIC时钟的时间戳N1,最后获得一次CPU时钟的时间戳C2。为了确定获取N1的时间点CPU时钟的时间,使用公式C01=a*C1+(1-a)*C2,a表示预设的拟合系数,a预先通过离线拟合的方式确定。在得到单个时间片内所有的探针对<C0n,Nn>后,其中,n为大于或等于1的整数,本地时钟模块会对执行时间过长的探针对进行过滤,并使用线性回归的方法拟合出该时间片内CPU时钟和NIC时钟的第二线性关系。
本实施例中,通过至少一个时间片内CPU时钟和NIC时钟的第二线性关系,得到CPU时钟和NIC时钟之间的第二映射关系。
具体的,根据至少一个时间片内的第二时间戳探针对,拟合本地网卡时钟与本地处理器时钟之间的第二线性关系;获取第i个时间片内第二线性关系的第i个中点函数值,以及获取第i+1个时间片内第二线性关系的第i+1个中点函数值,其中,i为大于等于0的整数;将连接第i个中点函数值和第i+1个中点函数值形成的直线,与第i+3个时间片右端点的交点,作为第i个预测点;将至少一个预测点依次连接,获得第二映射关系。
下面,介绍备份参与者相应功能的实现过程。
一个实施例中,分布式事务系统使用了主从副本机制,容忍分布式事务处理过程中节点服务器宕机导致事务协调者或事务执行者崩溃的情况。当事务协调者决定提交事务时,会先将事务的更新发送给每一个服务器的备份参与者进行备份。事务协调者确认所有备份参与者都收到事务的更新后,就会通知事务执行者提交事务的更新,并通知上层应用事务已经提交。
一个实施例中,当事务协调者崩溃时,备份参与者可以恢复出已经向上层提交的事务。服务器探测到事务协调者的崩溃后,中止正在由事务协调者运行的事务。分布式事务系统中的各个服务器先检查系统中所有事务。如果一个事务已经被备份到所有备份参与者,说明事务可以向上层提交,分布式事务系统会重新向上层提交事务,并通知所有事务执行者提交事务的所有更新;如果一个事务未被备份到所有备份参与者,说明事务仍未向上层提交,无法确定事务的完成进度,故分布式事务系统中止该事务,并通知所有事务执行者中止事务的所有更新。
一个实施例中,当事务执行者崩溃时,服务器在探测到崩溃后,分布式事务系统从事务执行者对应的备份参与者中选出一个备份参与者作为新的事务执行者,接替崩溃的事务执行者继续提供数据访存服务。由于事务的更新(即数据项的更新)在提交给上层应用执行之前会先备份给备份参与者,因此新的事务执行者保存有需要的数据项。
一个具体的实施例中,如图6所示,分布式事务系统包括至少一个服务器。每个服务器分别包括对应的事务协调者、事务执行者、本地时钟模块(简称时钟)、备份参与者和内存。各个服务器之间通过高速网络连接。本地时钟模块包括本地处理器时钟和本地网卡时钟。该分布式事务系统中选定一个服务器的本地网卡时钟作为预设根网卡时钟,并预先建立网卡时钟的树状结构。
本实施例中,目标事务传输给图6中最左侧的服务器中的事务协调者,该事务协调者将目标事务中的各个请求分发至各个服务器的事务执行者,实现该目标事务的处理。
一个例子中,如图7所示,以读修改写操作为例,介绍本发明提供的分布式事务处理方法。读修改写操作“X+=5”包含两个操作,读取X值(read X)以及写新的X值(write X=Xnew)。其中,X表示目标数据项,“X+=5”表示X的增量为5,Xnew表示需要写入目标数据项的最新数据。
在发送read X时,事务协调者会在第一请求(读请求)中,将代表之后write X=Xnew的第二写请求存在的布尔变量置为1。事务执行者接收到read X请求后,会先判断后续的write X=Xnew请求能否成功执行,如果不能,则无需执行read X请求即可直接回复事务协调者该请求失败,即返回请求失败信息,目标事务中止。如果write X=Xnew的第三请求(写请求)可以执行,事务执行者会为在X数据项的历史版本中,先为Xnew占好位置,即生成预占位信息,实现“提前占位”,避免其他请求在X的两个读写请求之间介入造成目标事务中止。之后,事务执行者会执行第一请求,并将读到的结果返回给事务协调者。
事务协调者收到了第一请求的返回结果,计算得出Xnew的值,计算表示既可以通过计算得出Xnew的值,又代表Xnew的插入可以成功,write X=Xnew请求不会失败。因此,当事务协调者决定发送第三请求时,就将已经计算好的Xnew的值连同本目标事务提交的信息一起发给对应的事务执行者,事务执行者将Xnew所对应的版本状态由“待提交”状态转化为“已提交”状态,表示该数据版本可以被其它事务读到,该事务在X数据上的修改已经完全结束。
当目标事务的所有请求提交给事务协调者完成信息后,事务协调者将所有的提交信息备份至各个服务器的备份参与者,然后将目标事务的完成信息提交给上层应用。
本发明提供的分布式事务处理方法,事务执行者接收事务协调者传输的第一请求,其中,第一请求包含第一时间戳,第一时间戳通过事务协调者对应的本地时钟模块获得;通过预设的推迟机制,推迟第一请求的执行时间;当第一请求未执行时,接收到第二请求,其中,第二请求包含第二时间戳,第二时间戳小于第一时间戳;在第二时间戳指示的执行时间,执行第二请求;推迟机制结束时,执行第一请求。现有技术中,当第一请求先达到事务执行者时,事务执行者会执行第一请求;但是由于第二时间戳小于第一时间戳,第一请求执行后,会导致第二请求无法执行,则第二请求对应的事务将会中止。而本发明中,事务执行者接收到第一请求后,会将第一请求推迟,以使包含更小的第二时间戳的第二请求优先执行,然后再执行第一请求。这样,避免了第二请求无法执行导致对应事务中止的情况,降低分布式事务处理过程中整体的事务中止率
下面对本发明提供的分布式事务处理的事务执行者装置进行描述,下文描述的分布式事务处理的事务执行者装置与上文描述的以事务执行者为执行主体实施的分布式事务处理方法可相互对应参照。如图8所示,分布式事务处理的事务执行者装置包括:
第一接收模块801,用于接收事务协调者传输的第一请求,其中,第一请求包含第一时间戳,第一时间戳通过事务协调者对应的本地时钟模块获得;
推迟模块802,用于通过预设的推迟机制,推迟第一请求的执行时间;
第二接收模块803,用于当第一请求未执行时,接收到第二请求,其中,第二请求包含第二时间戳,第二时间戳小于第一时间戳;
第一执行模块804,用于在第二时间戳指示的执行时间,执行第二请求;
第二执行模块805,用于推迟机制结束时,执行第一请求。
下面对本发明提供的分布式事务处理的事务协调者装置进行描述,下文描述的分布式事务处理的事务协调者装置与上文描述的以事务协调者为执行主体实施的分布式事务处理方法可相互对应参照。如图9所示,分布式事务处理的事务协调者装置包括:
第三接收模块901,用于接收到上层应用传输的目标事务时,生成时钟请求执行,并传输给本地时钟模块;
获取模块902,用于获取本地时钟模块返回的第一时间戳;
生成模块903,用于基于第一时间戳,生成第一请求,并将第一请求传输给事务执行者。
下面对本发明提供的分布式事务处理的本地时钟模块进行描述,下文描述的分布式事务处理的本地时钟模块与上文描述的以本地时钟模块为执行主体实施的分布式事务处理方法可相互对应参照。如图10所示,分布式事务处理的本地时钟模块包括:
接收单元1001,用于接收到事务协调者传输的时钟请求指令时,获取本地处理器时钟生成的第一时间戳,其中,本地处理器时钟与本地网卡时钟同步,本地网卡时钟与预设根网卡时钟同步;
返回单元1002,用于将第一时间戳返回给事务协调者。
图11示例了一种电子设备的实体结构示意图,如图11所示,该电子设备可以包括:处理器(processor)1101、通信接口(Communications Interface)1102、存储器(memory)1103和通信总线1104,其中,处理器1101,通信接口1102,存储器1103通过通信总线1104完成相互间的通信。处理器1101可以调用存储器1103中的逻辑指令,以执行事务执行者为执行主体实施的分布式事务处理方法,该方法包括:接收事务协调者传输的第一请求,其中,第一请求包含第一时间戳,第一时间戳通过事务协调者对应的本地时钟模块获得;通过预设的推迟机制,推迟第一请求的执行时间;当第一请求未执行时,接收到第二请求,其中,第二请求包含第二时间戳,第二时间戳小于第一时间戳;在第二时间戳指示的执行时间,执行第二请求;推迟机制结束时,执行第一请求。
或者,处理器1101可以调用存储器1103中的逻辑指令,以执行事务协调者为执行主体实施的分布式事务处理方法,该方法包括:接收到上层应用传输的目标事务时,生成时钟请求执行,并传输给本地时钟模块;获取本地时钟模块返回的第一时间戳;基于第一时间戳,生成第一请求,并将第一请求传输给事务执行者。
或者,处理器1101可以调用存储器1103中的逻辑指令,以执行本地时钟模块为执行主体实施的分布式事务处理方法,该方法包括:接收到事务协调者传输的时钟请求指令时,获取本地处理器时钟生成的第一时间戳,其中,本地处理器时钟与本地网卡时钟同步,本地网卡时钟与预设根网卡时钟同步;将第一时间戳返回给事务协调者。
此外,上述的存储器1103中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各实施例所提供的事务执行者为执行主体实施的分布式事务处理方法,该方法包括:接收事务协调者传输的第一请求,其中,第一请求包含第一时间戳,第一时间戳通过事务协调者对应的本地时钟模块获得;通过预设的推迟机制,推迟第一请求的执行时间;当第一请求未执行时,接收到第二请求,其中,第二请求包含第二时间戳,第二时间戳小于第一时间戳;在第二时间戳指示的执行时间,执行第二请求;推迟机制结束时,执行第一请求。
或者,计算机能够执行上述各实施例所提供的事务协调者为执行主体实施的分布式事务处理方法,该方法包括:接收到上层应用传输的目标事务时,生成时钟请求执行,并传输给本地时钟模块;获取本地时钟模块返回的第一时间戳;基于第一时间戳,生成第一请求,并将第一请求传输给事务执行者。
或者,计算机能够执行上述各实施例所提供的本地时钟模块为执行主体实施的分布式事务处理方法,该方法包括:接收到事务协调者传输的时钟请求指令时,获取本地处理器时钟生成的第一时间戳,其中,本地处理器时钟与本地网卡时钟同步,本地网卡时钟与预设根网卡时钟同步;将第一时间戳返回给事务协调者。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的事务执行者为执行主体实施的分布式事务处理方法,该方法包括:接收事务协调者传输的第一请求,其中,第一请求包含第一时间戳,第一时间戳通过事务协调者对应的本地时钟模块获得;通过预设的推迟机制,推迟第一请求的执行时间;当第一请求未执行时,接收到第二请求,其中,第二请求包含第二时间戳,第二时间戳小于第一时间戳;在第二时间戳指示的执行时间,执行第二请求;推迟机制结束时,执行第一请求。
或者,该计算机程序被处理器执行时实现以执行上述各实施例提供的事务协调者为执行主体实施的分布式事务处理方法,该方法包括:接收到上层应用传输的目标事务时,生成时钟请求执行,并传输给本地时钟模块;获取本地时钟模块返回的第一时间戳;基于第一时间戳,生成第一请求,并将第一请求传输给事务执行者。
或者,该计算机程序被处理器执行时实现以执行上述各实施例提供的本地时钟模块为执行主体实施的分布式事务处理方法,该方法包括:接收到事务协调者传输的时钟请求指令时,获取本地处理器时钟生成的第一时间戳,其中,本地处理器时钟与本地网卡时钟同步,本地网卡时钟与预设根网卡时钟同步;将第一时间戳返回给事务协调者。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (23)
1.一种分布式事务处理方法,其特征在于,应用于事务执行者,包括:
接收事务协调者传输的第一请求,其中,所述第一请求包含第一时间戳,所述第一时间戳通过所述事务协调者对应的本地时钟模块获得;
通过预设的推迟机制,推迟所述第一请求的执行时间;
当所述第一请求未执行时,接收到第二请求,其中,所述第二请求包含第二时间戳,所述第二时间戳小于所述第一时间戳;
在所述第二时间戳指示的执行时间,执行所述第二请求;
所述推迟机制结束时,执行所述第一请求。
2.根据权利要求1所述的分布式事务处理方法,其特征在于,所述通过预设的推迟机制,推迟所述第一请求的执行时间,包括:
确定所述第一请求为目标数据项的读请求;
推迟所述第一请求的执行时间。
3.根据权利要求2所述的分布式事务处理方法,其特征在于,所述推迟所述第一请求的执行时间,包括:
获取所述目标数据项在预设时长内的请求访问量;
确定所述请求访问量大于预设访问阈值时,推迟所述第一请求的执行时间。
4.根据权利要求3所述的分布式事务处理方法,其特征在于,所述推迟所述第一请求的执行时间,包括:
将所述第一请求的执行时间推迟第一预设时长;
当所述第一预设时长推迟完毕时,获取所述目标数据项的请求失败率;
判断所述请求失败率是否小于预设的失败阈值,若是,执行所述第一请求;若否,将所述第一请求的执行时间再次推迟第二预设时长,并以所述第二预设时长为周期,获取所述目标数据项的所述请求失败率,直至所述请求失败率小于所述失败阈值。
5.根据权利要求1所述的分布式事务处理方法,其特征在于,所述执行所述第一请求之前,还包括:
确定所述第一请求包含依赖信息,其中,所述依赖信息用于指示第三请求的执行过程依赖所述第一请求的执行结果,所述第三请求包括所述第一时间戳;
所述执行所述第一请求之后,还包括:
当未接收到所述第三请求时,接收到第四请求,其中,所述第四请求包含第四时间戳,其中,所述第四时间戳大于所述第一时间戳;
阻塞所述第四请求的执行,直至接收并执行所述第三请求后,执行所述第四请求,以使所述第三请求执行于所述第四请求之前。
6.根据权利要求5所述的分布式事务处理方法,其特征在于,所述确定所述第一请求包含依赖信息时,还包括:
判断是否存在所述第三请求执行的环境基础,若否,生成所述第一请求的请求失败信息,并将所述请求失败信息传输给所述事务协调者;若是,生成所述第三请求的预占位信息,并在所述第一请求执行完毕时,生成第一提交信息,将所述第一提交信息传输给所述事务协调者;
所述阻塞所述第四请求的执行,包括:
根据所述预占位信息,阻塞所述第四请求的执行。
7.根据权利要求5所述的分布式事务处理方法,其特征在于,所述第一请求为目标数据项的读请求,所述第三请求为所述目标数据项的写请求;
所述阻塞所述第四请求的执行,包括:
确定所述第四请求为所述目标数据项的读请求;
阻塞所述第四请求的执行。
8.根据权利要求1所述的分布式事务处理方法,其特征在于,所述执行所述第一请求,包括:
基于本地处理器时钟,确定所述本地处理器计时达到所述第一时间戳指示的所述执行时间时,执行所述第一请求;
其中,所述本地处理器时钟与本地网卡时钟同步,所述本地网卡时钟与预设根网卡时钟同步。
9.一种分布式事务处理方法,其特征在于,应用于事务协调者,包括:
接收到上层应用传输的目标事务时,生成时钟请求执行,并传输给本地时钟模块;
获取所述本地时钟模块返回的第一时间戳;
基于所述第一时间戳,生成所述第一请求,并将所述第一请求传输给事务执行者。
10.根据权利要求9所述的分布式事务处理方法,其特征在于,所述基于所述第一时间戳,生成所述第一请求之前,还包括:
确定依赖信息,其中,所述依赖信息用于指示第三请求的执行过程依赖第一请求的执行结果;
所述基于所述第一时间戳,生成所述第一请求,包括:
基于所述第一时间戳和所述依赖信息,生成所述第一请求。
11.根据权利要求10所述的分布式事务处理方法,其特征在于,所述将所述第一请求传输给事务执行者之后,还包括:
获取所述事务执行者传输的请求失败信息;生成所述目标事务的事务失败信息,并将所述事务失败信息传输给所述上层应用,其中,所述请求失败信息表示所述事务执行者不存在所述第三请求执行的环境基础;
或者,
获取所述事务执行者传输的第一提交信息,生成所述第三请求,并将所述第三请求传输给所述事务执行者。
12.根据权利要求10所述的分布式事务处理方法,其特征在于,所述第一请求为目标数据项的读请求,所述第三请求为所述目标数据项的写请求;
所述获取所述事务执行者传输的第一提交信息,生成所述第三请求,并将所述第三请求传输给所述事务执行者,包括:
获取所述事务执行者传输的第一提交信息;
根据所述第一提交信息,计算需要写入所述目标数据项的最新数据;
基于所述最新数据,生成所述第三请求,并将所述第三请求传输给所述事务执行者。
13.一种分布式事务处理方法,其特征在于,应用于本地时钟模块,包括:
接收到事务协调者传输的时钟请求指令时,获取本地处理器时钟生成的第一时间戳,其中,所述本地处理器时钟与本地网卡时钟同步,所述本地网卡时钟与预设根网卡时钟同步;
将所述第一时间戳返回给所述事务协调者。
14.根据权利要求13所述的分布式事务处理方法,其特征在于,所述接收到事务协调者传输的时钟请求指令之前,还包括:
获取所述预设根网卡时钟与所述本地网卡时钟之间的第一映射关系;
根据所述第一映射关系,调整所述本地网卡时钟,以使所述本地网卡时钟和所述预设根网卡时钟同步;
获取所述本地网卡时钟与本地处理器时钟之间的第二映射关系;
根据所述第二映射关系,调整所述本地处理器时钟,以使所述本地处理器时钟和所述本地网卡时钟同步。
15.根据权利要求14所述的分布式事务处理方法,其特征在于,所述获取预设根网卡时钟与本地网卡时钟之间的第一映射关系,包括:
在至少一个连续的时间片内,分别进行至少一次以下处理:以面向数据报的不可靠服务模式,由本地网卡向预设根网卡发送第一数据包,获取所述第一数据包离开所述本地网卡时,所述本地网卡时钟对应的第一本地网卡时间戳;以面向连接的可靠服务模式,由所述本地网卡向所述预设根网卡发送第二数据包,获取所述第二数据包离开所述本地网卡时,所述本地网卡时钟对应的第二本地网卡时间戳;获取所述预设根网卡传输的第一根网卡时间戳和第二根网卡时间戳,其中,所述第一根网卡时间戳为所述第一数据包达到所述预设根网卡时,所述预设根网卡时钟对应的时间戳,所述第二根网卡时间戳为所述第二数据包达到所述预设根网卡时,所述预设根网卡时钟对应的时间戳;根据第一本地网卡时间戳、所述第一根网卡时间戳、所述第二本地网卡时间戳和所述第二根网卡时间戳,获取所述预设根网卡时钟与所述本地网卡时钟的第一时间戳探针对;
根据至少一个所述时间片内的至少一个所述第一时间戳探针对,获取所述第一映射关系。
16.根据权利要求15所述的分布式事务处理方法,其特征在于,所述根据至少一个所述时间片内的至少一个所述第一时间戳探针对,获取所述第一映射关系,包括:
根据至少一个时间片内的所述第一时间戳探针对,拟合所述预设根网卡时钟与所述本地网卡时钟之间线性关系;
获取第i个时间片内所述线性关系的第i个中点函数值,以及获取第i+1个时间片内所述线性关系的第i+1个中点函数值,其中,i为大于等于0的整数;
将连接所述第i个中点函数值和所述第i+1个中点函数值形成的直线,与第i+3个时间片右端点的交点,作为第i个预测点;
将至少两个所述预测点依次连接,获得所述第一映射关系。
17.根据权利要求14所述的分布式事务处理方法,其特征在于,所述获取所述本地网卡时钟与本地处理器时钟之间的第二映射关系,包括:
在至少一个连续的时间片内,分别进行至少一次以下处理:获取所述本地处理器时钟的第一处理器时间戳;获取所述本地网卡时钟生成的第一网卡时间戳;获取所述本地处理器时间生成的第二处理器时间戳;基于第一处理器时间戳、第二处理器时间戳和预设的拟合系数,确定与所述第一网卡时间戳对应的中心处理器时间戳;根据所述中心处理器时间戳和所述第一网卡时间戳,获取所述本地网卡时钟与所述本地处理器时钟的第二时间戳探针对;
根据至少一个所述时间片内的至少一个所述第二时间戳探针对,获取所述第二映射关系。
18.一种分布式事务处理的事务执行者装置,其特征在于,包括:
第一接收模块,用于接收事务协调者传输的第一请求,其中,所述第一请求包含第一时间戳,所述第一时间戳通过所述事务协调者对应的本地时钟模块获得;
推迟模块,用于通过预设的推迟机制,推迟所述第一请求的执行时间;
第二接收模块,用于当所述第一请求未执行时,接收到第二请求,其中,所述第二请求包含第二时间戳,所述第二时间戳小于所述第一时间戳;
第一执行模块,用于在所述第二时间戳指示的执行时间,执行所述第二请求;
第二执行模块,用于所述推迟机制结束时,执行所述第一请求。
19.一种分布式事务处理的事务协调者装置,其特征在于,包括:
第三接收模块,用于接收到上层应用传输的目标事务时,生成时钟请求执行,并传输给本地时钟模块;
获取模块,用于获取所述本地时钟模块返回的第一时间戳;
生成模块,用于基于所述第一时间戳,生成所述第一请求,并将所述第一请求传输给事务执行者。
20.一种分布式事务处理的本地时钟模块,其特征在于,包括:
接收单元,用于接收到事务协调者传输的时钟请求指令时,获取本地处理器时钟生成的第一时间戳,其中,所述本地处理器时钟与本地网卡时钟同步,所述本地网卡时钟与预设根网卡时钟同步;
返回单元,用于将所述第一时间戳返回给所述事务协调者。
21.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至8任一项所述分布式事务处理方法的步骤;
或者,所述处理器执行所述程序时实现如权利要求9至12任一项所述分布式事务处理方法的步骤;
或者,所述处理器执行所述程序时实现如权利要求13至17任一项所述分布式事务处理方法的步骤。
22.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述分布式事务处理方法的步骤;
或者,所述处理器执行所述程序时实现如权利要求9至12任一项所述分布式事务处理方法的步骤;
或者,所述处理器执行所述程序时实现如权利要求13至17任一项所述分布式事务处理方法的步骤。
23.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述分布式事务处理方法的步骤;
或者,所述处理器执行所述程序时实现如权利要求9至12任一项所述分布式事务处理方法的步骤;
或者,所述处理器执行所述程序时实现如权利要求13至17任一项所述分布式事务处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111617497.8A CN114398157A (zh) | 2021-12-27 | 2021-12-27 | 分布式事务处理方法、装置、设备、存储介质及程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111617497.8A CN114398157A (zh) | 2021-12-27 | 2021-12-27 | 分布式事务处理方法、装置、设备、存储介质及程序产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114398157A true CN114398157A (zh) | 2022-04-26 |
Family
ID=81228638
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111617497.8A Pending CN114398157A (zh) | 2021-12-27 | 2021-12-27 | 分布式事务处理方法、装置、设备、存储介质及程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114398157A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115103011A (zh) * | 2022-06-24 | 2022-09-23 | 北京奥星贝斯科技有限公司 | 一种跨数据中心的业务处理方法、装置以及设备 |
-
2021
- 2021-12-27 CN CN202111617497.8A patent/CN114398157A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115103011A (zh) * | 2022-06-24 | 2022-09-23 | 北京奥星贝斯科技有限公司 | 一种跨数据中心的业务处理方法、装置以及设备 |
CN115103011B (zh) * | 2022-06-24 | 2024-02-09 | 北京奥星贝斯科技有限公司 | 一种跨数据中心的业务处理方法、装置以及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8868492B2 (en) | Method for maximizing throughput and minimizing transactions response times on the primary system in the presence of a zero data loss standby replica | |
US6823347B2 (en) | Propagating commit times | |
US6125368A (en) | Fault-tolerant timestamp generation for multi-node parallel databases | |
US20190340167A1 (en) | Multi-master architectures for distributed databases | |
CN110622478B (zh) | 数据同步处理的方法和装置 | |
US6243702B1 (en) | Method and apparatus for propagating commit times between a plurality of database servers | |
JP4612715B2 (ja) | 情報処理システム、データ更新方法およびデータ更新プログラム | |
US20070078911A1 (en) | Replicating data across the nodes in a cluster environment | |
CN112597251B (zh) | 数据库集群日志同步方法、装置、服务器及存储介质 | |
JP2002525748A (ja) | 複製サーバのためのプロトコル | |
WO2022111188A1 (zh) | 事务处理方法、系统、装置、设备、存储介质及程序产品 | |
US20200045134A1 (en) | Ordinary write in distributed system maintaining data storage integrity | |
US20210072903A1 (en) | Future write in distributed system maintaining data storage integrity | |
CN113094430B (zh) | 一种数据处理方法、装置、设备以及存储介质 | |
EP4276651A1 (en) | Log execution method and apparatus, and computer device and storage medium | |
CN114398157A (zh) | 分布式事务处理方法、装置、设备、存储介质及程序产品 | |
CN113934745A (zh) | 数据同步处理方法、电子设备以及存储介质 | |
US8434083B2 (en) | Throttling an asynchronous remote copying system | |
CN115617908A (zh) | 一种MySQL数据同步方法、装置、数据库终端、介质及系统 | |
US20170235600A1 (en) | System and method for running application processes | |
CN114844809A (zh) | 基于网络心跳和内核磁盘心跳的多因子仲裁方法、装置 | |
CN106776153B (zh) | 作业控制方法及服务器 | |
WO2023216636A1 (zh) | 事务处理方法、装置及电子设备 | |
CN113253924A (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN111930563A (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 |