CN117056034A - 一种Tendermint系统中基于动态分析的事务并行执行方法及装置 - Google Patents

一种Tendermint系统中基于动态分析的事务并行执行方法及装置 Download PDF

Info

Publication number
CN117056034A
CN117056034A CN202311107363.0A CN202311107363A CN117056034A CN 117056034 A CN117056034 A CN 117056034A CN 202311107363 A CN202311107363 A CN 202311107363A CN 117056034 A CN117056034 A CN 117056034A
Authority
CN
China
Prior art keywords
transaction
execution
module
version
data
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
CN202311107363.0A
Other languages
English (en)
Inventor
赵恒泰
袁野
王子尧
要鑫
赵相国
Original Assignee
东北大学
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 东北大学 filed Critical 东北大学
Priority to CN202311107363.0A priority Critical patent/CN117056034A/zh
Publication of CN117056034A publication Critical patent/CN117056034A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • 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

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

本发明提供一种Tendermint系统中基于动态分析的事务并行执行方法及装置,涉及区块链技术领域。本发明提出:领导者节点在收到一批事务后,为每个事务标注唯一的序列号并对收到的事务进行排序,通过多版本时间戳排序算法执行事务,生成一个冲突可串行化的并发调度,并根据执行结果生成事务的读写集以构建事务依赖三元组,广播至验证节点中;验证节点在收到事务依赖三元组后,进行解析并重构事务的调度图,根据事务执行结果更新事务执行状态,确定可以并行执行的事务;若验证执行过程出现问题,诚实的验证节点会标记错误并广播该执行结果的错误,以反对这个区块进入区块链。本发明确保了事务并行执行结果的一致性和原子性,提高区块链系统的事务执行效率。

Description

