一种区块处理任务的控制方法和装置与流程

文档序号:19154986发布日期:2019-11-16 00:37阅读:180来源:国知局
一种区块处理任务的控制方法和装置与流程

本发明申请是申请日为2018年09月13日、申请号为201811069813.0发明名称为“一种区块处理任务的控制方法和装置”的发明申请的分案申请。

本发明涉及区块链技术领域,尤其涉及一种区块处理任务的控制方法和装置。



背景技术:

目前的区块链技术普遍存在交易性能差的问题,较低的性能无法满足现实场景中的应用需求。性能问题主要体现在两个方面:(1)共识过程复杂冗长;(2)链式数据串行处理效率较低。

在联盟链中只有经过许可的用户才能加入区块链,例如超级账本(hyperledgerfabric),其共识过程相对比特币和以太坊等公有链更加简单高效,因此在fabric等联盟链中链式数据串行处理的低效率问题显的尤为突出。区块链技术中,由于区块之间的链式依赖,现有技术在处理区块的提交过程中使用单线程串行执行的方式,即:一条链上的多个区块的提交必须遵循严格的顺序,后一个区块必须等待前一个区块提交完成后才能提交,同时后一个区快必须链接前一个区块形成有序链条,整个过程串行执行。然而这种串行处理方式显然不能充分发挥现代中央处理器(cpu)的多核性能,区块提交过程耗时长,交易吞吐率低,无法满足现实场景中的应用需求。

因此,如何加快区块提交的处理过程,提高区块处理任务的处理效率是首要考虑的问题之一。



技术实现要素:

本发明实施例提供一种区块处理任务的控制方法和装置,用以提高区块处理任务的处理效率。

第一方面,本发明实施例提供一种区块处理任务的控制方法,将区块处理任务分成连续的多级处理子任务,对应每级处理子任务配置至少一个对应级别的执行模块;以及所述方法包括:

至少一个非最末一级执行模块对当前待处理区块执行本级处理子任务后继续对下一个待处理区块执行本级处理子任务,其中:

最末一级执行模块对当前待处理区块执行最末一级处理子任务,并将处理结果同步到数据库中。

通过采用上述方法,有效实现了区块的并行处理,不仅提高了区块的处理效率,而且还提升了区块链系统的交易吞吐率,满足更多应用对区块链的性能需求。

第二方面,本发明实施例提供一种区块处理任务的控制装置,包括:

拆分模块,用于将区块处理任务分成连续的多级处理子任务,对应每级处理子任务配置至少一个对应级别的执行模块;

至少一个非最末一级执行模块,用于对当前待处理区块执行本级处理子任务后继续对下一个待处理区块执行本级处理子任务;

最末一级执行模块,用于对当前待处理区块执行最末一级处理子任务,并将处理结果同步到数据库中。

一方面,本发明实施例提供一种区块处理任务的控制方法,将区块处理任务分成连续的多级处理子任务,对应每级处理子任务配置至少一个对应级别的执行模块,相邻执行模块之间均配置有中间任务队列,且第一级执行模块配置有区块任务队列,区块任务队列中的任务是根据待处理区块的接收顺序按照先入先出的原则写入的;以及方法包括:

第一级执行模块对当前待处理区块执行本级处理子任务后,将按照先入先出原则从区块任务队列中提取的任务对应的区块作为下一个待处理区块;

每个非最末一级执行模块对当前待处理区块执行本级处理子任务后,按照先入先出的原则将当前待处理区块的区块处理任务添加到与下一级执行模块之间配置的中间任务队列中;以及

每个非第一级执行模块对当前待处理区块执行本级处理子任务后,将与上一级执行模块之间配置的中间任务队列中按照先入先出的原则提取的任务对应的区块作为下一个待处理区块;最末一级执行模块对当前待处理区块执行最末一级处理子任务后,并将处理结果同步到数据库中。

一方面,本发明实施例提供一种区块处理任务的控制装置,包括:

拆分模块,用于将区块处理任务分成连续的多级处理子任务;

配置模块,用于针对每级处理子任务配置至少一个对应级别的执行模块,并针对相邻执行模块之间均配置中间任务队列,以及针对第一级执行模块配置区块任务队列,区块任务队列中的任务是根据待处理区块的接收顺序按照先入先出的原则写入的;

第一级执行模块,用于对当前待处理区块执行本级处理子任务后,将按照先入先出原则从区块任务队列中提取的任务对应的区块作为下一个待处理区块;

每个非最末一级执行模块,用于对当前待处理区块执行本级处理子任务后,按照先入先出的原则将当前待处理区块的区块处理任务添加到与下一级执行模块之间配置的中间任务队列中;以及

每个非第一级执行模块,用于对当前待处理区块执行本级处理子任务后,将与上一级执行模块之间配置的中间任务队列中按照先入先出的原则提取的任务对应的区块作为下一个待处理区块;最末一级执行模块,用于对当前待处理区块执行最末一级处理子任务后,并将处理结果同步到数据库中。

