CN116703580A - 交易分发方法、节点和区块链系统 - Google Patents

交易分发方法、节点和区块链系统 Download PDF

Info

Publication number
CN116703580A
CN116703580A CN202310494428.5A CN202310494428A CN116703580A CN 116703580 A CN116703580 A CN 116703580A CN 202310494428 A CN202310494428 A CN 202310494428A CN 116703580 A CN116703580 A CN 116703580A
Authority
CN
China
Prior art keywords
transaction
transactions
execution
group
node
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
Application number
CN202310494428.5A
Other languages
English (en)
Inventor
陶友贤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ant Blockchain Technology Shanghai Co Ltd
Original Assignee
Ant Blockchain Technology Shanghai Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Ant Blockchain Technology Shanghai Co Ltd filed Critical Ant Blockchain Technology Shanghai Co Ltd
Priority to CN202310494428.5A priority Critical patent/CN116703580A/zh
Publication of CN116703580A publication Critical patent/CN116703580A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q40/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes
    • G06Q40/04Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1074Peer-to-peer [P2P] networks for supporting data block transmission mechanisms
    • H04L67/1078Resource delivery mechanisms
    • H04L67/108Resource delivery mechanisms characterised by resources being split in blocks or fragments
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

一种交易分发方法、节点和区块链系统。该方法应用于区块链系统中第一节点包含的控制进程,第一节点还包含N个计算进程,包括:获取待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;将所述多个交易划分为M个交易组,并根据各个交易组中交易的交易费用确定各个交易组的分组费用,任一交易组的分组费用与执行该交易组中全部交易需要的实际时长呈正相关,M和N均为正整数,且M>N;根据分组费用将M个交易组分发至N个计算进程执行,使N个计算进程的任务预期费用趋于一致,任一计算进程的任务预期费用与该计算进程执行自身所接收交易组中的全部交易需要的实际时长呈正相关。

Description

