交易并行处理的方法、装置、电子设备和存储介质与流程

未命名 07-22 阅读:70 评论:0


1.本技术涉及区块链技术领域,尤其是涉及一种交易并行处理的方法、装置、电子设备和存储介质。


背景技术:

2.在现有的以太坊的交易执行引擎中,为了区块执行前后的一致性,通常采用顺序执行的方式处理。为了提升处理效率,相关技术中也有采用并行执行的方式,例如基于有向无环图(directed acyclic graph,dag)的执行方案。然而,这种方式在执行前构建交易的dag依赖关系图,需要先分析或者已执行交易;并且dag并行结果和顺序执行结果可能不一致,因此无法保证并行执行的确定性和可重复性。


技术实现要素:

3.本技术的目的在于提供一种交易并行处理的方法、装置、电子设备和存储介质,在进行交易并行处理时,提升了并行执行的处理效率和执行结果的准确性,并且避免了交易冲突,保证交易被安全提交。
4.第一方面,本发明提供一种交易并行处理的方法,所述方法应用于区块链系统,所述区块链系统包括调度节点和并行执行的多个工作线程;所述方法包括:
5.通过所述调度节点生成交易任务,将所述交易任务发送至任务队列;
6.通过所述工作线程获取所述任务队列的交易任务,对所述交易任务进行并行处理,并将每个交易任务的每个执行版本的执行结果均缓存至多版本数据结构;
7.通过所述工作线程对当前交易任务进行交易冲突验证,当验证交易无冲突时将当前交易任务的执行结果发送至所述调度节点,以使所述调度节点提交所述执行结果。
8.第二方面,本发明提供一种交易并行处理的装置,所述方法应用于区块链系统,所述区块链系统包括调度节点和并行执行的多个工作线程;所述装置包括:
9.任务生成和发送模块,用于通过所述调度节点生成交易任务,将所述交易任务发送至任务队列;
10.并行处理及结果缓存模块,用于通过所述工作线程获取所述任务队列的交易任务,对所述交易任务进行并行处理,并将每个交易任务的每个执行版本的执行结果均缓存至多版本数据结构;
11.验证及交易提交模块,用于通过所述工作线程对当前交易任务进行交易冲突验证,当验证交易无冲突时将当前交易任务的执行结果发送至所述调度节点,以使所述调度节点提交所述执行结果。
12.第三方面,本发明提供一种电子设备,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机可执行指令,所述处理器执行所述计算机可执行指令以实现前述实施方式任一项所述的交易并行处理的方法。
13.第四方面,本发明提供一种计算机可读存储介质,所述计算机可读存储介质存储
有计算机可执行指令,所述计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现前述实施方式任一项所述的交易并行处理的方法。
14.本技术提供的交易并行处理的方法、装置、电子设备和存储介质带来的有益效果:
15.通过并行工作线程执行交易任务,并将执行结果缓存至多版本数据结构,暂时不对交易进行提交,对交易任务进行冲突验证,当验证无冲突后提交执行结果,从而保证在并行处理交易任务时,交易之间没有冲突,最终被安全提交。
16.该方式无需dag方案在执行前的预处理阶段和保证并行执行结果的确定性,在进行交易并行处理时,提升了并行执行的处理效率和执行结果的准确性,并且避免了交易冲突,保证交易被安全提交。
附图说明
17.为了更清楚地说明本技术具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
18.图1为本技术实施例提供的一种调度节点和多个工作线程工作的示意图;
19.图2为本技术实施例提供的一种交易流转的示意图;
20.图3为本技术实施例提供的一种交易并行处理的方法的流程图;
21.图4为本技术实施例提供的一种交易并行处理的装置的结构图;
22.图5为本技术实施例提供的一种电子设备的结构图。
具体实施方式
23.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本技术实施例的组件可以以各种不同的配置来布置和设计。
24.因此,以下对在附图中提供的本技术的实施例的详细描述并非旨在限制要求保护的本技术的范围,而是仅仅表示本技术的选定实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
25.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
26.术语解释:
27.区块链:一种以分布式容错技术为原理实现的一种分布式账本技术,通过链式结构保存日志数据(即区块数据),使用共识算法确定被最终提交的区块数据,这些区块数据最终以自动化脚本组成的智能合约来完成对账本数据的修改,是一种新的分布式基础设施与计算范式。
28.交易执行引擎:区块链本质上是分布式状态机,状态的迁移通过交易的输入、执行完成。通常,交易在区块链上的执行在虚拟机内部来完成,最终将结果更新到区块链状态
上,实现整体的状态的迁移。
29.现有技术中,如以太坊的交易执行引擎中,为了区块执行前后的一致性,采用顺序执行的方式,并不能充分利用现代计算机多核多线程的并发能力。而少数采用了并行执行引擎的平台中,如fisco中,引入了dag的执行方案,根据交易执行中涉及到的互斥资源,构建出一张交易依赖图,该依赖图通过dag的方式组织交易。根据dag图节点的出度、入度关系判断节点表示的交易是否存在依赖,若无依赖则直接分配给可用的并行线程执行;若有依赖则需要等待其入度边关联的出度节点交易执行完成才可执行。
30.然而,在执行前构建交易的dag依赖关系图,需要先分析或者与执行交易;2、dag并行结果与顺序执行结果可能不一致。不能保证并行执行的确定性、可重复性。
31.基于此,本技术实施例提供了一种交易并行处理的方法、装置、电子设备和存储介质,无需dag方案在执行前的预处理阶段和保证并行执行结果的确定性,在进行交易并行处理时,提升了并行执行的处理效率和执行结果的准确性,并且避免了交易冲突,保证交易被安全提交。
32.本技术实施例提供了一种交易并行处理的方法,该方法应用于区块链系统,区块链系统包括调度节点和并行执行的多个工作线程,参见图1所示,区块链系统预设一个调度节点和多个工作线程,调度节点负责生成任务和提交交易执行结果,工作线程负责获取调度节点生成的任务并执行,并将执行后的执行结果返回调度节点,从而通过调度节点和多个工作线程协作完成交易的并行执行。
33.本技术实施例并行执行时使用软件事务内存记录每个交易对状态的更新,执行完成后再对每个交易的读集合验证,如果验证失败则说明交易涉及到的状态读写有冲突,并利用冲突信息构建依赖关系,重新执行失败的交易,直到区块内交易执行完成。整个执行方案从交易执行到被提交分为两个执行阶段:乐观执行阶段和验证-重新执行阶段:
34.(1)乐观执行阶段:调度节点将所有交易分发给工作线程进行执行,执行中通过读写集记录对于状态的更新和读取,如果执行成功则将写集记录到多版本数据结构中(软件事务内存的实现);如果执行失败,则根据失败的读写信息构建依赖关系,执行失败的交易则等待重新执行。
35.由于采用乐观执行的策略,并行线程直接拿到执行任务执行,通过软件事务内存缓存对状态的更新值,并在执行过程中动态构建交易的依赖关系,减少了预处理交易构建dag图的时间,提高了并行效率。
36.(2)验证-重新执行阶段:当所有交易乐观执行完成时,调度节点根据执行结果分配交易的验证任务给工作线程,每个线程验证当前交易的读集合是否与预设顺序中在当前交易之前的所有交易的写集合冲突。如果某一笔交易产生冲突,首先更新多版本数据结构中该笔交易的写入集更新为有效状态信息,然后重新执行该交易,并且对预设顺序大于当前交易的交易进行重新验证。
37.图2示出了一种交易流转的示意图,交易执行遵循的原则:1)乐观执行,首次执行完所有交易,执行完所有不产生依赖的交易;2)只重复执行验证失败或者执行失败的交易。交易验证遵循的原则:如果验证失败,只有预设串行顺序中更高的交易需要重新验证。
38.为便于理解,首先对本实施例用到的各初始化参数进行说明:
39.1.[tx1,tx2,tx3,...txn],n笔交易。
[0040]
2.mvdata:多版本数据结构,为一个哈希map,mvdata=《k,v》。其中,k=(location,tx.s),location为虚拟机中变量的读取位置,tx.s为交易的预设序号;v=(version,value),version为当前的执行版本,每次执行过程成都会生成一个新的版本号,value为第version次执行交易tx在location出写入的值;若v=aborted,说明执行交易tx时写入location位置的值被终止;
[0041]
3.读集合rs为交易执行过程中读取变量位置、版本的数据对数组,记为rs={(location,version),...},location、version如上。
[0042]
4.写集合ws为交易执行过程中写入变量位置、值的数据对数组,记为ws={(location,value)},location、value如上。
[0043]
5.最新版本读集合lastread为当前执行区块内交易最近一次成功执行的读集合数组,记为lastread={{ws}},其中|lastread|=n,n为区块内交易数量。
[0044]
6.最新版本写集合lastwrite为当前执行区块内交易最近一次成功执行的写位置集合数组,记为lastwrite={{location|(location,*)∈ws}},其中|lastwrite|=n。
[0045]
7.交易依赖集合deps为当前区块内交易执行过程中,每笔交易读取位置依赖其他交易写入位置的集合,记为deps={{tx0,tx1,...}},其中|deps|=n,deps[0]={tx0,tx1,...}为交易tx.s=0在执行过程中读取位置依赖交易tx0,tx1...等交易的写入位置。
[0046]
8.任务队列t:包含验证任务和执行任务。
[0047]
9.执行结果队列r:包含执行结果。
[0048]
10.验证成功交易集合v:包含验证成功的交易。
[0049]
11.aborted为多版本数据结构mvdata中,mvddata[k]有效的状态信息,在验证冲突时更新,即mvdata[k]=aborted。
[0050]
参见图3所示,该交易并行处理的方法主要包括以下步骤s310至步骤s330:
[0051]
步骤s310,通过调度节点生成交易任务,将交易任务发送至任务队列。
[0052]
步骤s320,通过工作线程获取任务队列的交易任务,对交易任务进行并行处理,并将每个交易任务的每个执行版本的执行结果均缓存至多版本数据结构。
[0053]
步骤s330,通过工作线程对当前交易任务进行交易冲突验证,当验证交易无冲突时将当前交易任务的执行结果发送至调度节点,以使调度节点提交执行结果。
[0054]
在具体实施时,首先进行初始化处理:
[0055]
初始化:
[0056]
block=[tx1,tx2,tx3,...txn],n笔交易,交易索引号顺序为预设顺序,记为s;
[0057]
mvdata,多版本数据结构;
[0058]
lastwrite,lastread,最新版本的读/写集合;
[0059]
deps,记录每笔交易的依赖交易集合;
[0060]
任务队列t,包含验证任务和执行任务;
[0061]
执行结果队列r,包含执行结果;
[0062]
验证成功交易集合v,包含验证成功的交易;
[0063]
minv=int_max,最小验证成功交易序号s,初始化为最大值int_max;
[0064]
minc=0,最小可提交交易序号s(此处隐式的使用minc序号表示提交交易集合,所有交易<minc的交易都在集合中);
[0065]
添加block的交易(生成版本号version=0)的执行任务到队列t。
[0066]
自此,初始化处理执行完成。
[0067]
在进行交易的并行处理时,针对调度节点,若执行结果队列r不为空且|v|≠n,也即在开始交易后,获取执行结果队列r中交易任务结果tx=txi。
[0068]
针对执行结果:若执行结果成功,根据当前版本version和写集合ws更新多版本数据结构mvdata,同时用读写集合ws,rs更新lastwrite,lastread最新版本的读/写集合中;并为交易txi生成验证任务添加到任务队列t;若执行结果失败成功,则交易txi执行任务的版本号version+1,并重新添加到任务队列t;
[0069]
针对验证结果:若失败:更新minv=min(txi.s,minv),且将集合v中小于txi.s的交易生成验证任务添加到任务队列t;若成功且minc=i+1,提交交易,更新依赖交易集合deps中关于txi的被依赖项(deps[txj.s]={...,txi,...}/tx_i;否则,则添加到验证成功交易集合v。
[0070]
在一可选的实施方式中,上述步骤s320,通过工作线程获取任务队列的交易任务,对交易任务进行并行处理,可以包括以下步骤2-1至步骤1-3:
[0071]
步骤2-1,通过每个工作线程获取任务队列的交易任务,并行查询交易依赖集合中交易任务的依赖项是否为空;其中,交易依赖集合为区块链系统中当前区块内交易执行过程中,每笔交易读取位置依赖其他交易写入位置的集合;
[0072]
步骤2-2,如果为空,则确定交易任务执行成功,将成功状态和对应的第一读写集合至执行结果队列;
[0073]
步骤2-3,如果不为空,则确定交易任务执行失败,退出交易任务并返回失败状态和对应的第二读写集合至执行结果队列。
[0074]
在一种示例中,工作线程在执行交易任务时,首先获取任务队列t中的任务,执行任务中的交易tx=txi;查询交易txi的依赖项deps[txi.s]是否为空,若不为空执行失败,返回失败结果到执行结果队列r;执行过程中,若产生变量读取则通过location直接向mvdata读取,若发生变量写入,则记录写入变量与位置到ws中,读取变量与版本号也需要记录到rs中。如果读取到aborted,在deps[txi.s]中记录产生aborted的交易txj作为txi的依赖项,退出并返回执行失败结果与读写集合ws,rs到执行结果队列r;若执行成功,则返回成功结果和读写集合ws,rs到执行结果队列r。
[0075]
进一步,如果当前交易任务无法执行,则将产生有效状态信息的目标交易任务确定为当前交易任务的交易依赖项,并将目标交易任务缓存至交易依赖集合;其中,目标交易任务与当前交易任务在交易依赖集合中具有对应关系。
[0076]
交易执行过程中每个写集合被记录下来。同时,如果发生数据的读取,首先会向多版本数据结构中读取,如果未能读取到则向存储的读取;若读取到aborted说明该位置的下写入变量被终止了。因此,当前交易无法运行,利用aborted信息为当前交易添加依赖,由于读取被终止则无需再运行,此时直接返回失败结果,该交易需要等待依赖项完成再继续运行。
[0077]
在一种实施方式中,在通过工作线程对交易任务进行并行处理时,如果交易任务执行成功,则将每个交易任务的状态更新信息缓存至多版本数据结构;如果交易任务执行失败,则在交易任务的执行过程中基于失败的读写信息构建交易任务之间的依赖关系,执
行失败的交易任务等待重新执行。该方式可以仅对执行失败的交易任务重新执行。
[0078]
上述步骤s330,通过工作线程对当前交易任务进行交易冲突验证,当验证交易无冲突时将当前交易任务的执行结果发送至调度节点,在具体实施时,可以包括以下步骤3-1至步骤3-3:
[0079]
步骤3-1,每个工作线程读取多版本数据结构中当前交易任务的状态更新信息;
[0080]
步骤3-2,基于状态更新信息对当前交易任务进行交易冲突验证,以验证当前交易任务的依赖项是否成功执行;
[0081]
步骤3-3,若已执行,则将当前交易任务的执行结果发送至调度节点。
[0082]
针对上述步骤3-2,基于状态更新信息对当前交易任务进行交易冲突验证,进一步可以包括步骤3-2.1和步骤3-2.2:
[0083]
步骤3-2.1,基于状态更新信息验证当前交易任务的读集合是否与预设顺序中在当前交易任务之前发生的所有交易的写集合存在交易冲突;其中,读集合为交易执行过程中读取变量位置、变量版本的数据对数组,写集合为交易执行过程中写入变量位置、变量值的数据对数组。
[0084]
具体的,每个工作线程基于状态更新信息在多版本数据结构的读集合中读取当前交易任务对应的历史版本号;按照预设顺序将若历史版本号与当前版本号不相等,则交易冲突,确定当前交易任务的依赖项未成功执行;若历史版本号与当前版本号相等,则交易不冲突,确定当前交易任务的依赖项已成功执行。
[0085]
步骤3-2.2,如果交易冲突,则更新多版本数据结构中当前交易任务对应的状态更新信息,重新执行当前交易任务,并对预设顺序大于当前交易任务的其他交易任务进行重新验证。
[0086]
在一具体的实施方式中,工作线程在执行执行任务中的交易tx=txi验证时,首先获取lastread[txi.s]中交易txi的最新读集合rs;再次根据rs读取mvdata中对应location的值变量,若version与当前rs中的version不相等则冲突,说明交易txi执行完后mvdata被更新过,验证失败,根据lastwrite[txi.s]设置mvdata中交易(*,txi.s)为aborted,返回验证失败结果到执行结果队列r;若version与当前rs中的version全相等则不冲突。验证通过,返回验证通过结果到执行结果队列r。
[0087]
在并发执行过程中,采取乐观执行的策略,执行后再对交易进行验证。因此,交易的执行不会一次就成功,会进行多次,为了保证验证的正确性,使用多版本数据结构记录每个交易的每个执行版本的写集合,暂时不对交易进行提交。而该多版本数据结构也将会再后续的验证过程中与其他交易的读集合进行验证,保证没有冲突,最终被安全提交。
[0088]
交易验证是为了保证当前被验证的交易的读集合的依赖项被成功执行。如果当前交易的最后一次执行的读集合中读取的位置,在多版本数据结构中相同位置的数据出现aborted或者版本不一致。说明:1)被依赖的交易写集合被终止,写位置的数据不可用;2)被依赖交易的写集合版本发生了更新,当前依赖版本不可用。由此验证失败,此时当前验证交易的写集合也变得不可用,需要更新多本版数据结构中当前交易的当前版本的写集合为aborted。同时,由于采取了预设的串行顺序作为可重复性的保证,需要对所有预设顺序大于当前交易的所有交易进行重新验证。
[0089]
本技术实施例基于软件事务内存进行交易并行处理,在交易执行过程中不直接对
状态进行更新,利用多版本数据结构进行记录写集合。在验证通过后,需要由调度节点根据预设顺序逐个提交多版本数据结构中的写集合。最终完成交易的执行和提交。
[0090]
基于上述方法实施例,本技术实施例还提供一种交易并行处理的装置,方法应用于区块链系统,区块链系统包括调度节点和并行执行的多个工作线程;参见图4所示,该装置主要包括以下部分:
[0091]
任务生成和发送模块42,用于通过调度节点生成交易任务,将交易任务发送至任务队列;
[0092]
并行处理及结果缓存模块44,用于通过工作线程获取任务队列的交易任务,对交易任务进行并行处理,并将每个交易任务的每个执行版本的执行结果均缓存至多版本数据结构;
[0093]
验证及交易提交模块46,用于通过工作线程对当前交易任务进行交易冲突验证,当验证交易无冲突时将当前交易任务的执行结果发送至调度节点,以使调度节点提交执行结果。
[0094]
本技术实施例提供的交易并行处理的装置,通过并行工作线程执行交易任务,并将执行结果缓存至多版本数据结构,暂时不对交易进行提交,对交易任务进行冲突验证,当验证无冲突后提交执行结果,从而保证在并行处理交易任务时,交易之间没有冲突,最终被安全提交。从而无需dag方案在执行前的预处理阶段和保证并行执行结果的确定性,在进行交易并行处理时,提升了并行执行的处理效率和执行结果的准确性,并且避免了交易冲突,保证交易被安全提交。
[0095]
在一可行的实施方式中,上述并行处理及结果缓存模块44,还用于:通过工作线程对交易任务进行并行处理时,如果交易任务执行成功,则将每个交易任务的状态更新信息缓存至多版本数据结构;
[0096]
上述装置还包括,依赖关系构建模块,用于:如果交易任务执行失败,则在交易任务的执行过程中基于失败的读写信息构建交易任务之间的依赖关系,执行失败的交易任务等待重新执行。
[0097]
在一可行的实施方式中,上述验证及交易提交模块46,还用于:每个工作线程读取多版本数据结构中当前交易任务的状态更新信息;基于状态更新信息对当前交易任务进行交易冲突验证,以验证当前交易任务的依赖项是否成功执行;若已执行,则将当前交易任务的执行结果发送至调度节点。
[0098]
在一可行的实施方式中,上述验证及交易提交模块46,还用于:基于状态更新信息验证当前交易任务的读集合是否与预设顺序中在当前交易任务之前发生的所有交易的写集合存在交易冲突;其中,读集合为交易执行过程中读取变量位置、变量版本的数据对数组,写集合为交易执行过程中写入变量位置、变量值的数据对数组;如果交易冲突,则更新多版本数据结构中当前交易任务对应的状态更新信息,重新执行当前交易任务,并对预设顺序大于当前交易任务的其他交易任务进行重新验证。
[0099]
在一可行的实施方式中,上述验证及交易提交模块46,还用于:每个工作线程基于状态更新信息在多版本数据结构的读集合中读取当前交易任务对应的历史版本号;按照预设顺序将若历史版本号与当前版本号不相等,则交易冲突,确定当前交易任务的依赖项未成功执行;若历史版本号与当前版本号相等,则交易不冲突,确定当前交易任务的依赖项已
成功执行。
[0100]
在一可行的实施方式中,并行处理及结果缓存模块44,还用于:通过每个工作线程获取任务队列的交易任务,并行查询交易依赖集合中交易任务的依赖项是否为空;其中,交易依赖集合为区块链系统中当前区块内交易执行过程中,每笔交易读取位置依赖其他交易写入位置的集合;如果为空,则确定交易任务执行成功,将成功状态和对应的第一读写集合至执行结果队列;如果不为空,则确定交易任务执行失败,退出交易任务并返回失败状态和对应的第二读写集合至执行结果队列。
[0101]
在一可行的实施方式中,上述装置还包括:依赖项缓存模块,用于:如果当前交易任务无法执行,则将产生有效状态信息的目标交易任务确定为当前交易任务的交易依赖项,并将目标交易任务缓存至交易依赖集合;其中,目标交易任务与当前交易任务在交易依赖集合中具有对应关系。
[0102]
本技术实施例提供的交易并行处理的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,交易并行处理的装置的实施例部分未提及之处,可参考前述交易并行处理的方法实施例中相应内容。
[0103]
本技术实施例还提供了一种电子设备,如图5所示,为该电子设备的结构示意图,其中,该电子设备100包括处理器51和存储器50,该存储器50存储有能够被该处理器51执行的计算机可执行指令,该处理器51执行该计算机可执行指令以实现上述任一项交易并行处理的方法。
[0104]
在图5示出的实施方式中,该电子设备还包括总线52和通信接口53,其中,处理器51、通信接口53和存储器50通过总线52连接。
[0105]
其中,存储器50可能包含高速随机存取存储器(ram,random access memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口53(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线52可以是isa(industry standard architecture,工业标准体系结构)总线、pci(peripheral component interconnect,外设部件互连标准)总线或eisa(extended industry standard architecture,扩展工业标准结构)总线等。所述总线52可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
[0106]
处理器51可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器51中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器51可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processor,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本技术实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存
储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器51读取存储器中的信息,结合其硬件完成前述实施例的交易并行处理的方法的步骤。
[0107]
本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令在被处理器调用和执行时,该计算机可执行指令促使处理器实现上述交易并行处理的方法,具体实现可参见前述方法实施例,在此不再赘述。
[0108]
本技术实施例所提供的交易并行处理的方法、装置、电子设备和存储介质的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
[0109]
除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本技术的范围。
[0110]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0111]
在本技术的描述中,还需要说明的是,除非另有明确的规定和限定,术语“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本技术中的具体含义。
[0112]
最后应说明的是:以上各实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述各实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。

技术特征:
1.一种交易并行处理的方法,其特征在于,所述方法应用于区块链系统,所述区块链系统包括调度节点和并行执行的多个工作线程;所述方法包括:通过所述调度节点生成交易任务,将所述交易任务发送至任务队列;通过所述工作线程获取所述任务队列的交易任务,对所述交易任务进行并行处理,并将每个交易任务的每个执行版本的执行结果均缓存至多版本数据结构;通过所述工作线程对当前交易任务进行交易冲突验证,当验证交易无冲突时将当前交易任务的执行结果发送至所述调度节点,以使所述调度节点提交所述执行结果。2.根据权利要求1所述的交易并行处理的方法,其特征在于,所述方法还包括:通过所述工作线程对交易任务进行并行处理时,如果所述交易任务执行成功,则将每个交易任务的状态更新信息缓存至所述多版本数据结构;如果所述交易任务执行失败,则在所述交易任务的执行过程中基于失败的读写信息构建交易任务之间的依赖关系,执行失败的交易任务等待重新执行。3.根据权利要求2所述的交易并行处理的方法,其特征在于,通过所述工作线程对当前交易任务进行交易冲突验证,当验证交易无冲突时将当前交易任务的执行结果发送至所述调度节点,包括:每个所述工作线程读取所述多版本数据结构中当前交易任务的状态更新信息;基于所述状态更新信息对当前交易任务进行交易冲突验证,以验证当前交易任务的依赖项是否成功执行;若已执行,则将当前交易任务的执行结果发送至所述调度节点。4.根据权利要求3所述的交易并行处理的方法,其特征在于,基于所述状态更新信息对当前交易任务进行交易冲突验证,包括:基于所述状态更新信息验证当前交易任务的读集合是否与预设顺序中在当前交易任务之前发生的所有交易的写集合存在交易冲突;其中,所述读集合为交易执行过程中读取变量位置、变量版本的数据对数组,所述写集合为交易执行过程中写入变量位置、变量值的数据对数组;如果交易冲突,则更新多版本数据结构中当前交易任务对应的所述状态更新信息,重新执行当前交易任务,并对预设顺序大于当前交易任务的其他交易任务进行重新验证。5.根据权利要求4所述的交易并行处理的方法,其特征在于,基于所述状态更新信息验证当前交易任务的读集合是否与预设顺序中在当前交易任务之前发生的所有交易的写集合存在交易冲突,包括:每个工作线程基于所述状态更新信息在所述多版本数据结构的读集合中读取当前交易任务对应的历史版本号;按照预设顺序将若历史版本号与当前版本号不相等,则交易冲突,确定当前交易任务的依赖项未成功执行;若历史版本号与当前版本号相等,则交易不冲突,确定当前交易任务的依赖项已成功执行。6.根据权利要求1所述的交易并行处理的方法,其特征在于,通过所述工作线程获取所述任务队列的交易任务,对所述交易任务进行并行处理,包括:通过每个工作线程获取任务队列的交易任务,并行查询交易依赖集合中交易任务的依
赖项是否为空;其中,所述交易依赖集合为所述区块链系统中当前区块内交易执行过程中,每笔交易读取位置依赖其他交易写入位置的集合;如果为空,则确定交易任务执行成功,将成功状态和对应的第一读写集合至执行结果队列;如果不为空,则确定交易任务执行失败,退出交易任务并返回失败状态和对应的第二读写集合至执行结果队列。7.根据权利要求1所述的交易并行处理的方法,其特征在于,所述方法还包括:如果当前交易任务无法执行,则将产生有效状态信息的目标交易任务确定为当前交易任务的交易依赖项,并将所述目标交易任务缓存至交易依赖集合;其中,所述目标交易任务与所述当前交易任务在所述交易依赖集合中具有对应关系。8.一种交易并行处理的装置,其特征在于,所述装置应用于区块链系统,所述区块链系统包括调度节点和并行执行的多个工作线程;所述装置包括:任务生成和发送模块,用于通过所述调度节点生成交易任务,将所述交易任务发送至任务队列;并行处理及结果缓存模块,用于通过所述工作线程获取所述任务队列的交易任务,对所述交易任务进行并行处理,并将每个交易任务的每个执行版本的执行结果均缓存至多版本数据结构;验证及交易提交模块,用于通过所述工作线程对当前交易任务进行交易冲突验证,当验证交易无冲突时将当前交易任务的执行结果发送至所述调度节点,以使所述调度节点提交所述执行结果。9.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机可执行指令,所述处理器执行所述计算机可执行指令以实现权利要求1至7任一项所述的交易并行处理的方法。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现权利要求1至7任一项所述的交易并行处理的方法。

技术总结
本申请提供了一种交易并行处理的方法、装置、电子设备和存储介质,涉及区块链技术领域,包括:方法应用于区块链系统,区块链系统包括调度节点和并行执行的多个工作线程;方法包括:通过调度节点生成交易任务,将交易任务发送至任务队列;通过工作线程获取任务队列的交易任务,对交易任务进行并行处理,并将每个交易任务的每个执行版本的执行结果均缓存至多版本数据结构;通过工作线程对当前交易任务进行交易冲突验证,当验证交易无冲突时将当前交易任务的执行结果发送至调度节点,以使调度节点提交执行结果。本申请在进行交易并行处理时,提升了并行执行的处理效率和执行结果的准确性,并且避免了交易冲突,保证交易被安全提交。交。交。


技术研发人员:程泰宁 赖奕宇
受保护的技术使用者:网易(杭州)网络有限公司
技术研发日:2023.04.10
技术公布日:2023/7/20
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