第三方面,本发明实施例提供一种计算机可读介质,存储有计算机可执行指令,所述计算机可执行指令用于执行本申请提供的区块处理任务的控制方法。

第四方面,本发明实施例提供一种电子设备,包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本申请提供的区块处理任务的控制方法。

本发明有益效果:

本发明实施例提供的区块处理任务的控制方法和装置,通过将区块处理任务分成连续的多级处理子任务,且为每一级处理子任务配置至少一个对应级别的执行模块,以及每级执行模块对当前待处理区块执行本级处理子任务后继续对下一个待处理区块执行本级处理子任务。这样一来,一方面能够由各级执行模块顺序执行每一级处理子任务;另一方面,每一级执行模块在执行完当前待处理区块的本级处理子任务后继续执行下一待处理区块的本级处理子任务,实现了并行处理多个待处理区块的区块处理任务,进而加快了区块间区块处理任务的处理速度。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1为本发明实施例提供的实施区块处理任务的控制方法的计算装置的结构示意图;

图2为本发明实施例提供的区块处理任务的控制方法的流程示意图之一;

图3a为本发明实施例提供的每一级处理子任务对应一个执行模块的效果示意图;

图3b为本发明实施例提供的各级执行模块处理各个待处理区块的效果示意图;

图4为本发明实施例提供的区块任务队列中写入或读出区块处理任务的效果示意图;

图5为本发明实施例提供的中间任务队列任务写入和读出的效果示意图;

图6a为区块间处理数据d1的版本号的可能存在的执行时序示意图;

图6b为本发明实施例提供的区块间处理数据d1的版本号的执行时序示意图;

图7为本发明实施例提供的区块处理任务的控制方法的流程示意图之二;

图8a为本发明实施例提供的通过配置预提交缓存后执行账户版本验证的效果示意图之一;

图8b为本发明实施例提供的通过配置预提交缓存后执行账户版本验证的效果示意图之二;

图8c为本发明实施例提供的通过配置预提交缓存后执行账户版本验证的效果示意图之三;

图9a为本发明实施例提供的区块的提交任务的控制方法的流程示意图;

图9b为本发明实施例提供的各级执行模块执行上述五个子任务的效果示意图;

图10为本发明实施例提供的区块的提交过程中设置预提交缓存的效果示意图;

图11为本发明实施例提供的区块处理任务的控制装置的结构示意图。

具体实施方式

本发明实施例提供的区块处理任务的控制方法和装置,用以提高区块处理任务的处理效率。

以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

为了便于理解本发明,本发明涉及的技术术语中:

1、区块提交:超级账本中区块提交包括以下几个阶段:验证区块的合法性、账户数据的多版本并发控制(multi-versionconcurrencycontrol,mvcc)、区块账本文件写入、账本文件中交易的状态数据的更新等,其中:验证区块的合法性是用于判断区块中每笔交易的签名信息、交易的权限控制和交易是否符合背书策略等;账户数据的mvcc验证是用于验证区块中每一笔交易的读集的版本号是否与本地账本中的版本号一致;账本文件包含了交易中所涉及到的全部读写集;账本文件中交易的状态数据的更新是指将区块索引数据以及账户历史变更记录写入数据库和账户数据(worldstate)更新到数据库。

2、令牌桶,是一种常用的流量控制技术,本发明中令牌桶的方法是指,发送数据包时需要根据数据包大小等属性申请若干个令牌,同时需要从令牌桶中删除若干个令牌;如果令牌桶中没有足够的令牌,也即没有足够的令牌发送数据包,这个数据包就需要等待发送直到令牌桶中有足够的令牌,这样可以控制数据包的发送速度;将令牌桶的方法应用到本发明中,可以控制执行模块处理子任务的速度,进而能够满足区块链中相连区块中数据的一致性。

3、多级处理子任务,并不是说将区块处理任务划分成具有多个级别的处理子任务,各级处理子任务之间是并列的关系,不是从属的关系,本发明中多级处理子任务仅是为了限定执行顺序,即先执行第一级处理任务,然后依次是第二级处理子任务、第三级处理子任务、第四级处理子任务等等。

4、写集,是指区块中的交易涉及的所有修改数据构成的写数据集合,由于上述修改数据需要写入到数据库中,故本发明中将写数据集合简称作写集。该写集中的修改数据可以为:区块中的交易通过调用智能合约的模拟执行过程修改过的状态数据及其内容。例如,a向b转账50元,则修改数据可以为a账户的余额和b账户的余额等。

5、读集,是指在区块账户版本验证过程中,需要从数据库或预提交缓存中读取数据对区块涉及的交易的账号版本进行验证,故将读取的数据构成读数据集合,简称读集。该读集中的数据可以为:区块中的交易通过调用智能合约的模拟执行过程读取过的状态数据及其版本号。