交易分发方法、节点和区块链系统
技术领域
本说明书实施例属于区块链技术领域,尤其涉及一种交易分发方法、节点和区块链系统。
背景技术
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。用户可以通过区块链节点参与实现区块链的相关事务,例如,区块链系统中分别对应不同用户的多个区块链节点,可以基于同态加密、零知识证明等隐私技术针对某一节点的私有数据进行安全多方计算(Secure Multi-Party Computation,SMPC)。
发明内容
本说明书的目的在于提供一种交易分发方法、节点和区块链系统。
第一方面,提供了一种交易分发方法,应用于区块链系统中第一节点包含的控制进程,第一节点还包含N个计算进程,所述方法包括:
获取待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;
根据所述预执行读写集将所述多个交易划分为M个交易组,并根据各个交易组中交易的交易费用确定各个交易组的分组费用,其中,各个交易组中的交易互不相同,任一交易组的分组费用与执行该交易组中全部交易需要的实际时长呈正相关,M和N均为正整数,且M>N;
根据所述分组费用将所述M个交易组分发至所述N个计算进程执行,使所述N个计算进程的任务预期费用趋于一致,其中,各个计算进程接收到的交易组互不相同,任一计算进程的任务预期费用与该计算进程执行自身所接收交易组中的全部交易需要的实际时长呈正相关。
第二方面,提供了一种区块链系统中的第一节点,第一节点中包含控制进程和N个计算进程,所述控制进程用于:
获取待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;
根据所述预执行读写集将所述多个交易划分为M个交易组,并根据各个交易组中交易的交易费用确定各个交易组的分组费用,其中,各个交易组中的交易互不相同,任一交易组的分组费用与执行该交易组中全部交易需要的实际时长呈正相关,M和N均为正整数,且M>N;
根据所述分组费用将所述M个交易组分发至所述N个计算进程执行,使所述N个计算进程的任务预期费用趋于一致,其中,各个计算进程接收到的交易组互不相同,任一计算进程的任务预期费用与该计算进程执行自身所接收交易组中的全部交易需要的实际时长呈正相关。
第三方面,提供了一种区块链系统,包括第一节点和第二节点,第一节点中包含控制进程和N个计算进程,其中:
第二节点用于向第一节点发送待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;
第一节点用于获取待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;根据所述预执行读写集将所述多个交易划分为M个交易组,并根据各个交易组中交易的交易费用确定各个交易组的分组费用,其中,各个交易组中的交易互不相同,任一交易组的分组费用与执行该交易组中全部交易需要的实际时长呈正相关,M和N均为正整数,且M>N;以及,根据所述分组费用将所述M个交易组分发至所述N个计算进程执行,使所述N个计算进程的任务预期费用趋于一致,其中,各个计算进程接收到的交易组互不相同,任一计算进程的任务预期费用与该计算进程执行自身所接收交易组中的全部交易需要的实际时长呈正相关。
根据本说明书一个或多个实施例的第四方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第一方面中任一项所述的方法。
根据本说明书一个或多个实施例的第五方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面中任一项所述方法的步骤。
通过上述实施例,区块链系统中的第一节点可以包含的控制进程和N个计算进程,所述控制进程可以获取待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;进而根据所述预执行读写集将所述多个交易划分为M个交易组,并根据各个交易组中交易的交易费用确定各个交易组的分组费用,其中,各个交易组中的交易互不相同,任一交易组的分组费用与执行该交易组中全部交易需要的实际时长呈正相关,M和N均为正整数,且M>N;再根据所述分组费用将所述M个交易组分发至所述N个计算进程执行,使所述N个计算进程的任务预期费用趋于一致,其中,各个计算进程接收到的交易组互不相同,任一计算进程的任务预期费用与该计算进程执行自身所接收交易组中的全部交易需要的实际时长呈正相关。
任一交易的交易费用与该交易的交易逻辑有关,而交易逻辑决定了执行该交易所需的资源,因此,可以认为执行交易所需的资源决定了交易费用。例如,执行不同的指令所需要消耗的资源(存储资源、计算资源、网络资源等),任一交易的gas值(或称燃料、激励、报酬等)可以根据该交易执行过程中执行的指令进行计算。可以理解的是,同一交易在预执行阶段和实际执行阶段会执行相同的指令,因而会消耗相同数量的资源,所以任一交易的预执行和实际执行具有相同的交易费用。
由于任一交易组的分组费用与执行该交易组中全部交易需要的实际时长(即下文分组实际耗时)呈正相关,并且基于M个交易组的分组费用将其分发至N个计算进程后,任一计算进程的任务预期费用与该计算进程执行自身所接收交易组中的全部交易需要的实际时长(即下文任务实际耗时)呈正相关,所以该方式能够准确预估各个计算进程的任务实际耗时,而通过合理分发各个交易组可以使得所述N个计算进程的任务预期费用趋于一致,从而确保各个计算进程的任务实际耗时尽量相同,即各个计算进程的结束时刻进行接近,尽量避免部分计算进程消耗较长时间等待其他计算进程执行完毕。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是一示例性实施例提供的一种区块链系统的示意图。
图2是一示例性实施例提供的一种交易分发方法的流程图。
图3是一示例性实施例提供的一种区块链系统中任意两个节点的结构示意图。
图4是一示例性实施例提供的一种交易之间依赖关系的示意图。
图5是一示例性实施例提供的另一种交易之间依赖关系的示意图。
图6是一示例性实施例提供的一种区块链系统中的第一节点的结构示意图。
图7是一示例性实施例提供的一种设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
图1是一示例性实施例提供的一种区块链系统的示意图。如图1所示,区块链系统是通过多个节点(Node)来建立的分布式网络,其包含任意两个节点间通过点对点(Peer-to-Peer,P2P)网络实现在应用层的通信连接,例如其包含的节点n1~节点n5中的任意两个节点间均可通过P2P网络实现在应用层的通信连接。区块链系统利用链式区块结构构造的去中心化(或称为多中心化)的分布式账本,保存于分布式的区块链系统中的每个节点(或大多节点上,如共识节点)上,因此区块链系统需要解决去中心化(或多中心化)的多个节点上各自的账本数据的一致性和正确性的问题。鉴于此,区块链系统的每个节点上都运行着区块链程序,在一定容错需求的设计下,通过共识(consensus)机制保证所有忠诚节点具有相同的交易,从而保证所有忠诚节点对相同交易的执行结果一致,将交易打包成区块并基于相同交易的执行结果更新世界状态。其中当前主流的共识机制包括但不限于:工作量证明(Proof of Work,POW)、股权证明(Proof of Stake,POS)、实用拜占庭容错(PracticalByzantine Fault Tolerance,PBFT)算法,蜜獾拜占庭容错(HoneyBadgerBFT)算法等等。
所述区块链系统中的区块链节点可以执行区块链交易。区块链节点可以包括多个计算进程,从而节点可以通过这些进程并发执行交易。例如,针对待执行的多个交易,区块链节点可以将这些交易分发至多个计算进程,以由各个进程分别执行自身接收到的交易,从而实现所述多个交易的并发执行,提升区块链交易的整体执行效率。
由于不同区块链交易的内容往往不同,因此执行任意两个交易所需要的时间(下称执行耗时)可能并不相等。若简单按照负载均衡的原则为各个进程分发相同数量的交易,则由于不同区块链交易的执行耗时并不相同,可能会限制所述多个交易的整体执行效率和区块链节点的资源利用率。例如,在计算进程A将自身接收到的交易执行完毕后,若计算进程B尚未执行完毕,则区块链节点需要等待计算进程B执行完毕后才能够将计算进程A和B的执行结果统一提交。在上述等待过程中,计算进程A可能无法执行其他交易或事务。可见,上述交易分发方式使得各个线程完成交易的时刻差异较大,不仅导致区块链交易的整体执行效率较低,影响了执行结果的上链效率,而且一定程度上浪费了先执行完毕的计算进程的计算资源。
为解决上述问题,相关技术基于预执行交易得到的预执行耗时(对交易进行预执行所需要的时间)对交易进行分组并确定交易分组的分组预期耗时(即执行完毕该交易组中全部交易预计需要的时间),进而在交易分组的分发过程中引入分组预期耗时这一因素,以尽量避免先完成计算的计算进程等待(即使各个计算进程结束时间尽量接近)。可见,相关技术方案是将交易的预执行耗时视为其实际执行耗时,即认为任一交易的实际执行耗时与其预执行耗时相同,并以此为依据进行交易分组和交易组分发。
实际上,对于任一交易组中的多个交易而言,在被划分至该交易组之前往往被分别预执行。其中,在任一交易预执行之前,预执行过程中具体需要读取哪些状态数据尚不知晓,因此计算进程需要在预执行过程中(临时)读取所需的状态数据,并根据读取行为生成相应的读写集。
而对于接收到所述任一交易组的计算进程而言,由于对各个交易的实际执行发生在预执行之后,所以在实际执行该交易组中的各个交易之前,通常会按照这些交易的读写集批量读取相应的状态数据(以用于后续的实际执行过程),即在实际执行任一交易组中的全部交易之前会对这些交易所需的状态数据进行预读取。可见,相对于预执行,在将所述各个交易划分至任一交易组后,可以预先、批量读取实际执行所需的状态数据再执行所述各个交易,使得其中任一交易的实际执行耗时(对交易进行实际执行所需要的时间)通常小于相应的预执行耗时,进而实际执行该交易组中全部交易所消耗的时间(下称分组实际耗时)往往也小于该交易组的分组预期耗时。换言之,在实际执行之前存在预读取的情况下,交易组的分组实际耗时并不等于其分组预期耗时。因此,此时采用相关技术方案按照各个交易组的分组预期耗时分发各个交易组,将难以确保多个计算进程分别执行自身所接收交易分组中的全部交易需要的时长(下称任务实际耗时)趋于一致,从而难以确保各个计算进程的结束时刻较为接近,甚至各个计算进程的结束时刻可能相差较大。
针对相关技术存在的上述问题,本方案提出一种新的交易分发方案加以解决:不再使用交易的预执行耗时和交易组的分组预期耗时,而是采用交易的交易费用(执行交易需要消耗的费用)和交易组的分组费用(与执行交易组中各个交易需要消耗的时间呈正相关)作为分发依据,以对各个交易组的分组实际耗时和各个计算进程的任务实际耗时进行更准确的预估,从而确保各个计算进程的结束时刻更接近。下面结合附图对交易分发方案进行详细说明。
图2是一示例性实施例提供的一种交易分发方法的流程图。所述方法应用于区块链系统中第一节点包含的控制进程。所述第一节点可以为区块链系统中的任一区块链节点,示例性的,第一节点可以为发起共识提议的节点(如主节点),或者也可以为该节点之外的其他区块链节点(如从节点)。无论是所述区块链系统中的主节点还是从节点,各个节点均可实现为任何具有计算/处理能力的装置、平台、设备或设备集群。其中,第一节点中除了包含所述控制进程之外还可以包含N(N为大于1的正整数)个计算进程(即多个计算进程)。如图2所示,所述方法可以包括下述步骤202-206。
步骤202,获取待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用。
如前所述,第一节点可以为所述区块链系统中的主节点或者从节点。第一节点在所述区块链系统中扮演的角色不同,该节点获取待执行的多个交易以及各个交易的预执行信息的方式也有所不同。
以图1所示区块链系统中的任意两个节点:节点n1和节点n2为例,两节点中可以分别运行多个进程以提供多种服务。两节点的结构示意图可参见图3,节点n1和节点n2各自运行用于提供接入服务的接入进程(如节点n1中运行的接入进程1和节点n2中运行的接入进程2,下述进程编号与此类似,不再赘述)、用于提供缓存服务的缓存进程、用于提供预执行服务的预执行进程、用于提供网络服务的网络进程、用于提供共识服务的共识进程、用于提供区块管理服务的控制进程和用于提供存储服务的存储进程。此外,作为从节点的节点n1还可以运行用于提供计算服务的多个计算进程,如计算进程11、计算进程12和计算进程13。
其中,本说明书所述进程是指应用中具有一定独立功能的程序关于一个数据集合的一次运行活动,即进程是计算机中通过由CPU顺序执行应用程序中的指令而进行的一个过程,而每个进程在创建时被分配自己的内存地址空间。任一节点中的多个进程可以为多个计算设备或虚拟计算节点中的多个进程。此外需要说明的是,本说明书实施例提供的方案并不局限于主从架构的区块链系统;换言之,本方案所述的节点n1和节点n2可以为所述区块链系统中的任意两个区块链节点。
不妨假设所述节点n2和节点n1分别为所述区块链系统中的主节点和从节点。任一节点中的接入进程可以用于接收来自用户设备的交易,并调用缓存进程将其接收的交易加入待处理的交易队列中进行缓存。
节点n2的预执行进程2可以调用缓存进程2来实现从待处理的交易队列中按顺序读取其缓存的交易并对该交易进行验证,例如验证用户设备对该交易的签名,并将经验证的交易返回给缓存进程2。此外,节点n2还可以通过其网络进程2向其余节点的网络进程广播其缓存进程2中存储的经验证的交易;从而,节点n1通过其网络进程1接收的来自节点n2的交易,可以由其缓存进程1缓存加入到待处理的交易队列中。由此节点n1的缓存进程1通过其内存缓存的待处理的交易队列,不仅包括通过其接入进程1接收的交易,还包括通过其网络进程1接收的来自其他节点(如节点n2)的交易。
节点n2的预执行进程2也可以调用缓存进程2从待处理的交易队列中按顺序读取其缓存的交易,并至少对来自与节点n2连接的用户设备的交易进行验证。此外节点n2的预执行进程2还可以对其从缓存进程2按顺序接收的交易进行预执行以得到该交易的预执行信息,其中任一交易的预执行信息可以包括预执行读集(对应于交易执行过程中涉及的数据读取操作)、预执行写集(对应于交易执行过程中涉及的数据写入操作)、交易费用(即执行该交易所需的手续费gas值)、资源消费信息(用于表征执行该交易所需消耗的数字资源/计算资源的数量)等。其中,本说明书所述的预执行读写集可以包括所述预执行读集和/或所述预执行写集。进而节点n2的预执行进程2还可以在其每完成对一批交易的预执行后,将该批交易的预执行信息返回给缓存进程2以缓存到待共识的交易队列中进行缓存。
需要说明的是,任一交易的交易费用与该交易的交易逻辑有关,而交易逻辑决定了执行该交易所需的资源,因此,可以认为执行交易所需的资源决定了交易费用。例如,执行不同的指令所需要消耗的资源(存储资源、计算资源、网络资源等),任一交易的gas值(或称燃料、激励、报酬等)可以根据该交易执行过程中执行的指令进行计算。可以理解的是,同一交易在预执行阶段和实际执行阶段会执行相同的指令,因而会消耗相同数量的资源,所以任一交易的预执行和实际执行具有相同的交易费用。换言之,对于交易逻辑确定的任一区块链交易而言,其交易费用也是确定的,无论是预执行还是实际执行,都需要消耗相同的该交易费用。
另外,发明人发现,任一交易的执行耗时通常由指令执行耗时和存储交互耗时构成,所述指令执行耗时即由前述交易费用所决定,而所述存储交互耗时由执行过程中与存储有关的交互过程(如前述读写集对应的数据读取和写入过程)所决定,显然,由于实际执行交易组中各个交易之前会预读取相应的状态数据,所以预执行和实际执行分别对应的存储交互耗时并不相同,而这正是导致任一交易组分组预期耗时与其分组实际耗时不同的原因。可见,在计算进程实际执行交易组中的各个交易之前会预读取这些交易所需的状态数据的场景下,使用费用(即交易费用和分组费用)估算(任一交易和交易组中全部交易)实际执行耗时相对于使用耗时(预执行耗时和分组预期耗时)估算(任一交易和交易组中全部交易)实际执行耗时显然更准确,从而为本说明书所述实施例提供了事实依据。
实际上,通常情况下任一交易预执行耗时和实际执行耗时分别与该交易的交易费用呈正相关。如对于交易1和交易2,若交易1的交易费用大于交易2的交易费用,则通常存在下述关系:交易1的预执行耗时大于交易2的预执行耗时,且交易1的实际执行耗时大于交易2的实际执行耗时。
在第一节点为所述区块链系统中的从节点的情况下,第一节点可以通过多种方式获取所述待执行的多个交易以及各个交易的预执行信息。下面以节点n1为例进行说明。
在一实施例中,所述控制进程可以从主节点发起且已通过共识的提议中获取多个交易以及各个交易的预执行信息。例如,在完成对交易的预执行后,节点n2可以针对其中的多个交易发起提议,以便由区块链系统中的多个共识节点(如所述主节点和多个从节点)参与针对该提议的共识,并在共识通过后将所述多个交易打包成区块上链。其中,节点n2发起的所述提议中可以包含所述多个交易(即步骤202所述的待执行的多个交易)以及各个交易的预执行信息,其中任一交易的预执行信息至少包括该交易的预执行读写集和交易费用。具体的,节点n2可以通过网络进程2将所述提议传递(如广播)至区块链系统中的其他节点,如自身对应的各个从节点。相应的,节点n1在通过网络进程1接收到所述共识提议后,可以通过共识进程1参与针对该提议的共识过程。具体共识过程可以参见相关技术中的记载,此处不再赘述。因为所述提议中包含多个交易和各个交易的预执行信息,所以该提议通过同时即表明所述多个交易及其预执行信息通过共识,所以在所述提议被区块链系统中的各个共识节点共识通过的情况下,节点n1可以通过控制进程1直接从已通过共识的所述提议中获取交易及其预执行信息。
当然,作为主节点的节点n2也有可能是作恶节点,如可能被病毒入侵或可能被其他设备劫持等,因此提议中包含的各个交易的预执行信息可能并非其实际预执行信息,如某一交易的交易费用可能并非其真实费用(遭到篡改)等。对此,节点n1也可以在从所述提议中获取到各个交易的预执行信息的情况下,再使用自身包含的预执行进程1对各个交易进行预执行以得到相应的预执行信息,并将该预执行信息与从所述提议中获取的预执行信息进行比较:对于任一交易而言,节点n1可以在提议中包含的该交易的预执行信息与节点n1预执行该交易得到的预执行信息一致的情况下认可所述预执行信息。当然,在二者不同的情况下,节点n1可以以自身预执行得到的预执行信息为准。
在另一实施例中,第一节点中还可以包含预执行进程,此时所述控制进程可以从主节点发起且已通过共识的提议中获取多个交易,并调用所述预执行进程对获取到的各个交易进行预执行以得到相应的预执行信息。例如,作为主节点的节点n2可以在发起的所述提议中包含所述多个交易而不包含相应的预执行信息。在这种情况下,作为从节点的节点n1可以在所述提议共识通过后,通过控制进程1从已通过共识的所述提议中获取待执行的多个交易,并调用预执行进程1对获取到的所述交易进行预执行以得到相应的预执行信息。在该方式下,发起提议的节点n2可以不对所述多个交易进行预执行。换言之,节点n2可以通过缓存进程2从待处理的交易队列中获取待共识的多个交易,并直接发起针对这些交易的提议,由各个从节点在提议通过后分别预执行所述多个交易,从而一定程度上减轻主节点发起提议前的准备工作,降低其提议发起过程的工作量。另外,因为该方案中各个交易的预执行信息由节点n1自身的预执行进程1对交易进行预执行得到,所以节点n1自然认可该信息的真实性。
在通过上述方式获取到待执行的多个交易以及各个交易的预执行信息(并确认信息可信)的情况下,第一节点可以以分组的方式执行上述各个交易。
步骤202,根据所述预执行读写集将所述多个交易划分为M个交易组,并根据各个交易组中交易的交易费用确定各个交易组的分组费用,其中,各个交易组中的交易互不相同,任一交易组的分组费用与执行该交易组中全部交易需要的实际时长呈正相关,M和N均为正整数,且M>N。
在一实施例中,所述多个交易之间可能存在依赖关系,因此控制进程可以基于交易之间的依赖关系划分交易组。例如,控制进程可以先根据所述预执行读写集确定各个交易之间的依赖关系,再基于所述依赖关系将所述多个交易划分为M个交易组,其中,存在依赖关系的多个交易被划分至同一交易组,不存在依赖关系的多个交易被分别划分至不同的交易组。需要说明的是,上述依赖关系可以具有传递性,如交易1→交易2(即交易1依赖交易2,下同),交易2→交易3,则可以认为交易1→交易3(交易1和交易2之间存在直接依赖、交易2和交易3之间存在直接依赖,而交易1和交易3之间存在间接依赖),因此可以将交易1、交易2和交易3划分至同一交易组。由于划分后的各个交易组可以被独立分发并执行,所以通过上述方式将存在依赖关系的多个交易划分至同一交易组,能够确保存在依赖关系的各个交易被同一计算进程执行,从而有助于确保各个交易被按序执行,一定程度上避免执行出错。而将不存在依赖关系的多个交易分别划分至不同的交易组,能够使得相互无关的多个交易被并发执行,从而提升交易的执行效率。
其中,任一交易的预执行读写集可以包括预执行读集和/或预执行写集,所述预执行读集和预执行写集分别用于表征针对状态数据的读取操作和写入操作(即所述预执行读集用于表征针对状态数据的读取操作,所述预执行写集用于表征针对状态数据的写入操作)。基于此,在任一交易的预执行读写集包括针对任一状态数据的预执行写集(即表明在执行所述任一交易的过程中需要执行针对所述任一状态数据的写入操作)的情况下,所述控制进程可以在获取到的所述预执行读写集中确定所述任一状态数据的全部预执行读集和预执行写集对应的各个其他交易。例如,在通过前述方式获取到的预执行读写集中存在针对任一状态数据的某一预执行读集的情况下,可以确定该预执行读集对应的交易(即在执行该交易的过程中会执行针对所述任一状态数据的读取操作,从而产生所述任一预执行读集,该交易为区别于所述任一交易的其他交易),所述预执行写集对应的其他交易的确定方式与此类似,不再赘述。
另外可以理解的是,与任何交易都不存在依赖关系的任一交易,通过上述方式将无法确定出其对应的“其他交易”——所述任一交易会被单独划分至一个交易组(即该交易组中仅包含这一个交易)。所述任一交易可以满足下述之一的条件:任一交易的写入操作涉及的状态数据不会被所述多个交易中的其他交易读取或写入、任一交易的读取操作涉及的状态数据不会被所述多个交易中的其他交易写入、任一交易的读取操作涉及的状态数据仅被所述多个交易中的其他交易所读取等。当然,“任一状态数据被任一交易读取或写入”,应当被理解为“在计算进程执行所述任一交易的过程中,会执行针对所述任一数据的读取操作或写入操作”,特此说明。
进一步的,所述控制进程可由基于所述任一交易和所述各个其他交易的执行顺序,确定所述任一交易和所述各个其他交易之间的依赖关系。其中,各个交易的执行顺序可以通过前述提议中记录的交易信息确定,如所述提议中可以记录有所述多个交易的交易序号,该序号可以按照从大小到小或者从小到大的顺序表征各个交易执行的先后顺序。所述交易序号也可以包含在前述预执行信息中,不再赘述。由上述方式可见,若任一交易涉及针对任一状态数据的写入操作,则涉及该状态数据的写入操作和读取操作的各个交易均会与所述任一交易划分至同一交易组。
示例性的,假设区块链系统中部署有智能合约Contract_A,该合约存在9个合约参数(即下述k1~k9),通过前述方式确定出8个交易(即下述Tx1~Tx8),若通过上述方式确定出各个交易的依赖关系为Tx2→Tx1(即Tx2依赖Tx1,下同),Tx2→Tx3,Tx8→Tx7→Tx6,Tx5与其他交易不存在依赖关系。基于上述依赖关系,控制进程可以将上述8个交易划分至4个交易组(即下述Tx_group1~Tx_group4),各个交易组的具体划分情况如下:
Tx_group1:<Tx1:40gas,Tx2:50gas>,w_set<a.k1,a.k2,a.k3>r_set<a.k1,a.k2,a.k3>
Tx_group2:<Tx3:10gas,Tx4:20gas>,w_set<a.k4,a.k5>r_set<a.k4,a.k5>
Tx_group3:<Tx5:100gas>,w_set<a.k6>r_set<a.k6>
Tx_group4:<Tx6:40gas,Tx7:50gas,Tx8:60gas>,w_set<a.k7,a.k8>r_set<a.k7,a.k8,a.k9>
以Tx_group1为例,首句代码Tx_group1:<Tx1:40gas,Tx2:50gas>,w_set<a.k1,a.k2,a.k3>r_set<a.k1,a.k2,a.k3>表明:Tx1的交易费用为40gas,Tx2的交易费用为50gas,Tx1和Tx2涉及针对交易参数k1、k2和k3的写入操作,且Tx1和Tx2涉及针对交易参数k1、k2和k3的读取操作,基于此可以确定Tx2→Tx1,所以将Tx1和Tx2划分至同一交易组Tx_group1内。由上述代码可知,Tx1~Tx8的划分结果为[1,2]、[3,4]、[5]、[6,7,8]。
由上述划分结果可知,对于调用同一合约的各个交易,其中涉及相同合约参数(存在依赖)的各个交易将被划分至同一交易组、涉及不同合约参数的(不存在依赖)的交易被划分在不同的交易组。需要说明的是,上述实施例只是由智能合约的合约参数为例进行说明,本说明书实施例对于状态数据类型、所述多个交易的数量以及交易所涉及状态数据的数量等并不进行限定。
如前所述,任一交易组的分组费用与执行该交易组中全部交易需要的实际时长(即该交易组的分组实际耗时)呈正相关。需要说明的是,由于该交易组中各个交易之间可能并非简单的单链路(串行)依赖关系,所以所述分组实际耗时可能并非该交易组中各个交易的实际执行耗时的简单累加。基于此,对于上述方式划分得到的任一交易组,控制进程可以根据该交易组中各个交易的交易费用确定该交易组的分组费用。具体的,可以通过多种方式实现。
在一实施例中,在所述任一交易组中仅包含一个交易的情况下,所述控制进程可以将该交易的交易费用确定为所述任一交易组的分组费用。显然,任一交易组中仅包含一个交易时,计算进程执行该交易组的过程即为执行该交易的过程,因此该交易的交易费用即可作为所述任一交易组的分组费用。承接于前述实施例,Tx_group3中仅包含Tx5这一个交易,所以可以将Tx5的交易费用作为Tx_group3的分组费用。
在另一实施例中,在所述任一交易组中包含多个交易的情况下,所述控制进程可以根据所述多个交易之间的依赖关系确定所述多个交易构成的至少一个单向执行链路,以及,确定各个单向执行链路的单链路预期费用,并将其中最大的单链路预期费用确定为该交易组的分组费用;其中,任一单向执行链路中的各个交易之间串行执行,任一单向执行链路的单链路预期费用为该单向执行链路中各个交易的交易费用之和。在该方式中,可以通过比较交易组中各个单向执行链路的单链路预期费用准确确定出交易组的分组费用。
例如,承接于前述实施例中的Tx_group4,该交易组中所包含各个交易(即交易Tx6~Tx8)之间的依赖关系可以参见图4。如图4所示,Tx_group4中的各个交易构成一个单向执行链路L{Tx8→Tx7→Tx6},该链路的单链路预期费用即为Tx6、Tx7和Tx8的交易预期费用之和40gas+50gas+60gas=150gas。由于Tx_group4中仅存在这一个单向执行链路L,所以可以将该单向执行链路L的单链路预期费用作为Tx_group4的分组费用。
再例如,假设某一交易组Tx_groupi中包含7个存在依赖关系的交易(即交易A~D),各个交易之间的依赖关系如图5所示。如图5所示的各个交易可以构成两条单向执行链路:L1{G→F→C→B→A}和L2{G→F→E→D→B→A},由于单向执行链路中的各个交易之间串行执行,所以链路L1的单链路预期费用T1为构成链路L1的各个交易的交易费用之和,即T1=20gas+30gas+80gas+10gas+60gas=200gas,链路L2的单链路预期费用T2为构成链路L2的各个交易的交易费用之和,即T2=20gas+30gas+50gas+15us+10gas+60gas=185us。显然,T1>T2,所以此时可以将T1作为Tx_groupi的分组费用。
在又一实施例中,在所述任一交易组中包含多个交易的情况下,所述控制进程可以根据所述多个交易之间的依赖关系确定所述多个交易构成的串行交易段和/或并行交易段,并根据确定出的各个交易段所包含交易的交易费用确定所述任一交易组的分组费用;其中,任一交易段包含至少一个交易,包含多个交易的任一交易段中的各个交易之间串行执行,所述串行交易段和并行交易段分别包含的交易之间串行执行,具有相同起点和/或相同终点的多个并行交易段分别包含的交易之间并行执行,且所述多个并行交易段中的最长并行交易段所包含全部交易的交易费用之和最大,所述任一交易组的分组费用为下述之和:各个串行交易段分别包含的全部交易的交易费用,所述并行交易段中各个最长并行交易段分别包含的全部交易的交易费用。
如图4所示,Tx_group4中的各个交易仅构成一个串行交易段LS{Tx8→Tx7→Tx6},而不存在并行交易段,所以此时Tx_group4的分组费用可以为LS中全部交易的交易费用之和,40gas+50gas+60gas=150gas。
如图5所示,各个交易可以构成两个串行交易段LS1{B→A}和LS2{G→F},以及两个并行交易段LP1{C}和LP2{E→D}。可以理解的是,任一交易段中的各个交易之间串行执行,LS1、LS2之间串行执行,LS1和LS2二者与LP1和LP2中任一交易段之间串行执行。对于并行交易段LP1和LP2,其中LP1中全部交易(即交易B)的交易费用之和为80gas、LP1中全部交易(即交易D和E)的交易费用之和为65us,所以LP1为Tx_groupi中的最长并行交易段。基于此,Tx_groupi的分组费用可以为:LS1和LS2中全部交易的交易费用与LP1包含的全部交易的交易费用,即Tx_groupi的分组费用为(20gas+30gas)+(10gas+60gas)+(80gas)=200gas。
需要说明的是,图4和图5所示实施例仅是示例性的,本说明书实施例对于任一交易组中各个交易构成的单向执行链路的数量、串行交易段和并行交易段的数量以及各个链路和交易段中交易的数量及其具体依赖关系并不进行限制。
通过上述方式,可以确定出被划分的M个交易组中各个交易组的分组费用。显然,任一交易组的分组费用与实际执行该交易组中各个交易所需要消耗的时间(即分组实际耗时)呈正相关,因此可以作为后续交易组分发的依据。即,控制进程可以根据所述分组费用将所述M个交易组分发至所述N个计算单元执行。
步骤206,根据所述分组费用将所述M个交易组分发至所述N个计算进程执行,使所述N个计算进程的任务预期费用趋于一致,其中,各个计算进程接收到的交易组互不相同,任一计算进程的任务预期费用与该计算进程执行自身所接收交易组中的全部交易需要的实际时长呈正相关。
通过上述实施例,区块链系统中的第一节点可以包含的控制进程和N个计算进程,所述控制进程可以获取待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;进而根据所述预执行读写集将所述多个交易划分为M个交易组,并根据各个交易组中交易的交易费用确定各个交易组的分组费用,其中,各个交易组中的交易互不相同,任一交易组的分组费用与执行该交易组中全部交易需要的实际时长呈正相关,M和N均为正整数,且M>N;再根据所述分组费用将所述M个交易组分发至所述N个计算进程执行,使所述N个计算进程的任务预期费用趋于一致,其中,各个计算进程接收到的交易组互不相同,任一计算进程的任务预期费用与该计算进程执行自身所接收交易组中的全部交易需要的实际时长呈正相关。
任一交易的交易费用与该交易的交易逻辑有关,而交易逻辑决定了执行该交易所需的资源,因此,可以认为执行交易所需的资源决定了交易费用。例如,执行不同的指令所需要消耗的资源(存储资源、计算资源、网络资源等),任一交易的gas值(或称燃料、激励、报酬等)可以根据该交易执行过程中执行的指令进行计算。可以理解的是,同一交易在预执行阶段和实际执行阶段会执行相同的指令,因而会消耗相同数量的资源,所以任一交易的预执行和实际执行具有相同的交易费用。
由于任一交易组的分组费用与执行该交易组中全部交易需要的实际时长(即下文分组实际耗时)呈正相关,并且基于M个交易组的分组费用将其分发至N个计算进程后,任一计算进程的任务预期费用与该计算进程执行自身所接收交易组中的全部交易需要的实际时长(即下文任务实际耗时)呈正相关,所以该方式能够准确预估各个计算进程的任务实际耗时,而通过合理分发各个交易组可以使得所述N个计算进程的任务预期费用趋于一致,从而确保各个计算进程的任务实际耗时尽量相同,即各个计算进程的结束时刻进行接近,尽量避免部分计算进程消耗较长时间等待其他计算进程执行完毕。
可以理解的是,在划分后的交易组的数量(即M)大于可执行交易的计算进程的数量(即N)的情况下,对所述M个任务分组的分发情况将影响所述多个交易的整体执行效率,即影响所述多个交易全部执行完毕的整体耗时。在本说明书方案中,可以采用多种方式分发所述M个交易组。
在一实施例中,所述控制进程可以将分组费用最大的N个交易组一一对应的下发至所述N个计算进程,以便所述N个计算进程分别执行自身接收到的交易组中的各个交易。在任一计算进程将接收到的交易组中的各个交易执行完毕后,控制进程可以将当前时刻尚未分发且分组费用最大的交易组发送至所述任一计算进程,直至分组费用最小的交易组被发送至相应的计算进程后停止分发。可以理解的是,对于分组费用最大的N个交易组而言,各个交易组的分组费用的大小可能并不完全相同,而且所述N个计算进程的性能、可调用资源大小等也可能并不一致,因此各个计算进程将接收到的交易执行完毕的时刻也可能并不相同。对此,控制进程可以将所述M个交易组按照分组费用由大到小的顺序逐一分发给空闲的计算进程,即在任一时刻,哪个计算进程将自身接收到的交易组中的交易执行完毕(完毕后该计算进程即处于空闲状态),控制进程就将当前时刻分组费用最大的交易组继续发送至该进程执行。通过该方式,可以根据各个计算进程的实际工作状态实时调整计算进程的分发策略,确保在M个交易组未被分发完毕时,尽量缩短各个计算进程在执行一个交易组中的交易完成后的等待时长(即尽量缩短空闲状态的持续时长),从而提升计算进程的利用率和M个交易组中全部交易的整体执行效率。
承接于前述实施例,在Tx1~Tx8的划分结果为[1,2]、[3,4]、[5]、[6,7,8]的情况下,根据各个交易的交易费用可知,Tx_group1~Tx_group4的分组费用分别为:80gas、30gas、100gas和150gas。基于此,控制进程可以按照分组费用的大小对Tx_group1~Tx_group4进行排序如下:Tx_group4、Tx_group3、Tx_group1、Tx_group2。不妨假设第一节点包含两个计算进程(即所述N=2),如CU1和CU2。在这种情况下,控制进程可以先将Tx_group4和Tx_group3分别发送至CU1和CU2(或者也可以分别发送至CU2和CU1),以由CU1和CU2分别执行Tx_group4和Tx_group3包含的交易。100gas(或100gas左右)后,若CU2执行Tx_group3中的交易完成(此时CU1还在执行Tx_group4中的交易),则控制进程可以将Tx_group1(此时分组费用最大的交易组)发送至CU2,以由CU2执行其中包含的交易。50gas后,CU1执行Tx_group4中的交易完成(此时CU2还在执行Tx_group1中的交易),则控制进程可以将Tx_group2发送至CU1,以由CU1执行其中包含的交易。通过该方式,控制进程可以交替的将Tx_group2和Tx_group4分发至CU1、将Tx_group1和Tx_group3分发至CU2,由各个交易组的分组费用可知,在不考虑其他因素影响的情况下,CU1和CU2可以在同一时刻将自身接收到的最后一个交易组中的交易执行完毕。
在另一实施例中,控制进程可以将所述N、M和各个交易组的分组费用输入算法模型进行处理,并接收所述算法模型基于贪心算法(greedy algorith,又称贪婪算法)输出的所述M个交易组与所述N个计算进程之间的目标对应关系,以及,按照所述目标对应关系将所述M个交易组分别发送至相应的计算进程,其中,任一交易组被分发至其对应的计算进程。所述算法模型中可以预先写入贪心算法的分配逻辑,使得该模型可以将各个交易组的分组费用作为依据将各个交易组分别分发至相应的交易组。
可以理解的是,所述M个交易组与所述N个计算进程之间的目标对应关系可以用于指导控制进程分发所述M个交易组,即可以将任一交易组发送至根据所述目标对应关系确定出的(与该交易组相对应的)计算进程,以由该计算进程执行该交易组中包含的各个交易。仍以前述Tx_group1~Tx_group4为例,所述算法模型输出的目标对象关系可以包括:Tx_group1和Tx_group3对应于CU2、Tx_group2和Tx_group4对应于CU1。通过该方式,控制进程可以将Tx_group1和Tx_group3发送至CU2,将Tx_group2和Tx_group4发送至CU1。同样的,CU1和CU2可以在同一时刻将自身接收到的交易组中的各个交易执行完毕。
需要说明的是,对于任一交易组而言,其分组费用可以由其中各个交易的交易费用和相互之间的依赖关系所决定;而对于任一计算进程而言,由于其通常按照串行顺序依次执行各个交易组(中的任务),所述其任务预期费用可以等于该计算进程接收到的各个交易组的分组费用之和。
可见,通过上述方式分发所述M个交易组,能够使所述N个计算进程的任务预期费用趋于一致,从而确保N个计算进程的任务实际耗时趋于一致。其中,所述N个计算进程的任务预期费用可能相同或者相互接近,如任意两个计算进程的任务预期费用的差值不超出预设的费用阈值、任意两个计算进程的任务预期费用的差值不超出(所述M个交易组对应的)最小分组费用等,不再赘述。
实际上,将任一交易组发送至任一计算进程的过程中,需要控制进程读取本地(如前述内存中)保存的、属于所述任一交易组的各个交易,然后通过预设方式将所述各个交易发送至所述任一计算进程——这一过程即为交易组的调度过程。在一实施例中,控制进程可能需要向同一计算进程发送多个交易组,此时,为了提升交易组的发送效率,控制进程可以将所述多个交易组统一调度至所述任一计算进程。通过该方式,只需要一次调度过程就能够将多个交易组统一(一次性)调度至相应的交易组,相对于逐一调度,显著减少了交易组的调度次数和调度费用,有助于提升待执行的全部交易的整体执行效率。
如前所述,任一计算进程在实际执行任一交易组中的各个交易之前,可以预读取相应的状态数据。例如,针对自身接收到的任一交易组中的各个交易,任一计算进程可以根据各个交易的预执行读写集批量读取相应的状态数据(即所述各个交易的实际执行阶段所需的状态数据),并利用这些状态数据实际执行所述各个交易。换言之,针对分发至任一计算进程的任一交易组及其中的各个交易,所述各个交易的预执行读写集被所述任一计算进程用于批量读取相应的状态数据,读取到的所述状态数据被所述任一计算进程用于执行所述各个交易。其中,所述预执行读写集可以以key-value键值对的形式记录在第一节点的所述节点设备的缓存中,此时所述计算进程可以从缓存中读取各个key,并到相应的存储空间(如区块链节点的本地数据库)批量读取相应的状态数据作为value置于所述缓存中的合适位置,以便后续实际执行时可以从缓存中快速读取这些状态数据。可以理解的是,通过批量预读取各个交易的状态数据,在实际执行交易组中各个交易的过程中无需临时读取状态数据,从而可以大幅减少前述存储交互耗时,进而使得该交易组的分组实际耗时小于分组预期耗时,进而使该计算进程的任务实际耗时小于任务预期耗时,有助于更准确的确保该场景下各个计算进程尽量同时结束计算。
在一实施例中,控制进程可以按照各个交易之间的依赖关系将所述多个交易划分至M个交易组。针对包含多个交易的交易组,控制进程可以按照所述多个交易之间的依赖关系执行所述各个交易,其中,对于第一交易及其所依赖的第二交易,在执行第二交易完成后再执行第一交易;对于依赖于同一交易或被同一交易所依赖的第三交易和第四交易,若第三交易和第四交易互相不依赖,则通过不同的线程并发执行第三交易和第四交易。如图5所示,第一交易和第二交易可以分别为交易B和交易A,此时,接收到Tx_groupi的计算进程可以先执行交易A再执行交易B;类似的第一交易和第二交易也可以分别为交易G和交易F,此时,接收到Tx_groupi的计算进程可以先执行交易F再执行交易G。第三交易可以为交易C、第四交易可以为交易D和E,对此,接收到Tx_groupi的计算进程可以通过线程thread1执行交易C、并通过thread2依次执行交易D和E等。通过该方式,不仅能够确保存在依赖关系的各个交易被按序执行,从而保证各个交易的执行结果的准确性,也能够通过并发执行第三交易和第四交易的方式提升不存在依赖关系的各个交易的整体执行效率。
另外需要说明的是,对于存在依赖关系的第一交易和第二交易,二者也可以分别为交易B和交易C,此时,应当先执行交易B再执行交易C。而且,由于交易F依赖交易C和交易E,所以在执行交易D和E完成后,还需要等待交易C执行完毕,再基于交易C和交易E的执行结果(如两交易的执行过程对某些状态参数进行了更新)执行交易F,特此说明。
在一实施例中,任一计算进程在执行任一交易组中的各个交易完毕后,可以向所述控制进程返回相应的通知消息;相应的,若所述控制进程在所述任一交易组对应的执行期限内未接收到所述任一计算进程返回的所述通知消息,则可以将所述任一交易组重新发送至当前时刻的其他空闲计算进程执行。其中,所述执行期限可以根据所述任一交易组的分组费用按照预设规则计算得到,如在分组费用为100gas的情况下,执行期限为500ms;在分组费用为200gas的情况下,执行期限为1s等,不再赘述。而且,所述执行期限可以不小于所述任一交易组的分组预期耗时(即根据其中各个交易的交易耗时及其依赖关系确定出的执行所述各个交易所需的理论时长)。所述通知消息可以包含所述任一交易组中各个交易的执行结果或交易回执(Receipt)等信息。
可以理解的是,所述控制进程在所述任一交易组对应的执行期限内未接收到所述任一计算进程返回的所述通知消息,即表明所述任一计算进程并未在执行期限内顺利执行完毕所述任一交易组中的各个交易,如可能出现资源不足、执行被强制暂停等异常情况,此时所述控制进程若继续等待该计算进程返回所述通知消息需要冒较大风险或者对交易执行不利,所以控制进程可以将该交易组及时发送至其他计算进程执行,以确保这些计算进程能够被成功执行。可以理解的是,若所述控制进程在所述执行期限内成功接收到任一计算进程返回的所述通知消息,则控制进程可以按照预设规则处理该通知消息。
另外,在确定待执行的所述多个交易均被相应的计算进程执行完毕的情况下,若所述第一节点为区块链系统中的从节点,则该节点可以向发起系统中的其他节点(如主节点等)发送共识证明,该共识证明中可以包含所述多个交易所属区块的区块高度以及第一节点针对所述区块高度或区块哈希的签名。系统中的任一节点可以在接收到2f+1个节点(可以包括自身)的共识证明的情况下,确认系统中的大部分节点针对所述多个交易的执行结果一致,以通过该方式避免主节点作恶或者任一节点执行出错对链上区块可能产生的不利影响,从而确保区块执行结果的准确性。
对应于前述实施例,本说明书实施例还提出一种区块链系统,该系统包括第一节点和第二节点,第一节点中包含控制进程和N个计算进程,其中:
第二节点用于向第一节点发送待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;
第一节点用于获取待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;根据所述预执行读写集将所述多个交易划分为M个交易组,并根据各个交易组中交易的交易费用确定各个交易组的分组费用,其中,各个交易组中的交易互不相同,任一交易组的分组费用与执行该交易组中全部交易需要的实际时长呈正相关,M和N均为正整数,且M>N;以及,根据所述分组费用将所述M个交易组分发至所述N个计算进程执行,使所述N个计算进程的任务预期费用趋于一致,其中,各个计算进程接收到的交易组互不相同,任一计算进程的任务预期费用与该计算进程执行自身所接收交易组中的全部交易需要的实际时长呈正相关。
其中,所述第一节点和第二节点可以分别为所述区块链系统中的从节点和主节点,相应的交易分发过程的具体实现可以参见前述实施例的记载,此处不再赘述。
图6是一示例性实施例提供的一种区块链系统中的第一节点的结构示意图。如图6所示,所述第一节点中包含控制进程62和N个计算进程64,所述控制进程62用于:
获取待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;
根据所述预执行读写集将所述多个交易划分为M个交易组,并根据各个交易组中交易的交易费用确定各个交易组的分组费用,其中,各个交易组中的交易互不相同,任一交易组的分组费用与执行该交易组中全部交易需要的实际时长呈正相关,M和N均为正整数,且M>N;
根据所述分组费用将所述M个交易组分发至所述N个计算进程执行,使所述N个计算进程的任务预期费用趋于一致,其中,各个计算进程接收到的交易组互不相同,任一计算进程的任务预期与所述任一计算进程执行自身所接收交易组中的全部交易需要的实际时长呈正相关。
可选的,所述控制进程62具体用于:
根据所述预执行读写集确定各个交易之间的依赖关系,并基于所述依赖关系将所述多个交易划分为M个交易组,其中,存在依赖关系的多个交易被划分至同一交易组,不存在依赖关系的多个交易被分别划分至不同的交易组。
可选的,任一交易的预执行读写集包括预执行读集和/或预执行写集,所述预执行读集和预执行写集分别用于表征针对状态数据的读取操作和写入操作,所述控制进程62具体用于:
在任一交易的预执行读写集包括针对任一状态数据的预执行写集的情况下,在所述预执行读写集中确定所述任一状态数据的全部预执行读集和预执行写集对应的各个其他交易;
所述控制进程基于所述任一交易和所述各个其他交易的执行顺序,确定所述任一交易和所述各个其他交易之间的依赖关系。
可选的,所述控制进程62具体用于下述之一:
在所述任一交易组中仅包含一个交易的情况下,将该交易的交易费用确定为所述任一交易组的分组费用;
在所述任一交易组中包含多个交易的情况下,根据所述多个交易之间的依赖关系确定所述多个交易构成的至少一个单向执行链路,以及,确定各个单向执行链路的单链路预期费用,并将其中最大的单链路预期费用确定为该交易组的分组费用;其中,任一单向执行链路中的各个交易之间串行执行,任一单向执行链路的单链路预期费用为该单向执行链路中各个交易的交易费用之和;
在所述任一交易组中包含多个交易的情况下,根据所述多个交易之间的依赖关系确定所述多个交易构成的串行交易段和/或并行交易段,并根据确定出的各个交易段所包含交易的交易费用确定所述任一交易组的分组费用;其中,任一交易段包含至少一个交易,包含多个交易的任一交易段中的各个交易之间串行执行,所述串行交易段和所述并行交易段分别包含的交易被串行执行,具有相同起点和/或相同终点的多个并行交易段分别包含的交易之间并行执行,且所述多个并行交易段中的最长并行交易段所包含全部交易的交易费用之和最大,所述任一交易组的分组费用为下述之和:各个串行交易段分别包含的全部交易的交易费用,所述并行交易段中各个最长并行交易段分别包含的全部交易的交易费用。
可选的,所述控制进程62具体用于:
将分组费用最大的N个交易组一一对应的下发至所述N个计算进程,并在任一计算进程将接收到的交易组中的各个交易执行完毕后,将当前时刻尚未分发且分组费用最大的交易组发送至所述任一计算进程,直至分组费用最小的交易组被发送至相应的计算进程后停止分发;或者,
将所述N、M和各个交易组的分组费用输入算法模型进行处理,并接收所述算法模型基于贪心算法输出的所述M个交易组与所述N个计算进程之间的目标对应关系,以及,按照所述目标对应关系将所述M个交易组分别发送至相应的计算进程。
可选的,针对分发至任一计算进程的任一交易组及其中的各个交易,所述各个交易的预执行读写集被所述任一计算进程用于批量读取相应的状态数据,读取到的所述状态数据被所述任一计算进程用于执行所述各个交易。
可选的,所述控制进程62还用于:
接收任一计算进程在执行任一交易组中的各个交易完毕后返回的通知消息;
若在所述任一交易组对应的执行期限内未接收到所述任一计算进程返回的所述通知消息,则将所述任一交易组重新发送至其他计算进程执行,所述执行期限与所述任一交易组的分组费用呈正相关。
可选的,任一交易组中的各个交易被相应计算进程按照所述各个交易之间的依赖关系执行;
其中,对于第一交易及其所依赖的第二交易,第一交易在执行第二交易完成后再执行;对于依赖于同一交易或被同一交易所依赖的第三交易和第四交易,若第三交易和第四交易互相不依赖,则第三交易和第四交易被通过不同的线程并发执行。
可选的,所述控制进程62具体用于:
从所述区块链系统中除第一节点之外的其他节点发起且已通过共识的提议中获取多个交易以及各个交易的预执行信息;或者,
在第一节点还包含预执行进程的情况下,从所述区块链系统中除第一节点之外的其他节点发起且已通过共识的提议中获取多个交易,并调用所述预执行进程对获取到的各个交易进行预执行以得到相应的预执行信息。
可选的,所述第一节点为所述区块链系统中的从节点,所述其他节点包括所述区块链系统中的主节点。
所述第一节点的交易分发过程的具体实现可以参见前述实施例的记载,此处不再赘述。
图7是一示例性实施例提供的一种设备的结构示意图。请参考图7,在硬件层面,该设备包括处理器702、内部总线704、网络接口706、内存708以及非易失性存储器710,当然还可能包括其他功能所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器702从非易失性存储器710中读取对应的计算机程序到内存708中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
本说明书是参照根据本说明书实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。

