CN115981801A - 区块链记账方法、装置、电子设备及存储介质 - Google Patents
区块链记账方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115981801A CN115981801A CN202111183841.7A CN202111183841A CN115981801A CN 115981801 A CN115981801 A CN 115981801A CN 202111183841 A CN202111183841 A CN 202111183841A CN 115981801 A CN115981801 A CN 115981801A
- Authority
- CN
- China
- Prior art keywords
- target
- block
- operations
- threads
- sub
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明提供一种区块链记账方法、装置、电子设备及存储介质,属于通信技术领域,所述方法包括:Fabric平台确定待记账处理的目标区块;Fabric平台基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,其中,至少两个目标操作分别对应不同的目标区块,至少两类子操作属于同一目标操作;动态线程池中的全部或部分线程用于执行至少两次目标操作,目标操作用于实现目标区块的记账处理。本发明通过对不同区块间记账流程进行并行化处理和/或对同一区块间流程进行并行化处理,提升了资源的利用率,同时支持动态扩容的线程池,将线程资源进行复用,提升业务逻辑的执行效率,进而提升Fabric平台的整体性能。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种区块链记账方法、装置、电子设备及存储介质。
背景技术
分布式账本平台Fabric平台,即超级账本项目Hyperledger Fabric,是首个面向企业应用场景的开源分布式账本平台,被广泛用于实现区块链中的联盟链。
Fabric平台的交易处理流程包括三个部分:背书流程、交易排序流程和记账流程。但Fabric平台性能测试以及分析结果表示,Fabric平台的记账流程中对资源利用率不高,进而导致Fabric平台的性能瓶颈集中在记账流程。因而,如何提高Fabric平台在记账流程的性能是目前业界亟待解决的重要课题。
发明内容
本发明提供一种区块链记账方法、装置、电子设备及存储介质,用以解决现有技术中Fabric平台的记账流程中对资源利用率不高的缺陷,实现提升Fabric平台的整体性能。
第一方面,本发明提供一种区块链记账方法,包括:
分布式账本平台Fabric平台确定待记账处理的目标区块;
所述Fabric平台基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,其中,所述至少两个目标操作分别对应不同的所述目标区块,所述至少两类子操作属于同一目标操作;
其中,所述动态线程池中的全部或部分线程用于执行至少两次所述目标操作,所述目标操作用于实现所述目标区块的记账处理。
可选地,在一个实施例中,所述并行执行至少两个目标操作,包括:
按流水线方式并行执行所述至少两个所述目标操作。
可选地,在一个实施例中,所述至少两类子操作包括区块验证子操作和交易验证子操作。
可选地,在一个实施例中,所述Fabric平台基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,包括:
基于所述目标区块,确定目标任务,所述目标任务用于指示所述目标区块对应的所述目标操作;
基于所述目标任务,从所述动态线程池中处于空闲状态的线程中确定目标线程;
将所述目标任务分配给所述目标线程;
基于所述目标线程,执行所述目标任务指示的所述目标操作。
可选地,在一个实施例中,所述基于所述目标任务,从所述动态线程池中处于空闲状态的线程中确定目标线程,包括:
在所述处于空闲状态的所述线程的数量小于所述目标任务所需的线程的数量的情况下,将所述目标任务增加至阻塞队列;
在所述处于空闲状态的所述线程的数量大于或等于所述阻塞队列中的至少一个目标任务所需的线程的数量的情况下,从所述处于空闲状态的所述线程中确定所述目标线程。
可选地,在一个实施例中,所述基于所述目标任务,从所述动态线程池中处于空闲状态的线程中确定目标线程,包括:
在将所述目标任务增加至阻塞队列的情况下,若所述阻塞队列中的目标任务的数量大于或等于第一预设阈值,则在所述动态线程池中创建至少一个临时线程;
其中,所述临时线程用于对所述动态线程池进行扩容。
可选地,在一个实施例中,所述基于所述目标任务,从所述动态线程池中处于空闲状态的线程中确定目标线程,包括:
在创建的所述临时线程的数量大于或等于第二预设阈值的情况下,执行以下至少一项操作:
再次执行将第一目标任务增加至所述阻塞队列的操作;
在等待预设时间后,再次执行将所述第一目标任务增加至所述阻塞队列的操作;
执行将所述第一目标任务丢弃的操作;
其中,所述第一目标任务包括未放入所述阻塞队列中的所述目标任务。
第二方面,本发明提供一种区块链记账装置,包括:确定模块和执行模块,其中:
确定模块用于分布式账本平台Fabric平台确定待记账处理的目标区块;
执行模块用于所述Fabric平台基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,其中,所述至少两个目标操作分别对应不同的所述目标区块,所述至少两类子操作属于同一目标操作;
其中,所述动态线程池中的全部或部分线程用于执行至少两次所述目标操作,所述目标操作用于实现所述目标区块的记账处理。
第三方面,本发明提供一种电子设备,包括存储器和存储有计算机程序的存储器,所述处理器执行所述程序时实现第一方面所述区块链记账方法的步骤。
第四方面,本发明提供一种处理器可读存储介质,所述处理器可读存储介质存储有计算机程序,所述计算机程序用于使所述处理器执行第一方面所述区块链记账方法的步骤。
本发明提供的一种区块链记账方法、装置、电子设备及存储介质,通过基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,可以实现对不同区块间记账流程进行并行化处理和/或对同一区块间流程进行并行化处理,提升了资源的利用率,同时支持动态扩容的线程池,将线程资源进行复用,提升业务逻辑的执行效率,进而提升Fabric平台的整体性能。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是相关技术提供的Fabric平台的交易处理流程图;
图2是相关技术提供的Fabric平台的记账流程图;
图3是相关技术提供的Fabric平台的区块串行执行流程图;
图4是本发明提供的区块链记账方法的流程示意图;
图5是本发明提供的区块链记账方法的流水线方式示意图;
图6是本发明提供的区块链记账方法的区块并行执行流程图;
图7是本发明提供的区块链记账方法的区块内部处理流程示意图;
图8是本发明提供的动态线程池进行任务分配的流程示意图;
图9是本发明提供的区块链记账装置的结构示意图;
图10是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是相关技术提供的Fabric平台的交易处理流程图,如图1所示,Fabric平台执行流程大致可以分为如下三个部分:
(1)背书流程(模拟执行):节点(peer)收到客户端的交易,会首先对交易做验证操作,比如验证客户端签名是否合法,发起者身份是否合法等;然后会通过合约对交易进行预执行(或者说模拟执行)操作;如果执行通过,则该peer节点对此交易进行签名(背书)。
(2)交易排序流程:排序节点(orderer)收到客户端提交的交易(模拟交易的执行结果),对交易进行排序、切块、分发给peer。
(3)记账流程:验证并提交区块,维护账本
在对Fabric平台进行性能测试以及分析的过程中,发现Fabric平台的性能瓶颈集中在记账流程。
图2是相关技术提供的Fabric平台的记账流程图,如图2所示,目前Fabric平台对区块(记账流程)的处理顺序主要为串行方式。
图3是相关技术提供的Fabric平台的区块串行执行流程图,如图3所示,区块与区块之间是串行处理,例如对于待记账处理的区块1和区块2,在时间轴上,需要等到区块1的记账流程处理完之后才能执行区块2的记账流程。
如图2和图3所示,记账流程大致可分为如下五个阶段:(1)区块验证,对区块进行验签以及哈希(hash)计算比对验证等;(2)交易验证,校验读写集以及背书策略等;(3)区块提交,将私有数据以及序列化的区块结构写入文件等;(4)更新世界状态,世界状态即合约里进行存取的业务数据;(5)同步与收尾,将接收到的区块通过信息交换协议(gossip协议)广播给其他peer节点等。
上述五个阶段中,第(1)阶段和第(2)阶段主要做一些序列化、反序列化以及验签等操作,对中央处理机(Central Processing Unit,CPU)资源的消耗相对较多;第(3)阶段和第(4)阶段会涉及到文件操作,对磁盘输入输出(Input/Output,IO)资源的消耗较多。
区块里面的每个阶段,比如交易验证阶段,对交易的背书策略进行校验(签名验证操作)时,已经进行了并行处理,但是区块与区块之间是串行处理。这样会造成计算类的操作集中处理,然后IO类的操作也集中处理,但是计算类的操作和IO类的操作并没有并行处理。
可见,Fabric平台的记账流程中,每个阶段对各个硬件部分的资源利用率相差较大,因而区块之间的串行处理流程会使各个阶段在执行过程中,既不利于提升资源的利用率,又不利于提升区块链服务的整体性能。
因此,现有的Fabric平台的记账流程主要存在两方面问题:(1)记账流程中消耗不同硬件部分资源的操作没有充分的并行化执行,导致资源利用率不高;(2)单个区块内部的记账流程为串行处理,资源利用率不高。
图4是本发明提供的区块链记账方法的流程示意图,如图4所示,所述方法包括:
步骤401,分布式账本平台Fabric平台确定待记账处理的目标区块;
步骤402,所述Fabric平台基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,其中,所述至少两个目标操作分别对应不同的所述目标区块,所述至少两类子操作属于同一目标操作;
其中,所述动态线程池中的全部或部分线程用于执行至少两次所述目标操作,所述目标操作用于实现所述目标区块的记账处理。
具体地,在一个实施例中,目标区块可以是待进行记账处理的区块。
例如,在Fabric平台确定目标区块的过程中,有区块1、区块2、区块3、区块4和区块5需要进行记账处理,则可以确定区块1-5是目标区块。
具体地,在一个实施例中,目标操作可以包括,区块验证子操作、交易验证子操作、区块提交子操作、更新世界状态子操作和同步收尾子操作。
具体地,在一个实施例中,对于目标区块中的区块n和区块(n+1),当执行完区块n的第m个子操作之后就可以并行的去执行区块n的第(m+1)个子操作和区块(n+1)的第m个子操作。
例如,对于目标区块中的区块1和区块2,当执行完区块1的区块提交子操作后,就可以并发地去执行区块1的更新世界状态子操作和区块2的区块提交子操作。
具体地,在一个实施例中,Fabric平台可以并行执行目标区块对应的子操作。
例如,在确定区块1为目标区块之后,可以并行执行区块1对应的区块验证子操作和交易验证子操作。
具体地,在一个实施例中,Fabric平台可以并行执行至少两个目标操作,而且并行执行至少两类子操作,其中,至少两个目标操作分别对应不同的所述目标区块,至少两类子操作属于同一目标操作。
例如,在确定区块1-5为目标区块之后,Fabric平台可以并行执行区块1对应的目标操作、区块2对应的目标操作、区块3对应的目标操作、区块4对应的目标操作和区块5对应的目标操作,而且并行处理区块1对应的区块验证子操作和交易验证子操作、并行处理区块2对应的区块验证子操作和交易验证子操作,以此类推,并行处理区块3-5各自对应的区块验证子操作和交易验证子操作。
具体地,在一个实施例中,动态线程池可以对线程进行复用,动态线程池中的全部或部分线程用于执行至少两次所述目标操作。
例如,动态线程池可以维持5个线程(线程1、线程2、线程3、线程4和线程5),在第一个时间段内,确定区块1-5为目标区块,进而线程1可以处理区块1的目标操作、线程2可以处理区块2的目标操作、线程3可以处理区块3的目标操作、线程4可以处理区块4的目标操作和线程5可以处理区块5的目标操作,在处理完区块1-5的目标操作之后,不会销毁线程1-5;在第二个时间段内,确定区块6-8为目标区块,进而线程1可以处理区块6的目标操作、线程2可以处理区块7的目标操作和线程3可以处理区块8的目标操作。可见,在此过程中,线程1-3用于执行至少两次目标操作。
具体地,在一个实施例中,动态线程池可以是支持动态扩容的线程池,在目标区块对应目标操作所需的线程数量超过线程池中空闲的线程的数量的情况下,可以创建临时线程处理目标操作。
例如,动态线程池可以维持3个线程(线程1、线程2和线程3),在某个时间段内,确定区块1-5为目标区块且线程1-3处于空闲状态,此时,区块1-5对应的目标操作所需的线程数量超过了线程池中空闲的线程的数量,进而可以创建临时线程4和临时线程5,其中线程1-3分别用于处理区块1-3对应的目标操作,临时线程4用于处理区块4对应的目标操作,临时线程5用于处理区块5对应的目标操作。
可以理解的是,由于计算机系统的硬件限制,同一个CPU或同一个CPU处理内核如果频繁创建线程,会降低系统的运行效率,因为频繁的创建线程和销毁线程都需要消耗一定的时间和资源,本发明通过动态线程池的方式来管理线程,可以在需要并行处理多个区块的目标操作时,快速为目标操作分配线程,相比每次单独创建新线程方式,可减少多余时间计资源的消耗,将线程资源进行复用,提升整体业务逻辑的执行效率。
具体地,在一个实施例中,将Fabric平台的记账流程进行模块化划分,将前两个计算类子操作(区块验证子操作、交易验证子操作)并行执行,与后续的IO类子操作(区块提交子操作、更新世界状态子操作)分离,不同区块之间的计算类子操作与IO类子操作亦进行并行化处理,可以提升资源利用率,并提升Fabric区块链服务的性能。另外设计了一种支持动态扩容的线程池,将线程资源进行复用,提升业务逻辑的执行效率。
本发明提供的区块链记账方法,通过基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,可以实现对不同区块间记账流程进行并行化处理和/或对同一区块间流程进行并行化处理,提升了资源的利用率,同时支持动态扩容的线程池,将线程资源进行复用,提升业务逻辑的执行效率,进而提升Fabric平台的整体性能。
可选地,在一个实施例中,所述并行执行至少两个目标操作,包括:
按流水线方式并行执行所述至少两个所述目标操作。
图5是本发明提供的区块链记账方法的流水线方式示意图,如图5所示,区块与区块之间的记账流程可以采用流水线方式。
图6是本发明提供的区块链记账方法的区块并行执行流程图,如图6所示,目标区块可以是区块1、区块2、区块3、区块4、区块5,当区块1的区块验证子操作执行完之后,可以并行执行区块1的交易验证子操作和区块2的区块验证子操作,之后并行执行区块1的区块提交子操作、区块2的交易验证子操作和区块3的区块验证子操作,之后并行执行区块1的更新世界状态子操作、区块2的区块提交子操作、区块3的交易验证子操作和区块4的区块验证子操作,之后并行执行区块1的同步收尾子操作、区块2的更新世界状态子操作、区块3的区块提交子操作、区块4的交易验证子操作和区块5的区块验证子操作。
可以理解的是,每一个区块提交和世界状态(业务数据的增删改查)的更新都是在前一个区块完成之后执行的,因此,不会造成业务数据的错乱,影响最终的账本数据。
因此,通过流水线方式并行执行至少两个所述目标操作,可以实现区块与区块之间进行并行处理,能使计算类操作和IO类操作并行执行,提升资源利用率,提升Fabric平台服务本身的性能。
可选地,在一个实施例中,所述至少两类子操作包括区块验证子操作和交易验证子操作。
图7是本发明提供的区块链记账方法的区块内部处理流程示意图,如图7所示,可以将每个区块内的区块验证子操作与交易验证子操作,进行并行操作,通过多线程方式,将任务分配到不同线程去执行,当多项任务均执行成功后,则继续执行下一个子操作。
如图7所示,目标区块可以是区块1、区块2和区块3,区块1-3之间的记账流程可以按流水线方式进行,区块1的区块验证子操作与交易验证子操作可以进行并行化处理,区块2的区块验证子操作与交易验证子操作可以进行并行化处理,区块3的区块验证子操作与交易验证子操作可以进行并行化处理。
因此,让多个区块之间的流程并行处理的设计可以使计算类操作与IO类操作并行执行,充分利用系统资源,但每个区块的流程仍为单步执行,如区块验证子操作、交易验证子操作为CPU密集型,这两个子操作无依赖关系,可进一步进行并行化。
因此,通过并行方式执行每个区块的流程中的区块验证子操作和交易验证子操作,可以提升资源利用率,提升Fabric平台服务本身的性能。
可选地,在一个实施例中,所述Fabric平台基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,包括:
基于所述目标区块,确定目标任务,所述目标任务用于指示所述目标区块对应的所述目标操作;
基于所述目标任务,从所述动态线程池中处于空闲状态的线程中确定目标线程;
将所述目标任务分配给所述目标线程;
基于所述目标线程,执行所述目标任务指示的所述目标操作。
具体地,在一个实施例中,目标任务可以用于指示目标区块对应的目标操作。
例如,在确定区块1为目标区块的情况下,可以确定区块1的目标任务包括:区块1对应的待执行的区块验证子操作、区块1对应的待执行的交易验证子操作、区块1对应的待执行的区块提交子操作、区块1对应的待执行的更新世界状态子操作和区块1对应的待执行的同步收尾子操作。
具体地,在一个实施例中,在确定目标任务之后,可以从动态线程池中处于空闲状态的所述线程中确定目标线程。
例如,在目标任务包括任务1(待执行的区块验证子操作)和任务2(待执行的交易验证子操作)的情况下,可以从动态线程池中处于空闲状态的线程1-5中,确定线程1和线程2为目标线程。
具体地,在一个实施例中,在确定目标线程之后,可以将目标任务分配给目标线程。
例如,在根据目标任务(待执行的区块验证子操作和待执行的交易验证子操作)确定线程1和线程2为目标线程之后,可以将“待执行的区块验证子操作”的任务分配给线程1,可以将“待执行的交易验证子操作”的任务分配给线程2。
因此,通过动态线程池的方式来管理线程,可以在需要并行处理多个区块的目标操作时,快速为目标操作分配线程,相比每次单独创建新线程方式,可减少多余时间计资源的消耗,将线程资源进行复用,提升整体业务逻辑的执行效率。
可选地,在一个实施例中,所述基于所述目标任务,从所述动态线程池中处于空闲状态的线程中确定目标线程,包括:
在所述处于空闲状态的所述线程的数量小于所述目标任务所需的线程的数量的情况下,将所述目标任务增加至阻塞队列;
在所述处于空闲状态的所述线程的数量大于或等于所述阻塞队列中的至少一个目标任务所需的线程的数量的情况下,从所述处于空闲状态的所述线程中确定所述目标线程。
具体地,在一个实施例中,在处于空闲状态的线程的数量小于目标任务所需的线程的数量的情况下,可以将目标任务增加至阻塞队列。
例如,在确定区块1-3为目标区块的情况下,处于空闲状态的线程为线程1和线程2,若处理区块1对应的目标任务(包括任务1和任务2)需要两个线程,则可以将任务1分配给线程1,可以将任务2分配给线程2,可以将区块2和区块3对应的目标任务增加至阻塞队列。
具体地,在一个实施例中,在处于空闲状态的线程的数量大于或等于阻塞队列中的至少一个目标任务所需的线程的数量的情况下,从处于空闲状态的线程中确定目标线程。
例如,在阻塞队列中有目标任务1、目标任务2和目标任务3的情况下,若处理目标任务1-3分别需要两个线程,而此时处于空闲状态的线程为线程1-4,则可以确定线程1和2为处理目标任务1的目标线程,线程3和4为处理目标任务2的目标线程。
因此,通过动态线程池的方式来管理线程,可以在需要并行处理多个区块的目标操作时,快速为目标操作分配线程,可以在空闲的线程的数量小于目标任务所需的线程的数量的情况下,将目标任务增加至阻塞队列,实现动态线程池适应多种并发场景。
可选地,在一个实施例中,所述基于所述目标任务,从所述动态线程池中处于空闲状态的线程中确定目标线程,包括:
在将所述目标任务增加至阻塞队列的情况下,若所述阻塞队列中的目标任务的数量大于或等于第一预设阈值,则在所述动态线程池中创建至少一个临时线程;
其中,所述临时线程用于对所述动态线程池进行扩容。
具体地,在一个实施例中,第一预设阈值可以是阻塞队列的最大容量值。
具体地,在一个实施例中,第一预设阈值可以是小于阻塞队列的最大容量值的一个预设值。
例如,在第一预设阈值为10个单位容量的情况下,且已经放入阻塞队列的目标任务的数量为11,则可以判定此时阻塞队列中的目标任务的数量大于或等于第一预设阈值,进而可以在动态线程池中创建至少一个临时线程。
具体地,在一个实施例中,创建的临时线程可以用于处理阻塞队列中的目标任务。
具体地,在一个实施例中,创建的临时线程可以用于处理未放入阻塞队列的目标任务。
因此,通过动态线程池的方式来管理线程,可以在需要并行处理多个区块的目标操作时,快速为目标操作分配线程,可以在阻塞队列中的目标任务的数量大于或等于第一预设阈值的情况下,在动态线程池中创建临时线程,实现动态线程池适应多种并发场景。
可选地,在一个实施例中,所述基于所述目标任务,从所述动态线程池中处于空闲状态的线程中确定目标线程,包括:
在创建的所述临时线程的数量大于或等于第二预设阈值的情况下,执行以下至少一项操作:
再次执行将第一目标任务增加至所述阻塞队列的操作;
在等待预设时间后,再次执行将所述第一目标任务增加至所述阻塞队列的操作;
执行将所述第一目标任务丢弃的操作;
其中,所述第一目标任务包括未放入所述阻塞队列中的所述目标任务。
例如,在第二预设阈值为10的情况下,若已经创建的临时线程的数量为11,则可以判定此时创建的临时线程的数量大于或等于第二预设阈值。
具体地,在一个实施例中,若再次执行将第一目标任务增加至所述阻塞队列的操作的结果为失败,则可以执行将所述第一目标任务丢弃的操作。
具体地,在一个实施例中,若在等待预设时间后,再次执行将所述第一目标任务增加至所述阻塞队列的操作的结果为失败,则可以执行将所述第一目标任务丢弃的操作。
因此,通过动态线程池的方式来管理线程,可以在需要并行处理多个区块的目标操作时,快速为目标操作分配线程,可以在创建的所述临时线程的数量大于或等于第二预设阈值的情况下,以多种方式尝试将第一目标任务增加至所述阻塞队列的操作,实现动态线程池适应多种并发场景。
图8是本发明提供的动态线程池进行任务分配的流程示意图,如图8所示,Fabric平台可以维护一个由预设数量的线程组成的线程池(ThreadPool),在程序初始化时,创建预设数量的线程。当需要执行目标区块的记账流程时,可以将目标任务委托给目标线程。
具体地,在一个实施例中,当需要执行目标区块对应的区块验证子操作时和交易验证子操作时,可以生成的目标任务可以包括任务A和任务B,其中任务A用于指示目标区块对应的区块验证子操作,任务B用于指示目标区块对应的交易验证子操作,进而可以从动态线程池中处于空闲状态的所述线程中确定两个目标线程,将任务A和任务B分配给两个目标线程,其中一个目标线程用于执行区块验证子操作,另一个目标线程用于执行交易验证子操作。
当线程任务执行完毕后,该线程由线程池进行回收,等待下一次任务分配。当任务需求数量多于线程池初始化维护的数量时,由线程池动态的创建临时线程,当动态创建的临时线程数量到达第二预设阈值时,相应的区块处理逻辑则阻塞,直到有空闲线程可以接收任务。
具体地,在一个实施例中,如图8所示,Fabric平台的动态线程池可以按以下逻辑执行对线程的管理:
步骤1,在程序初始化时,就创建预设数量个独立线程,负责执行异步任务,当任务需求到来时,直接调用任一个线程执行任务;
步骤2,当任务需求数量超过预设数量或线程均在使用中时,如当前阻塞队列未满(阻塞队列中的目标任务的数量小于或等于第一预设阈值),将该需求放入队列;
步骤3,如当前的阻塞队列已满(阻塞队列中的目标任务的数量大于或等于第一预设阈值),则考虑通过创建临时线程等方式对线程池进行扩容;
步骤4,当扩容数量达到第二预设阈值时(创建的所述临时线程的数量大于或等于第二预设阈值),由调度策略模块进行调度:如返回指定错误,进而Fabric平台执行以下至少一项操作:再次执行将第一目标任务增加至所述阻塞队列的操作;在等待预设时间后,再次执行将所述第一目标任务增加至所述阻塞队列的操作;执行将所述第一目标任务丢弃的操作。
本发明提供的区块链记账方法,通过基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,可以实现对不同区块间记账流程进行并行化处理和/或对同一区块间流程进行并行化处理,提升了资源的利用率,同时支持动态扩容的线程池,将线程资源进行复用,提升业务逻辑的执行效率,进而提升Fabric平台的整体性能。
下面对本发明提供的区块链记账装置进行描述,下文描述的区块链记账装置与上文描述的区块链记账方法可相互对应参照。
图9是本发明提供的区块链记账装置的结构示意图,如图9所示,所示装置包括:确定模块901和执行模块902,其中
确定模块901用于分布式账本平台Fabric平台确定待记账处理的目标区块;
执行模块902用于所述Fabric平台基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,其中,所述至少两个目标操作分别对应不同的所述目标区块,所述至少两类子操作属于同一目标操作;
其中,所述动态线程池中的全部或部分线程用于执行至少两次所述目标操作,所述目标操作用于实现所述目标区块的记账处理。
具体地,在一个实施例中,将Fabric平台的记账流程进行模块化划分,将前两个计算类子操作(区块验证子操作、交易验证子操作)并行执行,与后续的IO类子操作(区块提交子操作、更新世界状态子操作)分离,不同区块之间的计算类子操作与IO类子操作亦进行并行化处理,可以提升资源利用率,并提升Fabric区块链服务的性能。另外设计了一种支持动态扩容的线程池,将线程资源进行复用,提升业务逻辑的执行效率。
本发明提供的区块链记账装置,通过基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,可以实现对不同区块间记账流程进行并行化处理和/或对同一区块间流程进行并行化处理,提升了资源的利用率,同时支持动态扩容的线程池,将线程资源进行复用,提升业务逻辑的执行效率,进而提升Fabric平台的整体性能。
可选地,在一个实施例中,所述执行模块还用于:
按流水线方式并行执行所述至少两个所述目标操作。
可选地,在一个实施例中,所述至少两类子操作包括区块验证子操作和交易验证子操作。
可选地,在一个实施例中,所述执行模块还用于:
基于所述目标区块,确定目标任务,所述目标任务用于指示所述目标区块对应的所述目标操作;
基于所述目标任务,从所述动态线程池中处于空闲状态的线程中确定目标线程;
将所述目标任务分配给所述目标线程;
基于所述目标线程,执行所述目标任务指示的所述目标操作。
可选地,在一个实施例中,所述执行模块还用于:
在所述处于空闲状态的所述线程的数量小于所述目标任务所需的线程的数量的情况下,将所述目标任务增加至阻塞队列;
在所述处于空闲状态的所述线程的数量大于或等于所述阻塞队列中的至少一个目标任务所需的线程的数量的情况下,从所述处于空闲状态的所述线程中确定所述目标线程。
可选地,在一个实施例中,所述执行模块还用于:
在将所述目标任务增加至阻塞队列的情况下,若所述阻塞队列中的目标任务的数量大于或等于第一预设阈值,则在所述动态线程池中创建至少一个临时线程;
其中,所述临时线程用于对所述动态线程池进行扩容。
可选地,在一个实施例中,所述执行模块还用于:
在创建的所述临时线程的数量大于或等于第二预设阈值的情况下,执行以下至少一项操作:
再次执行将第一目标任务增加至所述阻塞队列的操作;
在等待预设时间后,再次执行将所述第一目标任务增加至所述阻塞队列的操作;
执行将所述第一目标任务丢弃的操作;
其中,所述第一目标任务包括未放入所述阻塞队列中的所述目标任务。
本发明提供的区块链记账装置,通过基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,可以实现对不同区块间记账流程进行并行化处理和/或对同一区块间流程进行并行化处理,提升了资源的利用率,同时支持动态扩容的线程池,将线程资源进行复用,提升业务逻辑的执行效率,进而提升Fabric平台的整体性能。
图10是本发明提供的电子设备的结构示意图,如图10所示,该电子设备可以包括:处理器(processor)1010、通信接口(Communication Interface)1020、存储器(memory)1030和通信总线1040,其中,处理器1010,通信接口1020,存储器1030通过通信总线1040完成相互间的通信。处理器1010可以调用存储器1030中的计算机程序,以执行区块链记账方法的步骤,例如包括:
分布式账本平台Fabric平台确定待记账处理的目标区块;
所述Fabric平台基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,其中,所述至少两个目标操作分别对应不同的所述目标区块,所述至少两类子操作属于同一目标操作;
其中,所述动态线程池中的全部或部分线程用于执行至少两次所述目标操作,所述目标操作用于实现所述目标区块的记账处理。
此外,上述的存储器1030中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的区块链记账方法,该方法包括:
分布式账本平台Fabric平台确定待记账处理的目标区块;
所述Fabric平台基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,其中,所述至少两个目标操作分别对应不同的所述目标区块,所述至少两类子操作属于同一目标操作;
其中,所述动态线程池中的全部或部分线程用于执行至少两次所述目标操作,所述目标操作用于实现所述目标区块的记账处理。
另一方面,本申请实施例还提供一种处理器可读存储介质,所述处理器可读存储介质存储有计算机程序,所述计算机程序用于使所述处理器执行上述各实施例提供的方法,例如包括:
分布式账本平台Fabric平台确定待记账处理的目标区块;
所述Fabric平台基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,其中,所述至少两个目标操作分别对应不同的所述目标区块,所述至少两类子操作属于同一目标操作;
其中,所述动态线程池中的全部或部分线程用于执行至少两次所述目标操作,所述目标操作用于实现所述目标区块的记账处理。
所述处理器可读存储介质可以是处理器能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NANDFLASH)、固态硬盘(SSD))等。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种区块链记账方法,其特征在于,包括:
分布式账本平台Fabric平台确定待记账处理的目标区块;
所述Fabric平台基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,其中,所述至少两个目标操作分别对应不同的所述目标区块,所述至少两类子操作属于同一目标操作;
其中,所述动态线程池中的全部或部分线程用于执行至少两次所述目标操作,所述目标操作用于实现所述目标区块的记账处理。
2.根据权利要求1所述的区块链记账方法,其特征在于,所述并行执行至少两个目标操作,包括:
按流水线方式并行执行所述至少两个所述目标操作。
3.根据权利要求1所述的区块链记账方法,其特征在于,所述至少两类子操作包括区块验证子操作和交易验证子操作。
4.根据权利要求1所述的区块链记账方法,其特征在于,所述Fabric平台基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,包括:
基于所述目标区块,确定目标任务,所述目标任务用于指示所述目标区块对应的所述目标操作;
基于所述目标任务,从所述动态线程池中处于空闲状态的线程中确定目标线程;
将所述目标任务分配给所述目标线程;
基于所述目标线程,执行所述目标任务指示的所述目标操作。
5.根据权利要求4所述的区块链记账方法,其特征在于,所述基于所述目标任务,从所述动态线程池中处于空闲状态的线程中确定目标线程,包括:
在所述处于空闲状态的所述线程的数量小于所述目标任务所需的线程的数量的情况下,将所述目标任务增加至阻塞队列;
在所述处于空闲状态的所述线程的数量大于或等于所述阻塞队列中的至少一个目标任务所需的线程的数量的情况下,从所述处于空闲状态的所述线程中确定所述目标线程。
6.根据权利要求5所述的区块链记账方法,其特征在于,所述基于所述目标任务,从所述动态线程池中处于空闲状态的线程中确定目标线程,包括:
在将所述目标任务增加至阻塞队列的情况下,若所述阻塞队列中的目标任务的数量大于或等于第一预设阈值,则在所述动态线程池中创建至少一个临时线程;
其中,所述临时线程用于对所述动态线程池进行扩容。
7.根据权利要求6所述的区块链记账方法,其特征在于,所述基于所述目标任务,从所述动态线程池中处于空闲状态的线程中确定目标线程,包括:
在创建的所述临时线程的数量大于或等于第二预设阈值的情况下,执行以下至少一项操作:
再次执行将第一目标任务增加至所述阻塞队列的操作;
在等待预设时间后,再次执行将所述第一目标任务增加至所述阻塞队列的操作;
执行将所述第一目标任务丢弃的操作;
其中,所述第一目标任务包括未放入所述阻塞队列中的所述目标任务。
8.一种区块链记账装置,其特征在于,包括:
确定模块,用于分布式账本平台Fabric平台确定待记账处理的目标区块;
执行模块,用于所述Fabric平台基于动态线程池并行执行至少两个目标操作,和/或并行执行至少两类子操作,其中,所述至少两个目标操作分别对应不同的所述目标区块,所述至少两类子操作属于同一目标操作;
其中,所述动态线程池中的全部或部分线程用于执行至少两次所述目标操作,所述目标操作用于实现所述目标区块的记账处理。
9.一种电子设备,包括处理器和存储有计算机程序的存储器,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述区块链记账方法的步骤。
10.一种处理器可读存储介质,其特征在于,所述处理器可读存储介质存储有计算机程序,所述计算机程序用于使所述处理器执行权利要求1至7任一项所述区块链记账方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111183841.7A CN115981801A (zh) | 2021-10-11 | 2021-10-11 | 区块链记账方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111183841.7A CN115981801A (zh) | 2021-10-11 | 2021-10-11 | 区块链记账方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115981801A true CN115981801A (zh) | 2023-04-18 |
Family
ID=85966743
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111183841.7A Pending CN115981801A (zh) | 2021-10-11 | 2021-10-11 | 区块链记账方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115981801A (zh) |
-
2021
- 2021-10-11 CN CN202111183841.7A patent/CN115981801A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2454666B1 (en) | Fault tolerant batch processing | |
CN107621973B (zh) | 一种跨集群的任务调度方法及装置 | |
US10031775B2 (en) | Backfill scheduling for embarrassingly parallel jobs | |
CN113157710B (zh) | 区块链数据并行写入方法、装置、计算机设备及存储介质 | |
CN115237580B (zh) | 面向智能计算的流水并行训练自适应调整系统、方法 | |
CN115981801A (zh) | 区块链记账方法、装置、电子设备及存储介质 | |
CN111176847B (zh) | 物理核超多线程服务器上大数据集群性能优化方法及装置 | |
CN107247621B (zh) | 批处理任务的调度方法及装置 | |
CN114880101B (zh) | 一种ai处理器、电子部件及电子设备 | |
CN117453376B (zh) | 高通量计算的控制方法、装置、设备及存储介质 | |
CN112073187B (zh) | 一种基于非阻塞方式加速系统可信链构建的方法 | |
CN115242814A (zh) | 基于闲置存储量的云空间存储量分配方法、装置及介质 | |
CN117891744A (zh) | 分布式测试用例的方法及装置 | |
AU2014274491B2 (en) | Fault tolerant batch processing | |
CN115250228A (zh) | 部署服务功能链的方法、装置和系统 | |
CN117688047A (zh) | 数据查询方法、装置和算力网络 | |
CN117408703A (zh) | 交易执行方法、装置和区块链系统 | |
CN115729704A (zh) | 算力资源分配方法、装置及计算机可读存储介质 | |
Xu | Deadline-aware Job and Task Scheduling in Cloud Environment | |
CN113487412A (zh) | 基于多渠道的共享服务隔离方法及装置 | |
WO2022093256A1 (en) | Provisioning of computational resources | |
CN117474552A (zh) | 交易执行方法、装置和区块链系统 | |
CN116703580A (zh) | 交易分发方法、节点和区块链系统 | |
CN115098223A (zh) | 容器实例的调度方法、装置和系统 | |
Tilley et al. | Rapid GUI Testing of iOS Apps |
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 |