由于区块之间的链式依赖,现有技术在处理区块的提交常使用单线程串行执行的方式,因此不能充分发挥现代cpu的多核性能,区块提交过程耗时较长,区块中交易吞吐率低,无法满足现实场景中的应用需求。

为了解决现有技术区块提交的处理过程耗时较长,区块处理效率较低的问题,本发明实施例给出了解决方案,提出了一种计算装置10,由计算装置10来实施本发明提供的区块处理任务的控制方法,该计算装置可以以通用计算设备的形式表现,该通用计算设备可以为终端或服务器等。下面参照图1来描述根据本发明的计算装置10。图1显示的计算装置10仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图1所示,计算装置10以通用计算设备的形式表现。计算装置10的组件可以包括但不限于:上述至少一个处理单元11、上述至少一个存储单元12、连接不同系统组件(包括存储单元12和处理单元11)的总线13。

总线13表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。

存储单元12可以包括易失性存储器形式的可读介质,例如随机存取存储器(ram)121和/或高速缓存存储器122,还可以进一步包括只读存储器(rom)123。

存储单元12还可以包括具有一组(至少一个)程序模块124的程序/实用工具125,这样的程序模块124包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

计算装置10也可以与一个或多个外部设备14(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与计算装置10交互的设备通信,和/或与使得该计算装置10能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口15进行。并且,计算装置10还可以通过网络适配器16与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器16通过总线13与用于计算装置10的其它模块通信。应当理解,尽管图中未示出,可以结合计算装置10使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。

本发明实施例提供的区块处理任务的控制方法的应用场景为,本发明中实施区块处理任务的控制方法的计算装置10可以为区块链中的一个节点,当计算装置10接收到其他节点以广播形式发送的区块时,计算装置10会将该区块的区块处理任务分成连续的多级处理任务,且对应每级处理子任务创建至少一个对应级别的执行模块,然后每级执行模块对当前待处理区块执行本级处理子任务后继续对下一个待处理区块执行本级处理子任务,其中:最末一级执行模块对当前待处理区块执行最末一级处理子任务,并将处理结果同步到数据库中。采用本发明提供的方法,通过为多级处理子任务配置多个执行模块,一方面能够由各级执行模块顺序执行每一待处理区块的各级处理子任务,另一方面,每一执行模块在执行完当前待处理区块的本级处理子任务后继续执行下一待处理区块的本级处理子任务,实现了并行处理多个待处理区块的区块处理任务,进而加快了区块间区块处理任务的处理速度。根据处理子任务的执行时间,对于执行时间较长的处理子任务,可以创建多个对应级别的执行模块,由多个执行模块并行处理,可以进一步加快处理速度。

下面结合图1和上述描述的应用场景,参考图2-图11来描述根据本发明示例性实施方式提供的区块处理任务的控制方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。

如图2所示,以每级处理子任务配置一个对应级别的执行模块为例,本发明实施例提供的区块处理任务的控制方法的流程可以包括以下步骤:

s11、将区块处理任务分成连续的多级处理子任务。

具体地,区块链中具有多个节点,每一节点中均设置有计算装置10。当每一节点的计算装置10在生成一个区块后,会将该区块以广播的形式发送给其他各个节点,这样其他节点中的计算装置10在接收到区块后,一方面将区块中的交易数据存储,另一方面需要建立一个处理该区块的区块处理任务,以完成对该区块的验证与提交,只有对该区块验证通过后,才能将该区块链接到自身节点上的区块链上。本发明提供的区块处理任务的控制方法只在对接收到的区块建立的区块处理任务进行处理,以完成区块的提交的处理过程。

本步骤中,本发明中的执行模块可以但不限于为线程或协程等。具体地,可以预先建立多个用于处理区块处理任务的执行模块,然后根据区块处理任务的实际处理过程,为执行模块赋予不同的处理功能。这样,当计算装置10接收到区块处理任务时,首先将区块处理任务划分成多级处理子任务,然后针对每一级处理子任务,配置一个对应级别的执行模块。这样一来,针对每一级处理子任务,都有其对应的执行模块来执行该级处理子任务,从而保证了各级处理子任务都能够被处理。

需要说明的是,本发明中,在对区块处理任务进行划分时,可以根据实际情况增加、删除或替换处理子任务。且本发明对划分的处理子任务的数量不进行限定。

s12、至少一个非最末一级执行模块对当前待处理区块执行本级处理子任务后继续对下一个待处理区块执行本级处理子任务。

本步骤中,为了提高区块处理任务的处理效率,本发明中提出执行模块在对当前待处理区块执行本级处理子任务后,继续对下一待处理区块执行本级处理子任务,这样可以保证各个待处理区块的并行处理,从而能够在一定程度上加快区块间区块处理任务的处理速度。例如,将每一待处理区块的区块处理任务划分成n级处理子任务,每一级处理子任务对应至少一个执行模块。参考图3a所示,图3a中给出了每一级处理子任务对应一个执行模块的效果示意图,每一级执行模块用于处理本级处理子任务,这样各级执行模块执行完各级对应的处理子任务后,表征执行完该待处理区块的区块处理任务。图3b给出了各级执行模块处理各个待处理区块的效果示意图,从该图中可以看出通过配置执行模块,实现了多个区块并行处理,整体上提高了区块处理效率。

较佳地,最末一级执行模块对当前待处理区块执行最末一级处理子任务,并将处理结果同步到数据库中。

具体地,本发明中最末一级执行模块在对当前待处理区块执行最末一级处理子任务后,会将各个执行模块处理当前待处理区块的各级处理子任务的处理结果同步到数据库中。

需要说明的是,本发明中各个执行模块在处理同一待处理区块的区块处理任务时,是按照区块处理任务的实际处理过程顺序处理的,也就是说划分的多级处理子任务是有序的,第一级执行模块处理完第一级处理子任务处理完后,第二级执行模块才能处理第二级处理子任务,以此类推。这样一来,各级执行模块需要进行通信才能保证各级处理子任务都被执行。

为此,本发明提出各个执行模块之间通过任务队列的方式进行通信。

可选地,第一级执行模块对当前待处理区块执行本级处理子任务后,将按照先入先出原则提取的任务对应的区块作为下一个待处理区块,所述区块任务队列中的任务是根据待处理区块的接收顺序按照先入先出的原则写入的。

具体地,本发明还可以维护一个区块任务队列,计算装置10在接收到其他节点广播的区块后,会将该区块进行存储,另一方面为该区块建立一个区块处理任务并写入到区块任务队列中。由于实际应用中,区块链中的区块一般存储有交易记录,而交易记录是有先后顺序的,因此,区块处理任务也是有先后顺序的。基于此情况,本发明在接收到待处理区块后,按照先入先出的顺序将为这些待处理区块建立的区块处理任务写入到区块任务队列中,参考图4所示。这样,第一级执行模块则按照先入先出的原则从区块任务队列中提取先写入的待处理的区块处理任务,然后执行上述区块处理任务中的第一级处理子任务。当处理完后,再从区块任务队列中提取下一个待处理区块的区块处理任务,并执行下一个待处理区块的区块处理任务中的第一级处理子任务。

可选地,各级执行模块之间按照下述方法进行通信:

每个非最末一级执行模块对当前待处理区块执行本级处理子任务后,还包括:按照先入先出的原则将当前待处理区块的区块处理任务添加到与下一级执行模块之间配置的中间任务队列中,其中,相邻执行模块之间均配置有中间任务队列;以及

每个非第一级执行模块对当前待处理区块执行本级处理子任务后,还包括:将与上一级执行模块之间配置的中间任务队列中按照先入先出原则提取的任务对应的区块作为下一个待处理区块。如果某个子任务由多个执行模块,则该级别的每个执行模块在处理完当前待处理区块后,分别从中间任务队列中获取下一个任务。

具体地,参考图5所示,各级执行模块之间分别维护了一个中间任务队列,且各个中间任务队列也是按照先入先出的原则写入任务。

具体地,以非最末一级执行模块为第二级执行模块为例进行说明,第二级执行模块在执行完当前待处理模块的第二级处理子任务后,会按照先入先出的原则将当前待处理区块的区块处理任务写入到第二级执行模块与第三级执行模块之间配置的中间任务队列中。例如图5中的中间任务队列从左至右排列,从左边写入区块处理任务,从右边读出区块处理任务,这样第二级执行模块会将当前待处理区块的区块处理任务从左边写入到中间任务队列中。

此外,还结合图5所示,以非第一级执行模块为第二执行模块为例进行说明,第二级执行模块在执行完当前待处理区块中第二级处理子任务后,还会按照先入先出的原则从第二级执行模块与第一级执行模块之间配置的中间任务队列中提取出任务,并将提取出的任务作为下一待处理区块的区块处理任务,并执行该区块处理任务中第二级处理子任务。

由于区块链技术本身具有下述特点:一条链上的多个区块的提交必须遵循严格的顺序,后一个区块必须等待前一个区块提交完成后才能提交,同时后一个区块必须链接到前一个区块形成有序链条。而本发明由于将串行处理区块的方式改成了并行处理方式处理接收到的各个待处理区块,虽然提高了区块的处理效率,但后一区块相对于前一区块的执行时间点会得到一定程度的提前,区块间的执行时序在不同的节点会出现不确定的差异,最后可能会导致不同节点间数据不一致的问题,参考图6a所示,图6a中区块1中将数据d1版本从v1修改为v2,而区块2中需要读取数据d1版本,但此时区块1中修改数据d1的版本这一操作并未同步到数据库中,而区块2已经从数据库中读取数据d1的版本,从而导致区块2中读取的数据d1的版本为v1,从而导致数据不一致问题的发生,然而这一现象违背了区块链系统中数据一致性的原则,为了解决这一问题,本发明给出了解决方案,使得通过利用本发明提供的方法使得区块间的执行时序能够达到图6b的效果,而本发明提出采用令牌桶的方法来解决上述数据不一致问题,即:

第一级执行模块在对当前待处理区块执行本级处理子任务之前,还包括图7所示的流程,包括以下步骤:

s21、第一级执行模块根据当前待处理区块中数据的级别,为当前待处理区块申请执行区块处理任务所需的令牌。

本步骤中,区块链中区块的数据级别不同,有些数据会影响后续所有区块的执行,有些则不会影响后续区块。例如,区块交易中涉及到元数据的修改或者配置的修改等,这些修改会影响后续所有区块的执行,级别比较高,相应的这样的区块属于特殊区块。而一些区块中的数据一般对后续区块影响较小,级别较低,而这样的区块属于普通区块。

需要说明的是,本发明中区块中数据的级别可以预先设定,级别越高代表该区块对后续区块影响越高。

为了保证数据间一致性,本发明提出第一执行模块为各个待处理区块申请执行待处理区块的区块处理任务所需的令牌。具体地,计算装置10会为其所属的节点上的区块链配置一个令牌桶,该令牌桶中具有若干个令牌,这样第一级执行模块在从区块任务队列提取待处理区块的区块处理任何时,会根据该待处理区块中的数据的级别,为该待处理区块申请执行待处理区块的区块处理任务所需的令牌。

s22、第一级执行模块确定申请的令牌数是否大于令牌桶中剩余的令牌数;若否,则执行步骤s23;若是,则执行步骤s24。

其中,令牌的总数为配置的执行模块的总数。

具体地,初始化阶段,会根据配置的执行模块的数量n,初始化令牌个数为n的令牌桶。通过设置令牌桶可以控制各个执行模块的处理速度,由此可以在一定程度上控制区块间的处理时间,进而保证能利用前一区块处理后的最新数据来处理当前待处理区块,这样也就保证了数据的一致性。

s23、第一执行模块对当前待处理区块执行第一级处理子任务。

s24、第一执行模块暂停执行本级处理子任务,并继续执行步骤s22。

步骤s22~s24中,第一执行模块在为待处理区块申请令牌后,会判断申请的令牌数是否大于令牌桶中剩余的令牌数,若大于则表明令牌桶中令牌已被之前的区块,这样第一执行模块则暂不对当前待处理区块的第一级处理子任务进行处理,第二级~第n级执行模块也不会对上述待处理区块的第二级~第n级处理子任务进行处理。第一执行模块若判断出为当前待处理区块申请的令牌数不大于令牌桶中剩余的令牌数,则开始执行当前待处理模块的第一级处理子任务,同时从令牌桶中去除为当前待处理模块申请的令牌。例如,第一执行模块为当前待处理区块需要申请3个令牌,令牌桶中剩余的令牌数为4个,第一执行模块易得出申请的令牌数3小于令牌桶中剩余的令牌数4,则对当前待处理模块执行第一级处理子任务,同时从令牌桶中扣除3个令牌,令牌桶中剩余的令牌数为1。

实际应用中,第一执行模块在确定出当前待处理区块为普通区块时,一般只为该待处理区块申请1个令牌;在确定出当前待处理区块为特殊区块时,只为该待处理区块申请令牌桶中全部的令牌数n。也就是说,在为普通令牌申请1个令牌时,最多可以并发执行n个普通区块;对于特殊区块,为了避免其与其他普通区块产生数据冲突,可以为该特殊区块申请n个令牌。

采用令牌桶的方法,可以灵活控制并发执行的区块的数量,能够满足特殊区块独占执行的需求,例如区块中交易涉及到元数据修改时,这些数据对后续区块的影响较大,则可以申请走令牌桶中所有区块,这样后续区块则没有可用的区块,从而暂停处理后续区块,这样也就实现了特殊区块独占执行。

为了保证区块的并行处理过程的持续性,本发明提供的区块处理任务的控制方法,还包括:

最末一级执行模块对当前待处理区块执行最末一级处理子任务后,则释放为当前待处理区块申请的执行区块处理任务所需的令牌并补入到令牌桶中。

具体地,当最末一级执行模块处理完当前待处理区块的最末一级处理子任务后,则释放为当前待处理区块申请的令牌,同时将释放的令牌补入到令牌桶中,这样一来,第一级执行模块可以为后续的待处理区块申请令牌,保证并行处理的持续性。

需要说明的是,采用上述令牌桶的方法,由于普通区块申请的令牌数量较小,假如,当令牌桶中有n个令牌,当第一执行模块确定出连续m个(m小于n)待处理区块均为普通区块,且均为这些普通区块申请1个令牌,则第一执行模块在处理这m个待处理区块时,不存在暂停执行的情况,则可能会存在普通区块之间依赖同一个数据项而产生数据冲突,如果强制有冲突的相邻区块串行执行,在存在热点账户数据的情况下回导致整个系统退化成原有串行执行模式,为了避免这一情况的发生,本发明给出了解决方法,即提出了预提交缓存的方式,即:针对当前待处理区块,任一级执行模块在修改当前待处理区块中交易的数据后,将修改的数据存储到预提交缓存中,以使在处理下一待处理区块时,先从预提交缓存中提取修改的数据,利用提取出的修改的数据对下一待处理区块进行处理,否则从数据库中提取数据对下一待处理区块进行处理。需要说明的是,本发明提出的预提交缓存也可以单独实施,即本发明可以不实施图7所示的令牌桶方法,仅采用预提交缓存的方法也可以保证数据的一致性。

为了更好地理解本发明提供的预提交缓存方法解决数据不一致问题,以本发明中处理子任务包括账户版本验证子任务为例进行说明。

较佳地,执行账户验证子任务的执行模块对当前待处理区块执行本级处理子任务后继续对下一个待处理区块执行本级处理子任务,具体包括:

对当前待处理区块涉及的交易的账户版本验证通过后,将当前待处理区块中所述交易中修改的所有数据构成的写集及其版本号保存到预提交缓存中;以及

处理下一待处理区块的账户版本验证时,若确定出预提交缓存中存储有账户的版本号,则利用从预提交缓存中读取的账户的版本号对所述下一待处理区块涉及的交易的账户版本进行验证;否则从数据库中读取账户的版本号对所述下一待处理区块涉及的交易的账户版本进行验证。

具体地,参考图8a所示,本发明提出了在计算装置10中配置一个预提交缓存,这样,账户版本验证子任务的执行模块在对当前待处理区块涉及的交易的账户版本验证通过后,将上述交易涉及的修改的所有数据构成的写集及其版本号保存到预提交缓存中,这样一来,结合图8b所示,当账户版本验证子任务的执行模块对下一待处理区块中的交易进行账户版本验证时,只需先从预提交缓存中提取账户的版本号,然后利用提取的版本号对上述下一待处理区块中的交易进行账户版本验证,由于预提交缓存中存储的数据为最新的,因此对下一待处理区块进行账户版本验证时也是利用最新的数据,故能够保证数据的一致性。此外,若预提交缓存中没有存储数据,则表明未对当前待处理区块中的交易进行数据修改,则只需从数据库中提取数据对上述下一待处理区块中的交易进行账户版本验证。因此,通过采用预提交缓存的方法,保证了区块间数据的一致性。

进一步地,所述处理子任务还包括账户更新子任务;以及执行账户更新子任务的执行模块对当前待处理区块执行本级处理子任务,具体包括:

在将预提交缓存中存储的当前待处理区块涉及的所述写集及其版本号更新至数据库中之后,清除预提交缓存中存储的当前待处理区块涉及的所述写集及其版本号。

具体地,实际应用中,需要将区块中交易涉及的写集及版本号同步到数据库中,由于本发明提供的方法先将写集及版本号存储到预提交缓存中,因此本发明还需要执行账户更新子任务,具体由账户更新子任务对应的执行模块将预提交缓存中缓存的上述当前待处理区块中交易涉及的写集及其版本号同步更新到数据库中,参考图8c所示;此外,由于预提交缓存中存储空间限制,账户更新子任务对应的执行模块还需要清除预提交缓存中存储的当前待处理区块涉及的所述写集及其版本号,为处理下一待处理区块中交易的账户版本验证时,涉及的修改的数据提供存储空间。

为了更好地理解本发明,以本发明中的区块处理任务为区块的提交任务为例进行说明,本发明中区块提交的任务划分的多级处理子任务包括区块验证子任务、账户版本验证子任务、区块提交子任务、账户更新子任务和同步与收尾子任务,且处理子任务的顺序为:先处理区块验证子任务,再依次执行账户版本验证子任务、区块提交子任务和账户更新子任务,最后执行同步与收尾子任务。同时,第一级执行模块用于进行处理区块验证子任务,第二级执行模块用于执行账户版本验证子任务,第三级执行模块用于执行区块提交子任务,第四级执行模块用于执行账户更新子任务,最末一级执行模块用于执行同步与收尾子任务。结合图1~图8c,以并行处理两个区块(分别为区块n和n+1)为例进行说明,参考图9a所示,为本发明实施例提供的区块的提交任务的控制方法的流程示意图,在介绍图9a之前,为了描述方便,本发明将第一级执行模块与第二级执行模块之间配置的中间任务队列记为第一中间任务队列;将第二级执行模块与第三级执行模块之间配置的中间任务队列记为第二中间任务队列;将第三级执行模块与第四级执行模块之间配置的中间任务队列记为第三中间任务队列;将第四级执行模块与第五级执行模块之间配置的中间任务队里记为第四级中间任务队列。图9b给出了各级执行模块执行上述五个子任务的效果示意图。基于上述描述,本发明提供的区块的提交任务的控制方法可以包括以下步骤:

s31、第一级执行模块从区块任务队列中按照先入先出的原则提取出区块n的区块处理任务,并根据区块n中数据的级别,为区块n申请执行区块处理任务所需的令牌。

s32、第一级执行模块若确定出申请的令牌数不大于令牌桶中剩余的令牌数,则对区块n的合法性进行验证。

本步骤中,第一级执行模块用于对区块n中每笔交易的签名信息、交易的权限控制和交易是否符合背书策略等进行合法性验证。

此外,第一级执行模块若确定出申请的令牌数大于令牌桶中剩余的令牌数,则挂起本级处理子任务,直至确定出令牌桶中剩余的令牌数满足申请的令牌数为止。

具体实施时,第一执行模块当确定出申请的令牌数大于令牌桶中当前可用的令牌数时,则挂起本级处理子任务,即暂停对本级处理子任务的处理,直至确定出令牌桶中剩余的令牌数不小于申请的令牌数时,再执行本级处理子任务。

s33、第一级执行模块在对区块n的合法性验证完成后,将n区块的区块处理任务添加到第一中间任务队列中。

s34、第一级执行模块继续从区块任务队列中提取区块n+1的区块处理任务,然后按照步骤s31~s33继续执行。

s35、第二级执行模块从第一中间任务队列中提取区块n的任务后,对区块n涉及的交易的账户版本进行验证,并在验证通过后将区块n中交易中修改的所有数据构成的写集及其版本号保存到预提交缓存中。

s36、第二级执行模块将区块n的区块处理任务继续添加到第二中间任务队列中。

s37、第二级执行继续从第一中间任务队列中提取区块n+1的任务,在确定出预提交缓存中存储有账户的版本号,则利用从预提交缓存中读取的账户的版本号对区块n+1涉及的交易的账户版本进行验证,并将区块n+1中交易中修改的所有数据构成的写集及其版本号保存到预提交缓存中,再继续按照步骤s36执行。

参考图10所示,通过设置预提交缓存,所有节点在对区块n+1进行账户版本验证时从预提交缓存中读取的账户数据都是相同的,在不牺牲并发处理方式的情况下,保证了节点间数据的一致性。

需要说明的是,步骤s36和s37的执行顺序可以同时执行,也可以先执行步骤s37再执行步骤s36,具体根据实际情况而定。

s38、第三级执行模块从第二中间任务队列中提取区块n的区块处理任务后,执行区块n中交易的提交,同时将区块n的区块处理任务添加至第三中间任务队列中。

s39、第三级执行模块继续提取区块n+1的区块处理任务,再参考步骤s38对区块n+1执行区块提交子任务。

s310、第四级执行模块从第三中间任务队列提取区块n的区块处理任务,将预提交缓存中存储的当前待处理区块涉及的所述写集及其版本号更新至数据库中。

步骤s310中,参考图10所示,第四执行模块将预提交缓存中数据更新至数据库的效果示意图。

s311、第四级执行模块清除预提交缓存中存储的当前待处理区块涉及的所述写集及其版本号,并将区块n的区块处理任务添加至第四中间任务队列中。

s312、第四级执行模块继续从第三中间任务队列提取区块n+1的区块处理任务,并按照步骤s310和s311对区块n+1执行账户更新子任务。

s313、第五级执行模块从第四中间任务队列中提取区块n的区块处理任务,在对区块n执行同步与收尾子任务后,释放为区块n申请的执行区块处理任务所需的令牌并将释放的令牌补入到令牌桶中。

具体地,针对每一区块,第五执行模块一般用于监控用于处理该区块的前述子任务是否处理完,当处理完时则释放为该区块申请的令牌。

在实际应用中,区块的提交过程中除了上述五个子任务外,可能还包括其他子任务,只是上述五个子任务为最重要的子任务。因此,针对其他子任务,本发明也可以配置执行模块来并行处理其他子任务,这样在第五级执行模块在确定出用于处理其他子任务的执行模块处理完后,以及前述四个子任务也处理完成后,则同步其他子任务的执行模块的执行结果,同时释放为区块申请的令牌。需要说明的是,本发明中其他子任务可以为不受时间限制的子任务,如建立区块索引、账户历史记录更新等任务。

需要说明的是,由于区块的提交任务主要包括5个子任务,且由五个执行模块并行处理,因此在此情况下同一时刻允许最多5个区块并行处理。

较佳地,为了更好的保证数据的一致性,本发明还可以采用其他同步机制,如系统锁和信号量等来维持数据同步。

通过采用本发明提供的区块处理任务的控制方法,通过将区块处理任务分成连续的多级处理子任务,且为每一级处理子任务配置至少一个对应级别的执行模块,以及每级执行模块对当前待处理区块执行本级处理子任务后继续对下一个待处理区块执行本级处理子任务。这样一来,有效实现了区块的并行处理,不仅提高了区块的处理效率,而且还提升了区块链系统的交易吞吐率,满足更多应用对区块链的性能需求。

基于同一发明构思,本发明实施例中还提供了一种区块处理任务的控制装置,由于上述装置解决问题的原理与区块处理任务的控制方法相似,因此上述装置的实施可以参见方法的实施,重复之处不再赘述。

如图11所示,为本发明实施例提供的区块处理任务的控制装置的结构示意图,包括:

拆分模块41,用于将区块处理任务分成连续的多级处理子任务;

配置模块42,用于针对每级处理子任务配置至少一个对应级别的执行模块;

至少一个非最末一级执行模块43i(i不等于n),用于对当前待处理区块执行本级处理子任务后继续对下一个待处理区块执行本级处理子任务;

最末一级执行模块43n,用于对当前待处理区块执行最末一级处理子任务,并将处理结果同步到数据库中。

较佳地,所述至少一个非最末一级执行模块包括:第一级执行模块431:

所述第一级执行模块具体用于对当前待处理区块执行本级处理子任务后,将按照先入先出原则提取的任务对应的区块作为下一个待处理区块,所述区块任务队列中的任务是根据待处理区块的接收顺序按照先入先出的原则写入的。

优选地,每个非最末一级执行模块i(i不等于n),具体用于对当前待处理区块执行本级处理子任务后,还包括:按照先入先出的原则将当前待处理区块的区块处理任务添加到与下一级执行模块之间配置的中间任务队列中,其中,相邻执行模块之间均配置有中间任务队列;

每个非第一级执行模块43i(i不等于1),具体用于对当前待处理区块执行本级处理子任务后,还包括:将与上一级执行模块之间配置的中间任务队列中按照先入先出的原则提取的任务对应的区块作为下一个待处理区块。

一种可能的实施方式中,第一级执行模块431,具体用于对当前待处理区块执行本级处理子任务之前,根据当前待处理区块中数据的级别,为当前待处理区块申请执行区块处理任务所需的令牌;确定申请的令牌数不大于令牌桶中剩余的令牌数,所述令牌的总数为配置的执行模块的总数;

所述第一级执行模块431,还用于若确定出申请的令牌数大于令牌桶中剩余的令牌数,则挂起本级处理子任务,直至确定出令牌桶中剩余的令牌数满足申请的令牌数为止。

优选地,最末一级执行模块43n,具体用于对当前待处理区块执行最末一级处理子任务后,则释放为当前待处理区块申请的执行区块处理任务所需的令牌并补入到令牌桶中。

一种可能的实施方式,本发明提供的区块处理任务的控制装置中,

所述处理子任务包括账户版本验证子任务;则

执行账户验证子任务的执行模块43i,具体用于对当前待处理区块涉及的交易的账户版本验证通过后,将当前待处理区块中所述交易中修改的所有数据构成的写集及其版本号保存到预提交缓存中;以及处理下一待处理区块的账户版本验证时,若确定出预提交缓存中存储有账户的版本号,则利用从预提交缓存中读取的账户的版本号对所述下一待处理区块涉及的交易的账户版本进行验证;否则从数据库中读取账户的版本号对所述下一待处理区块涉及的交易的账户版本进行验证。

一种可能的实施方式,本发明提供的区块处理任务的控制装置中,所述处理子任务还包括账户更新子任务;以及

执行账户更新子任务的执行模块43i,具体用于在将预提交缓存中存储的当前待处理区块涉及的所述写集及其版本号更新至数据库中之后,清除预提交缓存中存储的当前待处理区块涉及的所述写集及其版本号。

优选地,所述处理子任务还包括:区块验证子任务、区块提交子任务和同步与收尾子任务,其中处理子任务的顺序依次为:区块验证子任务、账户版本验证子任务、区块提交子任务、账户更新子任务和同步与收尾子任务。

为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本发明时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。

在一些可能的实施方式中,本发明提供的区块处理任务的控制方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在计算机设备上运行时,所述程序代码用于使所述计算机设备执行本说明书上述描述的根据本发明各种示例性实施方式的区块处理任务的控制方法中的步骤,例如,所述计算机设备可以执行如图2所示的步骤s11~s12中区块处理任务的控制流程。

所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。

本发明的实施方式的用于区块处理任务的控制方法的程序产品可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在计算设备上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、rf等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。

此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1