Claims (14)

1.一种交易分发方法,应用于区块链系统中第一节点包含的控制进程,第一节点还包含N个计算进程,所述方法包括:
获取待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;
根据所述预执行读写集将所述多个交易划分为M个交易组,并根据各个交易组中交易的交易费用确定各个交易组的分组费用,其中,各个交易组中的交易互不相同,任一交易组的分组费用与执行该交易组中全部交易需要的实际时长呈正相关,M和N均为正整数,且M>N;
根据所述分组费用将所述M个交易组分发至所述N个计算进程执行,使所述N个计算进程的任务预期费用趋于一致,其中,各个计算进程接收到的交易组互不相同,任一计算进程的任务预期与所述任一计算进程执行自身所接收交易组中的全部交易需要的实际时长呈正相关。
2.根据权利要求1所述的方法,所述根据所述预执行读写集将所述多个交易划分为M个交易组,包括:
根据所述预执行读写集确定各个交易之间的依赖关系,并基于所述依赖关系将所述多个交易划分为M个交易组,其中,存在依赖关系的多个交易被划分至同一交易组,不存在依赖关系的多个交易被分别划分至不同的交易组。
3.根据权利要求2所述的方法,任一交易的预执行读写集包括预执行读集和/或预执行写集,所述预执行读集和预执行写集分别用于表征针对状态数据的读取操作和写入操作,所述根据所述预执行读写集确定各个交易之间的依赖关系,包括:
在任一交易的预执行读写集包括针对任一状态数据的预执行写集的情况下,在所述预执行读写集中确定所述任一状态数据的全部预执行读集和预执行写集对应的各个其他交易;
所述控制进程基于所述任一交易和所述各个其他交易的执行顺序,确定所述任一交易和所述各个其他交易之间的依赖关系。
4.根据权利要求2所述的方法,根据任一交易组中交易的交易费用确定该交易组的分组费用,包括下述之一:
在所述任一交易组中仅包含一个交易的情况下,将该交易的交易费用确定为所述任一交易组的分组费用;
在所述任一交易组中包含多个交易的情况下,根据所述多个交易之间的依赖关系确定所述多个交易构成的至少一个单向执行链路,以及,确定各个单向执行链路的单链路预期费用,并将其中最大的单链路预期费用确定为该交易组的分组费用;其中,任一单向执行链路中的各个交易之间串行执行,任一单向执行链路的单链路预期费用为该单向执行链路中各个交易的交易费用之和;
在所述任一交易组中包含多个交易的情况下,根据所述多个交易之间的依赖关系确定所述多个交易构成的串行交易段和/或并行交易段,并根据确定出的各个交易段所包含交易的交易费用确定所述任一交易组的分组费用;其中,任一交易段包含至少一个交易,包含多个交易的任一交易段中的各个交易之间串行执行,所述串行交易段和所述并行交易段分别包含的交易被串行执行,具有相同起点和/或相同终点的多个并行交易段分别包含的交易之间并行执行,且所述多个并行交易段中的最长并行交易段所包含全部交易的交易费用之和最大,所述任一交易组的分组费用为下述之和:各个串行交易段分别包含的全部交易的交易费用,所述并行交易段中各个最长并行交易段分别包含的全部交易的交易费用。
5.根据权利要求1所述的方法,所述根据所述分组费用将所述M个交易组分发至所述N个计算进程,包括:
将分组费用最大的N个交易组一一对应的下发至所述N个计算进程,并在任一计算进程将接收到的交易组中的各个交易执行完毕后,将当前时刻尚未分发且分组费用最大的交易组发送至所述任一计算进程,直至分组费用最小的交易组被发送至相应的计算进程后停止分发;或者,
将所述N、M和各个交易组的分组费用输入算法模型进行处理,并接收所述算法模型基于贪心算法输出的所述M个交易组与所述N个计算进程之间的目标对应关系,以及,按照所述目标对应关系将所述M个交易组分别发送至相应的计算进程。
6.根据权利要求1所述的方法,针对分发至任一计算进程的任一交易组及其中的各个交易,所述各个交易的预执行读写集被所述任一计算进程用于批量读取相应的状态数据,读取到的所述状态数据被所述任一计算进程用于执行所述各个交易。
7.根据权利要求1所述的方法,还包括:
接收任一计算进程在执行任一交易组中的各个交易完毕后返回的通知消息;
若在所述任一交易组对应的执行期限内未接收到所述任一计算进程返回的所述通知消息,则将所述任一交易组重新发送至其他计算进程执行,所述执行期限与所述任一交易组的分组费用呈正相关。
8.根据权利要求1所述的方法,任一交易组中的各个交易被相应计算进程按照所述各个交易之间的依赖关系执行;
其中,对于第一交易及其所依赖的第二交易,第一交易在执行第二交易完成后再执行;对于依赖于同一交易或被同一交易所依赖的第三交易和第四交易,若第三交易和第四交易互相不依赖,则第三交易和第四交易被通过不同的线程并发执行。
9.根据权利要求1所述的方法,所述获取待执行的多个交易以及各个交易的预执行信息,包括:
从所述区块链系统中除第一节点之外的其他节点发起且已通过共识的提议中获取多个交易以及各个交易的预执行信息;或者,
在第一节点还包含预执行进程的情况下,从所述区块链系统中除第一节点之外的其他节点发起且已通过共识的提议中获取多个交易,并调用所述预执行进程对获取到的各个交易进行预执行以得到相应的预执行信息。
10.根据权利要求9所述的方法,所述第一节点为所述区块链系统中的从节点,所述其他节点包括所述区块链系统中的主节点。
11.一种区块链系统中的第一节点,第一节点中包含控制进程和N个计算进程,所述控制进程用于:
获取待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;
根据所述预执行读写集将所述多个交易划分为M个交易组,并根据各个交易组中交易的交易费用确定各个交易组的分组费用,其中,各个交易组中的交易互不相同,任一交易组的分组费用与执行该交易组中全部交易需要的实际时长呈正相关,M和N均为正整数,且M>N;
根据所述分组费用将所述M个交易组分发至所述N个计算进程执行,使所述N个计算进程的任务预期费用趋于一致,其中,各个计算进程接收到的交易组互不相同,任一计算进程的任务预期费用与该计算进程执行自身所接收交易组中的全部交易需要的实际时长呈正相关。
12.一种区块链系统,包括第一节点和第二节点,第一节点中包含控制进程和N个计算进程,其中:
第二节点用于向第一节点发送待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;
第一节点用于获取待执行的多个交易以及各个交易的预执行信息,任一交易的预执行信息包括该交易的预执行读写集和交易费用;根据所述预执行读写集将所述多个交易划分为M个交易组,并根据各个交易组中交易的交易费用确定各个交易组的分组费用,其中,各个交易组中的交易互不相同,任一交易组的分组费用与执行该交易组中全部交易需要的实际时长呈正相关,M和N均为正整数,且M>N;以及,根据所述分组费用将所述M个交易组分发至所述N个计算进程执行,使所述N个计算进程的任务预期费用趋于一致,其中,各个计算进程接收到的交易组互不相同,任一计算进程的任务预期费用与该计算进程执行自身所接收交易组中的全部交易需要的实际时长呈正相关。
13.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-10中任一项所述的方法。
14.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-10中任一项所述方法的步骤。
CN202310494428.5A 2023-04-28 2023-04-28 交易分发方法、节点和区块链系统 Pending CN116703580A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310494428.5A CN116703580A (zh) 2023-04-28 2023-04-28 交易分发方法、节点和区块链系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310494428.5A CN116703580A (zh) 2023-04-28 2023-04-28 交易分发方法、节点和区块链系统