一种Tendermint系统中基于动态分析的事务并行执行方法及 装置
技术领域
本发明涉及区块链技术领域,尤其涉及一种Tendermint系统中基于动态分析的事务并行执行方法及装置。
背景技术
Tendermint系统是一个基于共识算法的分布式账本平台,旨在提供安全、可扩展和高性能的区块链解决方案。Tendermint系统采用了一种称为拜占庭容错(ByzantineFault Tolerant,BFT)共识算法的机制,即使有部分节点存在故障或恶意行为,该算法也能够在节点之间达成一致。这确保了在Tendermint系统中的交易和状态转换能够得到正确验证和确认。同时这种共识算法具有高吞吐量和快速确认的特点,能够处理大量交易并具有几乎是实时的交易最终性。
Tendermint系统通过使用一组验证节点(validators)来管理和维护区块链网络,这些验证节点负责提案和确认区块,确保所有节点在共识过程中达成一致。在Tendermint系统中,应用程序以独立的方式运行,通过区块链应用接口(Application BlockChainInterface,ABCI)与Tendermint核心引擎进行交互。Tendermint还提供了安全的P2P网络层,用于节点之间的通信和数据传输,该网络层支持加密连接和防止拜占庭故障的机制,确保数据的机密性和完整性。总体而言,Tendermint系统以其强大的共识算法、高性能的交易处理能力和灵活的应用程序接口,为开发人员和企业提供了构建安全、可扩展的分布式应用程序的解决方案。它在金融、供应链、数字资产等领域具有广泛的应用前景。
传统的区块链系统中,每个区块中包含多笔事务,为了保证不同节点上区块事务执行结果的一致性,普遍采用串行执行的方式执行区块内事务。事务串行执行技术是区块链的重要技术之一,事务串行执行技术的核心思想是将所有的交易按照一定的顺序排列,并且在当前交易执行之前,必须等待前面的交易执行完成。具体是:首先区块链上的交易是按照时间顺序排列的,每个交易都有一个时间戳,表示这个交易发生的时间;当一个新的交易被添加到区块链中时,它会被放在当前所有交易的末尾,并且必须等待前面的交易执行完成后才能被执行;其次,区块链上的交易是有先后顺序的,每个交易都有一个唯一的交易标识符,称为交易哈希。当一个新的交易被添加到区块链中时,它的交易哈希会被记录在区块中,并且在执行该交易时,必须按照它的交易哈希顺序来执行。事务串行执行技术可以确保区块链上的交易按照一定的顺序被执行并记录,可以避免交易之间的冲突和竞争,从而保证了区块链的正确性和一致性,进而保证了交易的正确执行。但是随着区块链技术的不断发展和完善,事务串行执行技术无法充分利用多核处理器的高性能优势,很难进一步提升共识算法的效率,成为了许可链共识的性能瓶颈。
区块链系统中的事务执行的很多特性接近于传统分布式数据库的事务执行,那么对于区块链事务执行的优化很大程度上可以基于传统数据库的优化理论。理论上,在区块打包执行过程中,是可以直接通过并行的方式执行区块内的事务的,但是在区块链系统中,存在恶意节点,并且每个节点是互相独立的,收到区块的顺序也不是相同的,那么事务并行执行可能会导致交易之间的竞争和冲突,从而导致交易处理的正确性和一致性受到影响。例如,在一个交易中修改了某个数据,而在另一个交易中又修改了同一个数据,这将会导致数据的不一致性,需要采取一定的措施来保证数据的一致性。因此,在实现事务并行执行时,需要考虑如何避免竞争、冲突和一致性的问题。同时,由于交易是并行执行的,有些交易之间存在依赖关系,比如订单交易需要先于支付交易执行。如果这些交易不能按照正确的顺序执行,可能会导致交易失败,从而影响区块链系统的正确性和一致性。因此,需要考虑交易之间的依赖关系,并采取相应的措施来保证交易按照正确的顺序执行。
综上所述,区块链系统在引入事务并行执行技术时,需要重点考虑交易之间的竞争和冲突、交易之间的依赖关系、交易的原子性、数据的一致性以及性能问题等。
发明内容
针对上述现有技术的不足,本发明提出了一种Tendermint系统中基于动态分析的事务并行执行方法及装置,目的是让区块内事务并行执行并确保事务执行的一致性和原子性。
为解决上述技术问题,本发明第一方面提出了一种Tendermint系统中基于动态分析的事务并行执行方法,包括:
步骤1:领导者节点获取待执行事务;
所述待执行事务为预定义的包含特定字段的字符串,领导者节点持续地处理来自客户端的事务广播请求,直到本地事务数量超过一定阈值;
步骤2:领导者节点根据待执行事务构建事务依赖三元组,并将其广播至验证节点;
所述步骤2的执行过程中包含以下数据结构:
多版本存储中的数据项Item:存储了一个数据版本,包含以下三个字段:(1)string类型的value字段,用于存储数据;(2)int32类型的tid字段,用于存储数据的版本号,即写入此数据的事务的序列号;(3)int8类型的state字段,用于存储数据项状态信息,共有waiting、commit和abort三种状态,分别表示写入此数据的事务的执行状态为执行中、已提交和已中止;
存储某个键上的多版本数据的数据列MultiVersionLine:包含以下三个字段:(1)string类型的key字段,用于存储多版本数据的键;(2)int32类型的RTS字段,用于存储对该键中数据进行读取的事务的最大序列号;(3)Item数据组成的数组values字段,记为[]Item,用于存储多版本数据,字段中所有数据项根据其tid字段的大小从小到大排列;
多版本存储MultiVersionStore:string类型的键到MultiVersionLine类型的多版本数据列的映射,记为map[string]MultiVersionLine;
事务的依赖项DepSet:由string到*Item的映射,记为map[string]*Item,用于记录string类型的主键对应的多版本存储中的Item数据项的地址指针;
事务执行结果resultMsg:包含两个字段:(1)int32类型的事务序列号tid,用于表明所执行的事务;(2)string类型的事务执行结果state,当state的值为error时,表明事务因存在错误而被中止,当state的值为abort时,表明事务因冲突中止,当state的值为commit时,表明事务成功执行并提交;
事务依赖三元组TxTuple:用于记录事务的内容、序列号和依赖关系,包含三个字段:(1)string类型的事务的内容Tx,用于记录事务的内容;(2)int32类型的事务序列号tid,用于记录事务的序列号;(3)int32类型的事务最大读依赖maxDep,用于记录事务的依赖关系;
步骤2.1:初始化一个空的多版本存储,记为S,给每个待执行事务分配唯一的序列号,并根据序列号顺序对待执行事务进行排序,构建任务队列;
步骤2.2:工作线程循环地从任务队列中取出待执行事务及其序列号,并行地执行事务,将事务执行结果写入多版本存储中,并根据事务执行结果生成事务的事务读集R和事务的事务写集W;
所述步骤2.2中取出的待执行事务记为T且将该事务的序列号记为id,所述步骤2.2的执行过程包括以下三个阶段:
(1)读写集生成阶段:工作线程初始化DepSet类型的事务读集R和事务写集W;
每当事务读取键A时,如果R中存在该键,则读取R中属于该键的Item,否则,在多版本存储中寻找合适的数据项,方法为:如果映射S[A]不存在,则锁定S,并从键值数据库中读取键A的值vA,将S[A]设置为空的MultiVersionLine,然后将数据Item{value:vA,tid:-1,state:commit}插入S[A]中,将S[A]的RTS字段,即S[A].RTS置为id,然后释放S的锁;如果映射S[A]存在,且S[A].RTS小于id,则将S[A].RTS置为id;完成上述操作后,选择S[A]中版本号不大于id的且版本号最大的数据项进行读取,并将其加入R中;每当事务向键A写入数据v时,将Item{value:v,tid:id,state:waiting}插入W中;如果事务因错误中止,返回state字段为error的resultMsg消息,并结束事务执行;
(2)冲突消解阶段:将W中所有Item插入S中,如果在写入某个键A时,S[A].RTS大于tid,则认为事务发生了过时的写,将W中所有Item的state字段设置为abort,返回state字段为abort的resultMsg消息,并结束事务执行;否则,在W中所有Item都写入结束后,等待R中所有Item的state字段都变为commit;如果R中某个Item的state字段为abort,则将W中所有Item的state字段设置为abort,返回state字段为abort的resultMsg消息,并结束事务执行;
(3)事务提交阶段:将W中所有Item的state字段设置为commit,然后返回state字段为commit的resultMsg消息;
进一步的,所述构建事务依赖三元组的方法为:领导者节点初始化事务依赖三元组集D为空TxTuple数组;领导者节点按序列号从小到大的顺序遍历所有resultMsg的state字段为commit的事务的序列号id及其事务内容tx,如果事务读集R非空,则将R中序列号最大的数据项的序列号记为d,否则令d=-1,将数据TxTuple{Tx:tx,tid:id,maxDep:d}加入D中;
步骤2.3:向执行结果中因冲突而中止的事务重新分配新的递增的序列号,并将该任务重新加入任务队列中,更新任务队列;
步骤2.4:对更新后的任务队列重复执行步骤2.2和步骤2.3,得到新的任务队列;
步骤2.5:对步骤2.4中更新后的任务队列中的事务进行串行执行,生成事务执行结果,并根据事务执行结果更新事务的事务读集和事务的事务写集,完成待执行事务的执行过程;
步骤2.6:领导者节点根据事务的事务读集和事务的事务写集构建事务的调度图,构建事务依赖三元组存储事务间的依赖关系,并根据事务依赖三元组构建事务依赖三元组集D;
步骤2.7:领导者节点将事务依赖三元组集D打包为字节编码,并将该字节编码广播至验证节点;
步骤3:验证节点接收事务依赖三元组并完成验证执行,并进行区块提交;
所述步骤3的执行过程中包含以下数据结构:
事务标签txLabel:用于表示某个事务及其序列号,包含两个字段:(1)string类型的事务内容Tx,(2)int32类型的事务序列号tid;
序列号标签tidLabel:用于表示某个序列号对应的事务是否被提交,包含三个字段:(1)int32类型的序列号tid字段,(2)bool类型的done字段:done的值为true表示事务已经被提交,值为false表明事务尚未提交,(3)[]txLabel类型的depList字段:即事务标签的无序列表,用来表示事务依赖三元组中,最大依赖序列号为此数据结构的tid字段的所有事务序列号及其内容,用作事务并行执行的调度依据;
[]tidLabel类型的序列号标签的有序列表tidList:用于根据tid字段的大小从小到大排列所有序列号标签tidLabel;
从int32到*tidLabel的map[int32]*tidLabel映射tidMap:用于根据事务序列号快速检索序列号标签在tidList中的位置;
步骤3.1:验证节点将接收到的字节编码转化为事务依赖三元组集,并对事务依赖三元组集进行解析;
步骤3.2:根据步骤3.1的解析结果重构领导者节点的并发调度过程;
步骤3.3:根据重构出的领导者节点的并发调度过程,并行执行事务依赖三元组集中的事务;
步骤3.3.1:根据事务执行结果更新事务执行状态;
步骤3.3.2:根据领导者节点的并发调度过程确定可以并行执行的事务;
步骤3.4:在验证节点间同步区块执行结果并决定是否提交区块,完成验证节点间一致性的状态更新。
本发明第二方面提出了一种Tendermint系统中基于动态分析的事务并行执行装置,该装置包括:
事务获取模块,用于获取待执行事务;
多版本时间戳排序模块,用于对获取的待执行事务进行排序并进行模拟执行;
所述多版本时间戳排序模块进一步包括:
第一多版本存储模块:存储由并行执行模块、二次并行执行模块和串行执行模块写入的多版本数据;
序列号分配模块,用于为待执行事务分配序列号,并按照序列号顺序对待执行事务进行排序,生成任务队列;
并行执行模块,用于从任务队列中提取事务及其序列号,并行地执行事务,将事务执行结果写入第一多版本存储模块中,完成事务的并行执行;
序列号重分配模块:调度线程为事务执行结果中因冲突而中止的事务重新分配一个新的递增的序列号,并将该事务及其新的序列号重新加入任务队列中;
二次并行执行模块:用于从序列号重分配模块生成的任务序列中提取事务及其序列号,并行地执行事务,将事务执行结果写入第一多版本存储模块中,完成事务的二次并行执行;
串行执行模块:调度线程为所有二次并行执行模块中的事务执行结果中因冲突而中止的事务重新分配一个新的递增的序列号,并以与并行执行模块相同的方法,串行地执行这些事务;
事务依赖三元组广播模块,用于将多版本时间戳排序模块产生的事务顺序及依赖关系广播至验证节点;
所述事务依赖三元组广播模块进一步包括:
生成模块,用于根据事务的事务读集和事务写集构建事务依赖三元组,并根据事务依赖三元组构建事务依赖三元组集;
广播模块,领导者节点将事务依赖三元组集打包为字节编码,并将该字节编码至验证节点;
事务依赖三元组接受与解析模块,用于解析从领导者节点处获得的事务依赖三元组并重构领导者节点并发调度过程中产生的调度图;
所述事务依赖三元组接受与解析模块进一步包括:
序列号标签构建子模块,用于解析从领导者节点处获取的事务依赖三元组,得到解析结果;
依赖标签构建子模块,用于根据序列号标签构建子模块的解析结果重构领导者节点传输的调度图;
验证执行模块,用于并行执行事务依赖三元组接受与解析模块产生的调度图中的事务;
所述验证执行模块进一步包括:
第二多版本存储模块:存储由并行验证执行模块写入的多版本数据;
并行验证执行模块,用于从任务队列中提取事务及其序列号,并行地执行事务,将事务执行结果写入第二多版本存储模块中,完成事务的并行执行;
消息处理子模块:用于处理事务依赖三元组接受与解析模块产生的调度图中的事务的执行结果;
任务调度子模块:用于根据事务依赖三元组接受与解析模块产生的调度图的验证性生成事务的并行执行顺序;
共识投票模块,用于在验证节点间同步区块执行结果并决定是否提交区块。
采用上述技术方案所产生的有益效果在于:
与现有技术相比,本发明方法及装置基于多版本时间戳进行事务并发预执行排序,兼容各类用户自定义事务,并通过事务依赖三元组广播和阶段重新验证的方式,确保了事务并行执行结果的一致性,提高了区块链系统的事务执行效率。
由于Tendermint系统中,用户事务可以通过相关事务接口自行定义,存在不可知性,为此,本发明方法及装置中的多版本时间戳排序可以预执行用户自定义事务并获取读写结果,生成一个冲突可串行化的并发调度,为事务并发执行的依赖分析提供了基础。
由于区块链系统去中心化的特点,需要所有成员节点的事务执行结果一致才能保证事务正常上链,为此,本发明方法及装置中的事务依赖三元组可以在尽量不影响区块大小的前提下,广播事务排序结果,让验证者可以快速进行本地排序并验证结果。
本发明方法及装置面向并发执行的事务执行架构,传统区块链系统中事务都是串行执行的,无需额外的排序验证操作,为了引入并发执行,本发明方法修改了区块链系统的排序阶段和验证阶段,加入了领导者节点的多版本时间戳排序模块,事务依赖三元组广播模块、验证节点的验证执行模块与共识投票模块,确保本发明方法可以顺序执行。
本发明方法及装置通过使用动态分析的方式获取事务读写依赖,具有普适性,同时设计了相应的事务并行执行架构,提高了区块链系统的事务处理效率,能够在保证交易处理的正确性和一致性的前提下,提升区块链性能。
附图说明
图1为本实施方式中应用的区块链系统处理事务执行的基本原理图;
图2为本实施方式中Tendermint系统中基于动态分析的事务并行执行的原理图;
图3为本实施方式中Tendermint系统中基于动态分析的事务并行执行方法的流程图;
图4为本实施方式中预设的7个事务的多版本时间戳预执行的过程示意图;其中(a)为第一次并行执行的事务操作时序图;(b)为第二次并行执行的事务操作时序图;(c)为调度线程串行执行的事务操作时序图;(d)为多版本存储最终状态;
图5为本实施方式中排序结果验证过程的示意图;其中(a)为验证过程初始状态;(b)为验证过程中事务序列号为3的事务提交后的状态;(c)为验证过程中事务序列号为1的事务提交后的状态;(d)为验证过程中所有事务均提交后的状态;
图6为本实施方式中Tendermint系统中基于动态分析的事务并行执行装置的结构图。
具体实施方式
为了便于理解本申请,下面结合附图和实施方式,对本发明的具体实施方式作进一步详细描述。以下实施方式用于说明本发明,但不用来限制本发明的范围。相反地,提供这些实施方式的目的是使对本申请的公开内容理解的更加透彻全面。
本发明方法的核心思路是:在领导者节点收到一批事务后,首先为每个事务标注一个唯一的序列号并对收到的事务进行排序,然后通过多版本时间戳排序算法试探性地执行事务,生成一个冲突可串行化的并发调度,并根据执行结果生成事务的读写集构建事务依赖三元组,最后广播到验证节点中;各个验证节点收到事务依赖三元组后,利用该三元组重构事务的调度图,任何事务对序列号小于其最大读依赖的事务均存在一条依赖边,执行过程中,有向边出端的事务必须等待入端的事务提交才能开始执行;同时为了防止拜占庭的领导者节点在区块中添加错误的调度图,一旦验证执行过程出现问题,诚实的验证节点会标记错误并广播这个执行结果的错误消息,以反对这个区块进入区块链。
在本实施方式中,现有的Tendermint系统中,对事务线性执行的处理流程如图1所示;本发明方法提出Tendermint系统中基于动态分析的事务并行的原理图如图2所示。
本实施方式第一方面提出一种Tendermint系统中基于动态分析的事务并行执行方法,如图3所示,包括:
步骤1:领导者节点获取待执行事务;
进一步的,所述待执行事务为预定义的包含特定字段的字符串。领导者节点持续地处理来自客户端的事务广播请求,直到本地事务数量超过一定阈值;
在本实施方式中,以银行转账事务为例,预定义的事务包含type字段,以指示事务的类型,预定义的事务包含两种类型,分别是“insert”类型的只写事务以及“transfer”类型的读写事务;其中“insert”事务模拟了银行账户的创建,事务T1、T2、T3、T4分别创建了账户地址为”A”、”B”、”C”、”D”的账户并向账户中添加100个单位的货币;“transfer”事务模拟了银行账户间的转账,首先查询转出账户(from字段)的余额是否足够完成本次交易,然后将每个转出账户的余额扣除一定数量,并将对应数量的货币转入对应的转入账户(to字段)的余额。例如,事务T5表示账户“A”将10个单位的货币转至账户“B”,事务T6表示账户“B”将10个单位的货币转至账户“C”,事务T7表示将账户“B”将10个单位的货币转至账户“C”,将预设的7个事务记为如下形式:
T1:{type:“insert”,account:“A”,amount:100};
T2:{type:“insert”,account:“B”,amount:100};
T3:{type:“insert”,account:“C”,amount:100};
T4:{type:“insert”,account:“D”,amount:100};
T5:{type:“transfer”,from:[“A”],to:[“B”],amount:10};
T6:{type:“transfer”,from:[“B”],to:[“C”],amount:10};
T7:{type:“transfer”,from:[“A”],to:[“D”],amount:10};
步骤2:领导者节点根据待执行事务构建事务依赖三元组,并将其广播至验证节点;
进一步的,所述步骤2的执行过程中包含以下数据结构:
多版本存储中的数据项Item:存储了一个数据版本,包含以下三个字段:(1)string类型的value字段,用于存储数据;(2)int32类型的tid字段,用于存储数据的版本号,即写入此数据的事务的序列号;(3)int8类型的state字段,用于存储数据项状态信息,共有waiting、commit和abort三种状态,分别表示写入此数据的事务的执行状态为执行中、已提交和已中止;
存储某个键上的多版本数据的数据列MultiVersionLine:包含以下三个字段:(1)string类型的key字段,用于存储多版本数据的键;(2)int32类型的RTS字段,用于存储对该键中数据进行读取的事务的最大序列号;(3)Item数据组成的数组values字段,记为[]Item,用于存储多版本数据,字段中所有数据项根据其tid字段的大小从小到大排列;
多版本存储MultiVersionStore:string类型的键到MultiVersionLine类型的多版本数据列的映射,记为map[string]MultiVersionLine;
事务的依赖项DepSet:由string到*Item的映射,记为map[string]*Item,用于记录string类型的主键对应的多版本存储中的Item数据项的地址指针;
事务执行结果resultMsg:包含两个字段:(1)int32类型的事务序列号tid,用于表明所执行的事务;(2)string类型的事务执行结果state,当state的值为error时,表明事务因存在错误而被中止,当state的值为abort时,表明事务因冲突中止,当state的值为commit时,表明事务成功执行并提交;
事务依赖三元组TxTuple:用于记录事务的内容、序列号和依赖关系,包含三个字段:(1)string类型的事务的内容Tx,用于记录事务的内容;(2)int32类型的事务序列号tid,用于记录事务的序列号;(3)int32类型的事务最大读依赖maxDep,用于记录事务的依赖关系;
步骤2.1:初始化一个空的多版本存储,记为S,给每个待执行事务分配唯一的序列号,并根据序列号顺序对待执行事务进行排序,构建任务队列;
具体的,调度线程首先根据CPU核数创建若干工作线程,然后为每一个待执行事务都分配一个递增的序列号,接着初始化一个空的MultiVersionStore类型的多版本存储,记为S,最后将所有的待执行事务按序列号顺序加入一个队列,称为任务队列;
在本实施方式中,如图4(a)所示,表明了事务执行的时序逻辑,即事务在进入工作线程池前,就根据该事物在事务集中的顺序获得了一个递增的序列号,事务T1获得了序列号1,事务T2获得了序列号2。
步骤2.2:工作线程循环地从任务队列中取出待执行事务及其序列号,并行地执行事务,将事务执行结果写入多版本存储中,并根据事务执行结果生成事务的事务读集R和事务的事务写集W;
进一步的,所述步骤2.2中将取出的待执行事务记为T,将该事务的序列号记为id;包括以下三个阶段:
(1)读写集生成阶段:工作线程初始化DepSet类型的事务读集R和事务写集W;
每当事务读取键A时,如果R中存在该键,则读取R中属于该键的Item,否则,在多版本存储中寻找合适的数据项,方法为:如果映射S[A]不存在,则锁定S,并从键值数据库中读取键A的值vA,将S[A]设置为空的MultiVersionLine,然后将数据Item{value:vA,tid:-1,state:commit}插入S[A]中,将S[A]的RTS字段,即S[A].RTS置为id,然后释放S的锁;如果映射S[A]存在,且S[A].RTS小于id,则将S[A].RTS置为id;完成上述操作后,选择S[A]中版本号不大于id且版本号最大的数据项进行读取,并将其加入R中;每当事务向键A写入数据v时,将Item{value:v,tid:id,state:waiting}插入W中;如果事务因错误中止,返回state字段为error的resultMsg消息,并结束事务执行;
(2)冲突消解阶段:将W中所有Item插入S中,如果在写入某个键A时,S[A].RTS大于tid,则认为事务发生了过时的写,将W中所有Item的state字段设置为abort,返回state字段为abort的resultMsg消息,并结束事务执行;否则,在W中所有Item都写入结束后,等待R中所有Item的state字段都变为commit;如果R中某个Item的state字段为abort,则将W中所有Item的state字段设置为abort,返回state字段为abort的resultMsg消息,并结束事务执行;
(3)事务提交阶段:将W中所有Item的state字段设置为commit,然后返回state字段为commit的resultMsg消息;
在本实施方式中,如图4(a)所示,7个事务都被并行地执行,由于线程资源有限,事务T1、T2、T3先被执行,其它事务在上述事务提交后才开始执行;事务T1、T2、T3、T4相互没有读写冲突关系;序列号为5的事务T5执行对键B的写入前,序列号为6的事务T6就对键B进行了读取,并将键B的MultiVersionLine的RTS字段更新为6,于是,序列号为5的事务的冲突消解阶段检测到对键B的过时的写行为,T5因冲突被中止,此时,在图4(d)中,所有序列号为5的Item数据项的state字段都被设置为abort;如图4(a)所示,序列号为7的事务T7在事务T5被中止之前读取了T5对键A的写入,冲突消解阶段,事务T7在执行完所有写入后,发现事务T5对键A写入的Item数据项state字段被更新为abort,因此事务T7被级联中止,在图4(d)中,所有序列号为7的Item数据项的state字段都被设置为abort;
步骤2.3:向执行结果中因冲突而中止的事务重新分配新的递增的序列号,并将该任务重新加入任务队列中,更新任务队列;
在本实施方式中,如图4(b)所示,第一次并行执行过程中因冲突而中止的事务T5被重新分配了序列号8、第一次并行执行过程中因冲突而中止的事务T7被重新分配了序列号9;
步骤2.4:对更新后的任务队列重复执行步骤2.2和步骤2.3,得到新的任务队列;
在本实施方式中,如图4(b)所示,序列号为8的事务T5和序列号为9的事务T7被并行地执行;T7首先读取了键A,并将键A的MultiVersionLine的RTS字段更新为9,此后T5才在键A中写入Item数据;T5的冲突消解阶段检测到对键A的写入是过时的写,于是T5因冲突中止;T7的冲突消解阶段没有检测到任何错误,T7被成功提交;在图4(d)中,所有序列号为8的Item数据的state字段都被更新为abort,而所有序列号为9的Item数据的state字段都被更新为commit。
步骤2.5:对步骤2.4中更新后的任务队列中的事务进行串行执行,生成事务执行结果,并根据事务执行结果更新事务的事务读集和事务的事务写集,完成待执行事务的执行过程;
在本实施方式中,如图4(c)所示,事务T5在二次并行执行过程中同样因冲突中止,调度线程为其分配新的序列号10,并在所有事务都执行结束后串行地执行它;串行执行过程中不可能出现数据冲突,故事务T5最终被成功提交;在图4(d)中,所有序列号为10的Item数据的state字段都被更新为commit。
在本实施方式中,如图4(d)所示,事务的读写在多版本存储中进行,其为每一次数据写入都在内存中创建一个数据存储空间,多次数据写入相互不覆盖,以提升事务执行过程中的并发程度;图中每一列都是一个MultiVersionLine类型的多版本数据列,第一列的主键key为A,最大读时间戳RTS为10,表明对主键为A的数据进行过读取的事务的最大序列号为10;主键key为A的多版本数据列存储了Item数组,数组的第一行中,Item类型数据的value字段值为100,Item类型数据的state字段值为commit,表明这个数据修改被成功提交,其tid字段为1表明该数据的版本号为1;第二行中,数据项的state字段值为abort,表明此次写入因事务中止而作废。
步骤2.6:领导者节点根据事务的事务读集和事务的事务写集构建事务的调度图,构建事务依赖三元组存储事务间的依赖关系,并根据事务依赖三元组构建事务依赖三元组集D;
进一步的,所述构建事务依赖三元组的方法为:领导者节点初始化事务依赖三元组集D为空TxTuple数组;领导者节点按序列号从小到大的顺序遍历所有resultMsg的state字段为commit的事务的序列号id及其事务内容tx,如果事务读集R非空,则将R中序列号最大的数据项的序列号记为d,否则令d=-1,将数据TxTuple{Tx:tx,tid:id,maxDep:d}加入D中;
在本实施方式中,在事务依赖三元组中,事务T1的序列号tid为1,它是只写事务,事务读集为空,所以T1的事务依赖三元组的maxDep字段为-1,第一行的事务依赖三元组中,Tx字段是事务T1;tid字段是T1的序列号1;maxDep字段是-1。事务T6是B对C的转账交易,事务读集R中包含了版本号为2的T2的写入,以及版本号为3的T3的写入,因此事务T6的事务依赖三元组的maxDep字段为3,将7个事务的事务依赖三元组记为:
TX:T1,tid:1,maxDep:-1;
TX:T2,tid:2,maxDep:-1;
TX:T3,tid:3,maxDep:-1;
TX:T4,tid:4,maxDep:-1;
TX:T5,tid:5,maxDep:3;
TX:T6,tid:6,maxDep:1;
TX:T7,tid:7,maxDep:9;
步骤2.7:领导者节点将事务依赖三元组集D打包为字节编码,并将该字节编码广播至验证节点;
步骤3:验证节点接收事务依赖三元组并完成验证执行,并进行区块提交;
进一步的,所述步骤3的执行过程中包含以下数据结构:
事务标签txLabel:用于表示某个事务及其序列号,包含两个字段:(1)string类型的事务内容Tx,(2)int32类型的事务序列号tid;
序列号标签tidLabel:用于表示某个序列号对应的事务是否被提交,包含三个字段:(1)int32类型的序列号tid字段,(2)bool类型的done字段:done的值为true表示事务已经被提交,值为false表明事务尚未提交,(3)[]txLabel类型的depList字段:即事务标签的无序列表,用来表示事务依赖三元组中,最大依赖序列号为此数据结构的tid字段的所有事务序列号及其内容,用作事务并行执行的调度依据;
[]tidLabel类型的序列号标签的有序列表tidList:用于根据tid字段的大小从小到大排列所有序列号标签tidLabel;
从int32到*tidLabel的map[int32]*tidLabel映射tidMap:用于根据事务序列号快速检索序列号标签在tidList中的位置;
在本实施方式中,如图5(a)所示,在tidList数据结构中,所有tidLabel都按照tid字段大小从小到大排列,它们的done字段都是false,表明上述序列号对应的事务均未被提交。depList字段被单独列出,tid字段为1的tidLabel数据的depList字段包含一个txLabel数据,该txLabel数据的Tx字段为T7,tid字段为9,表明序列号为9的事务T7在事务依赖三元组中的最大读依赖maxDep的值为1;tidMap维护了序列号tid到对应的txList中元素的地址映射;如图5(b)所示,序列号tid为3的事务提交并返回resultMsg消息,调度线程根据tidMap检索到tidList中对应的tidLabel数据,并将其done字段更新为true。
步骤3.1:验证节点将接收到的字节编码转化为事务依赖三元组集,并对事务依赖三元组集进行解析;
进一步的,所述步骤3.1的执行方法为:验证节点首先将领导者节点广播的字节编码转化为事务依赖三元组集D,初始化tidMap类型的映射为空,tidList类型的列表为空,然后遍历D中的每一个事务依赖三元组t;
在遍历过程中,如果列表tidList非空,且t.tid不大于tidList中最后一个tidLabel数据的tid字段,则返回错误;否则向tidList的末尾插入一个tidLabel数据,其tid字段值为t.tid,done字段值为false,depList字段为空的txLabel列表,并将tidMap对t.tid映射至该tidLabel数据的地址指针;
在本实施方式中,如图5(a)所示,tidMap是一个从序列号tid映射至与该tid字段相对应的tidList中的表项,tidList中的表项按照tid字段大小从小到大排列,初始done字段都是false。
步骤3.2:根据步骤3.1的解析结果重构领导者节点的并发调度过程;
如果映射tidMap对t.maxDep的映射不存在,则返回错误;否则,创建一个Tx字段为t.Tx,tid字段为t.tid的txLabel数据,并将其加入tidMap对t.maxDep的映射所指向的tidLabel数据的depList字段中;
在本实施方式中,事务T7所在的事务依赖三元组,其maxDep字段为1,tid字段为9;因此,如图5(a)所示,一个包含事务T7以及序列号9的事务被添加进tid字段为1的tidLabel数据的depList字段中。
步骤3.3:根据重构出的领导者节点的并发调度过程,并行执行事务依赖三元组集中的事务;
验证节点初始化int32类型的数据watermark,其含义是tidList中所有序列号不大于watermark的tidLabel数据项的done字段均被设置为true;首先验证节点将watermark置为-1;接着,验证节点将D中所有maxDep字段为-1的事务及其序列号加入任务队列,用与多版本时间戳排序模块中的并行执行模块相同的方法在多版本存储上执行上述事务,等待工作线程返回一条resultMsg消息,并使用以下子步骤处理消息,直到任务队列被清空或者步骤3.3.1返回错误:
步骤3.3.1:根据事务执行结果更新事务执行状态;
如果resultMsg消息的state字段值不为commit,则返回错误并中止所有事务的执行;否则,记resultMsg消息的tid字段为t,将tidMap对t的映射所指向的tidLabel的done字段设置为true。
在本实施方式中,如图5(b)所示,线程1返回一个tid字段为3的resultMsg消息,其state字段值为commit,表明序列号为3的事务成功提交;调度线程通过tidMap查询tidList中相应的数据表项的位置,并将其done字段设置为true,即tidList中tid字段为3的表项中的done字段设置为true。
步骤3.3.2:根据领导者节点的并发调度过程确定可以并行执行的事务;
从tidList中tid字段值等于watermark的表项开始遍历tidList,如果watermark值为-1则从tidList的起始数据项开始遍历,对检索过程中每个tidLabel类型的数据,将其记为l,执行以下过程:(1)如果l的done字段值为false,则结束遍历;(2)如果l的depList字段非空,则将depList中所有事务及其序列号加入任务队列,然后清空depList字段;(3)将watermark的值更新为l.tid;
在本实施方式中,如图5(a)所示,初始状态下,事务T1、T2、T3、T4的事务依赖三元组的maxDep字段为-1,所以被直接加入任务队列;如图5(b)所示,线程1返回序列号为3的事务的resultMsg消息,其state字段为commit表明事务成功执行,调度线程从tidList的起始项开始遍历,然而,tidList的起始项的state字段值为false,故遍历直接结束,水位线watermark没有得到更新;如图5(c)所示,线程2返回序列号为1的事务的resultMsg消息,通过tidMap将tidList中相应表项的done字段更新为true,调度线程从tidList的起始项开始遍历,tid为1的表项done字段为true,故将该表项的depList中的事务T3加入任务队列并清空depList字段,然后将水位线watermark更新为1;第二个表项的done字段为false,故遍历中止;如图5(d)所示,水位线watermark最终被更新为10,事务的一种可能的提交顺序是T3,T1,T2,T4,T7,T6,T5。
步骤3.4:在验证节点间同步区块执行结果并决定是否提交区块,完成验证节点间一致性的状态更新;
进一步的,所述决定是否提交区块的方法为:如果步骤3.3返回错误,则验证节点投票反对领导者节点广播的事务依赖三元组集所在的区块被添加进区块链,并将该消息作为领导者节点拜占庭行为的证据进行记录;否则,在其它信息没有错误的前提下,验证节点投票支持领导者界节点广播的事务依赖三元组集所在的区块被添加进区块链中。
本实施方式第二方面提出一种Tendermint系统中基于动态分析的事务并行执行装置,如图6所示,该装置包括:
事务获取模块,用于获取待执行事务;
多版本时间戳排序模块,用于对获取的待执行事务进行排序并进行模拟执行,包括:
第一多版本存储模块,存储由并行执行模块、二次并行执行模块和串行执行模块写入的多版本数据;
序列号分配模块,用于为待执行事务分配序列号,并按照序列号顺序对待执行事务进行排序,生成任务队列;
并行执行模块,用于从任务队列中提取事务及其序列号,并行地执行事务,将事务执行结果写入第一多版本存储模块中,完成事务的并行执行;
序列号重分配模块,调度线程为事务执行结果中因冲突而中止的事务重新分配一个新的递增的序列号,并将该事务及其新的序列号重新加入任务队列中;
二次并行执行模块,用于从序列号重分配模块生成的任务序列中提取事务及其序列号,并行地执行事务,将事务执行结果写入第一多版本存储模块中,完成事务的二次并行执行;
串行执行模块,调度线程为所有二次并行执行模块中的事务执行结果中因冲突而中止的事务重新分配一个新的递增的序列号,并以与并行执行模块相同的方法,串行地执行这些事务;
事务依赖三元组广播模块,用于将多版本时间戳排序模块产生的事务顺序及依赖关系广播至验证节点,包括:
生成模块,用于根据事务的事务读集和事务写集构建事务依赖三元组,并根据事务依赖三元组构建事务依赖三元组集;
广播模块,领导者节点将事务依赖三元组集打包为字节编码,并将该字节编码至验证节点;
事务依赖三元组接受与解析模块,用于解析从领导者节点处获得的事务依赖三元组并重构领导者节点并发调度过程中产生的调度图,包括:
序列号标签构建子模块,用于解析从领导者节点处获取的事务依赖三元组,得到解析结果;
依赖标签构建子模块,用于根据序列号标签构建子模块的解析结果重构领导者节点传输的调度图;
验证执行模块,用于并行执行事务依赖三元组接受与解析模块产生的调度图中的事务,包括:
第二多版本存储模块:存储由并行验证执行模块写入的多版本数据;
在本实施方式中,第二多版本存储模块与第一多版本存储模块分别为不同模块中用于存储多版本数据的子模块,其中,第一、第二仅用于名称区分,并不影响模块的功能。
并行验证执行模块,用于从任务队列中提取事务及其序列号,并行地执行事务,将事务执行结果写入第二多版本存储模块中,完成事务的并行执行;
消息处理子模块,用于处理事务依赖三元组接受与解析模块产生的调度图中的事务的执行结果;
任务调度子模块,用于根据事务依赖三元组接受与解析模块产生的调度图的验证性生成事务的并行执行顺序;
所述共识投票模块,用于在验证节点间同步区块执行结果并决定是否提交区块。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明权利要求所限定的范围。