Publications (1)

Publication Number Publication Date
CN116703580A true CN116703580A (zh) 2023-09-05

Family

ID=87842347

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310494428.5A Pending CN116703580A (zh) 2023-04-28 2023-04-28 交易分发方法、节点和区块链系统

Country Status (1)

Country Link
CN (1) CN116703580A (zh)

Similar Documents

Publication Publication Date Title
Wang et al. Workflow as a service in the cloud: architecture and scheduling algorithms
Kang et al. Dynamic scheduling strategy with efficient node availability prediction for handling divisible loads in multi-cloud systems
CN109254836B (zh) 面向云计算系统优先依赖任务的期限约束成本优化调度方法
CN110990154B (zh) 一种大数据应用优化方法、装置及存储介质
CN116308772B (zh) 交易分发方法、节点和区块链系统
CN104794239A (zh) 一种云平台数据处理方法
Schildt et al. Candis: Heterogenous mobile cloud framework and energy cost-aware scheduling
Luo et al. Exploiting redundancies to enhance schedulability in fault-tolerant and real-time distributed systems
Kang et al. Scheduling multiple divisible loads in a multi-cloud system
CN111240824A (zh) 一种cpu资源调度方法及电子设备
CN116703580A (zh) 交易分发方法、节点和区块链系统
CN116703601A (zh) 基于区块链网络的数据处理方法、装置、设备及存储介质
CN115208900B (zh) 基于区块链与博弈模型的多云架构云服务资源调度方法
CN111124631A (zh) 一种基于区块链网络的任务处理方法及装置
US9639636B1 (en) Algorithmically driven selection of parallelization technique for running model simulation
CN110599141B (zh) 用于向节点分配处理费用的方法、装置、系统和介质
CN115269118A (zh) 一种虚拟机的调度方法、装置及设备
CN114095436A (zh) 区块链交易的处理方法、存储介质和计算机系统
CN117408703A (zh) 交易执行方法、装置和区块链系统
CN113504988A (zh) 系统算力资源调度的控制方法、系统、介质及装置
CN116662293A (zh) 收据数据的存储方法、节点和区块链系统
CN116579851A (zh) 交易分发方法、节点和区块链系统
Alamro et al. Shed: Optimal dynamic cloning to meet application deadlines in cloud
CN104796493A (zh) 一种基于云计算的信息处理方法
CN117474552A (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