Claims (10)

1.一种Tendermint系统中基于动态分析的事务并行执行方法,其特征在于,包括:
步骤1:领导者节点获取待执行事务;
所述待执行事务为预定义的包含特定字段的字符串,领导者节点持续地处理来自客户端的事务广播请求,直到本地事务数量超过一定阈值;
步骤2:领导者节点根据待执行事务构建事务依赖三元组,并将其广播至验证节点;
步骤3:验证节点接收事务依赖三元组并完成验证执行,并进行区块提交。
2.根据权利要求1所述的一种Tendermint系统中基于动态分析的事务并行执行方法,其特征在于,所述步骤2的执行过程中包含以下数据结构:
多版本存储中的数据项Item:存储了一个数据版本,包含以下三个字段:(1)string类型的value字段,用于存储数据;(2)int32类型的tid字段,用于存储数据的版本号,即写入此数据的事务的序列号;(3)int8类型的state字段,用于存储数据项状态信息,共有waiting、commit和abort三种状态,分别表示写入此数据的事务的执行状态为执行中、已提交和已中止;
存储某个键上的多版本数据的数据列MultiVersionLine:包含以下三个字段:(1)string类型的key字段,用于存储多版本数据的键;(2)int32类型的RTS字段,用于存储对该键中数据进行读取的事务的最大序列号;(3)Item数据组成的数组values字段,记为[]Item,用于存储多版本数据,字段中所有数据项根据其tid字段的大小从小到大排列;
多版本存储MultiVersionStore:string类型的键到MultiVersionLine类型的多版本数据列的映射,记为map[string]MultiVersionLine;
事务的依赖项DepSet:由string到*Item的映射,记为map[string]*Item,用于记录string类型的主键对应的多版本存储中的Item数据项的地址指针;
事务执行结果resultMsg:包含两个字段:(1)int32类型的事务序列号tid,用于表明所执行的事务;(2)string类型的事务执行结果state,当state的值为error时,表明事务因存在错误而被中止,当state的值为abort时,表明事务因冲突中止,当state的值为commit时,表明事务成功执行并提交;
事务依赖三元组TxTuple:用于记录事务的内容、序列号和依赖关系,包含三个字段:(1)string类型的事务的内容Tx,用于记录事务的内容;(2)int32类型的事务序列号tid,用于记录事务的序列号;(3)int32类型的事务最大读依赖maxDep,用于记录事务的依赖关系。
3.根据权利要求2所述的一种Tendermint系统中基于动态分析的事务并行执行方法,其特征在于,所述步骤2包括:
步骤2.1:初始化一个空的多版本存储,记为S,给每个待执行事务分配唯一的序列号,并根据序列号顺序对待执行事务进行排序,构建任务队列;
步骤2.2:工作线程循环地从任务队列中取出待执行事务及其序列号,并行地执行事务,将事务执行结果写入多版本存储中,并根据事务执行结果生成事务的事务读集R和事务的事务写集W;
步骤2.3:向执行结果中因冲突而中止的事务重新分配新的递增的序列号,并将该任务重新加入任务队列中,更新任务队列;
步骤2.4:对更新后的任务队列重复执行步骤2.2和步骤2.3,得到新的任务队列;
步骤2.5:对步骤2.4中更新后的任务队列中的事务进行串行执行,生成事务执行结果,并根据事务执行结果更新事务的事务读集和事务的事务写集,完成待执行事务的执行过程;
步骤2.6:领导者节点根据事务的事务读集和事务的事务写集构建事务的调度图,构建事务依赖三元组存储事务间的依赖关系,并根据事务依赖三元组构建事务依赖三元组集D;
步骤2.7:领导者节点将事务依赖三元组集D打包为字节编码,并将该字节编码广播至验证节点。
4.根据权利要求3所述的一种Tendermint系统中基于动态分析的事务并行执行方法,其特征在于,将所述步骤2.2中取出的待执行事务记为T且将该事务的序列号记为id,所述步骤2.2的执行过程包括以下三个阶段:
(1)读写集生成阶段:工作线程初始化DepSet类型的事务读集R和事务写集W;
每当事务读取键A时,如果R中存在该键,则读取R中属于该键的Item,否则,在多版本存储中寻找合适的数据项,方法为:如果映射S[A]不存在,则锁定S,并从键值数据库中读取键A的值vA,将S[A]设置为空的MultiVersionLine,然后将数据Item{value:vA,tid:-1,state:commit}插入S[A]中,将S[A]的RTS字段,即S[A].RTS置为id,然后释放S的锁;如果映射S[A]存在,且S[A].RTS小于id,则将S[A].RTS置为id;完成上述操作后,选择S[A]中版本号不大于id的且版本号最大的数据项进行读取,并将其加入R中;每当事务向键A写入数据v时,将Item{value:v,tid:id,state:waiting}插入W中;如果事务因错误中止,返回state字段为error的resultMsg消息,并结束事务执行;
(2)冲突消解阶段:将W中所有Item插入S中,如果在写入某个键A时,S[A].RTS大于tid,则认为事务发生了过时的写,将W中所有Item的state字段设置为abort,返回state字段为abort的resultMsg消息,并结束事务执行;否则,在W中所有Item都写入结束后,等待R中所有Item的state字段都变为commit;如果R中某个Item的state字段为abort,则将W中所有Item的state字段设置为abort,返回state字段为abort的resultMsg消息,并结束事务执行;
(3)事务提交阶段:将W中所有Item的state字段设置为commit,然后返回state字段为commit的resultMsg消息。
5.根据权利要求3所述的一种Tendermint系统中基于动态分析的事务并行执行方法,其特征在于,所述构建事务依赖三元组的方法为:领导者节点初始化事务依赖三元组集D为空TxTuple数组;领导者节点按序列号从小到大的顺序遍历所有resultMsg的state字段为commit的事务的序列号id及其事务内容tx,如果事务读集R非空,则将R中序列号最大的数据项的序列号记为d,否则令d=-1,将数据TxTuple{Tx:tx,tid:id,maxDep:d}加入D中。
6.根据权利要求1所述的一种Tendermint系统中基于动态分析的事务并行执行方法,其特征在于,所述步骤3的执行过程中包含以下数据结构:
事务标签txLabel:用于表示某个事务及其序列号,包含两个字段:(1)string类型的事务内容Tx,(2)int32类型的事务序列号tid;
序列号标签tidLabel:用于表示某个序列号对应的事务是否被提交,包含三个字段:(1)int32类型的序列号tid字段,(2)bool类型的done字段:done的值为true表示事务已经被提交,值为false表明事务尚未提交,(3)[]txLabel类型的depList字段:即事务标签的无序列表,用来表示事务依赖三元组中,最大依赖序列号为此数据结构的tid字段的所有事务序列号及其内容,用作事务并行执行的调度依据;
[]tidLabel类型的序列号标签的有序列表tidList:用于根据tid字段的大小从小到大排列所有序列号标签tidLabel;
从int32到*tidLabel的map[int32]*tidLabel映射tidMap:用于根据事务序列号快速检索序列号标签在tidList中的位置。
7.根据权利要求6所述的一种Tendermint系统中基于动态分析的事务并行执行方法,其特征在于,所述步骤3包括:
步骤3.1:验证节点将接收到的字节编码转化为事务依赖三元组集,并对事务依赖三元组集进行解析;
步骤3.2:根据步骤3.1的解析结果重构领导者节点的并发调度过程;
步骤3.3:根据重构出的领导者节点的并发调度过程,并行执行事务依赖三元组集中的事务;
步骤3.3.1:根据事务执行结果更新事务执行状态;
步骤3.3.2:根据领导者节点的并发调度过程确定可以并行执行的事务;
步骤3.4:在验证节点间同步区块执行结果并决定是否提交区块,完成验证节点间一致性的状态更新。
8.一种Tendermint系统中基于动态分析的事务并行执行装置,其特征在于,该装置包括:
事务获取模块,用于获取待执行事务;
多版本时间戳排序模块,用于对获取的待执行事务进行排序并进行模拟执行;
事务依赖三元组广播模块,用于将多版本时间戳排序模块产生的事务顺序及依赖关系广播至验证节点;
事务依赖三元组接受与解析模块,用于解析从领导者节点处获得的事务依赖三元组并重构领导者节点并发调度过程中产生的调度图;
验证执行模块,用于并行执行事务依赖三元组接受与解析模块产生的调度图中的事务;
共识投票模块,用于在验证节点间同步区块执行结果并决定是否提交区块;
所述事务依赖三元组广播模块进一步包括:
生成模块,用于根据事务的事务读集和事务写集构建事务依赖三元组,并根据事务依赖三元组构建事务依赖三元组集;
广播模块,领导者节点将事务依赖三元组集打包为字节编码,并将该字节编码至验证节点;
所述事务依赖三元组接受与解析模块进一步包括:
序列号标签构建子模块,用于解析从领导者节点处获取的事务依赖三元组,得到解析结果;
依赖标签构建子模块,用于根据序列号标签构建子模块的解析结果重构领导者节点传输的调度图。
9.根据权利要求8所述的一种Tendermint系统中基于动态分析的事务并行执行装置,其特征在于,所述多版本时间戳排序模块进一步包括:
第一多版本存储模块:存储由并行执行模块、二次并行执行模块和串行执行模块写入的多版本数据;
序列号分配模块,用于为待执行事务分配序列号,并按照序列号顺序对待执行事务进行排序,生成任务队列;
并行执行模块,用于从任务队列中提取事务及其序列号,并行地执行事务,将事务执行结果写入第一多版本存储模块中,完成事务的并行执行;
序列号重分配模块:调度线程为事务执行结果中因冲突而中止的事务重新分配一个新的递增的序列号,并将该事务及其新的序列号重新加入任务队列中;
二次并行执行模块:用于从序列号重分配模块生成的任务序列中提取事务及其序列号,并行地执行事务,将事务执行结果写入第一多版本存储模块中,完成事务的二次并行执行;
串行执行模块:调度线程为所有二次并行执行模块中的事务执行结果中因冲突而中止的事务重新分配一个新的递增的序列号,并以与并行执行模块相同的方法,串行地执行这些事务。
10.根据权利要求8所述的一种Tendermint系统中基于动态分析的事务并行执行装置,其特征在于,所述验证执行模块进一步包括:
第二多版本存储模块:存储由并行验证执行模块写入的多版本数据;
并行验证执行模块,用于从任务队列中提取事务及其序列号,并行地执行事务,将事务执行结果写入第二多版本存储模块中,完成事务的并行执行;
消息处理子模块:用于处理事务依赖三元组接受与解析模块产生的调度图中的事务的执行结果;
任务调度子模块:用于根据事务依赖三元组接受与解析模块产生的调度图的验证性生成事务的并行执行顺序。
CN202311107363.0A 2023-08-30 2023-08-30 一种Tendermint系统中基于动态分析的事务并行执行方法及装置 Pending CN117056034A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311107363.0A CN117056034A (zh) 2023-08-30 2023-08-30 一种Tendermint系统中基于动态分析的事务并行执行方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311107363.0A CN117056034A (zh) 2023-08-30 2023-08-30 一种Tendermint系统中基于动态分析的事务并行执行方法及装置

Publications (1)

Publication Number Publication Date
CN117056034A true CN117056034A (zh) 2023-11-14

Family

ID=88657092

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311107363.0A Pending CN117056034A (zh) 2023-08-30 2023-08-30 一种Tendermint系统中基于动态分析的事务并行执行方法及装置

Country Status (1)

Country Link
CN (1) CN117056034A (zh)

Similar Documents

Publication Publication Date Title
Dickerson et al. Adding concurrency to smart contracts
US8060880B2 (en) System using backward inter-procedural analysis for determining alternative coarser grained lock when finer grained locks exceeding threshold
CA2436517C (en) Method and apparatus for data processing
TWI352312B (en) Transactional memory using buffered writes and enf
US20130227194A1 (en) Active non-volatile memory post-processing
CN107113341B (zh) 用于数据划分的分布式关系数据库管理系统中事务的高吞吐量处理的系统
CN110675255B (zh) 在区块链中并发执行交易的方法和装置
US9274904B2 (en) Software only inter-compute unit redundant multithreading for GPUs
US20230275771A1 (en) Pre-execution of block chain transaction in parallel during block consensus
US11991298B2 (en) Method for the execution of an instance of a smart contract by means of a blockchain
CN110706101A (zh) 在区块链中并发执行交易的方法和装置
Wojciechowski et al. Model-driven comparison of state-machine-based and deferred-update replication schemes
CN113205417A (zh) 一种面向联盟链的交易并行处理方法及系统
Anjana et al. OptSmart: a space efficient Opt imistic concurrent execution of Smart contracts
Fekete et al. Consistency models for replicated data
US8789060B1 (en) Deterministic, parallel execution with overlapping regions
CN110706108B (zh) 在区块链中并发执行交易的方法和装置
Peng et al. FA-Stack: A fast array-based stack with wait-free progress guarantee
CN111767337B (zh) 区块的验证方法、装置及设备
CN117056034A (zh) 一种Tendermint系统中基于动态分析的事务并行执行方法及装置
CN110689344A (zh) 在区块链中并发执行交易的方法和装置
AU2017422723B2 (en) Data loading program, data loading method, and data loading apparatus
CN114625546A (zh) 一种数据处理方法及装置
Gorenflo Towards a New Generation of Permissioned Blockchain Systems
CN110515707A (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