一种面向联盟链的交易并行处理方法及系统

文档序号:26142280发布日期:2021-08-03 14:27阅读:196来源:国知局
一种面向联盟链的交易并行处理方法及系统

本发明属于区块链技术领域,涉及一种交易并行处理技术,具体是一种面向联盟链的交易并行处理方法及系统。



背景技术:

区块链是一种面向互不可信环境的多方共同维护的分布式账本,具有去中心化、不可篡改、历史数据可追溯等特点。然而,作为一种去中心化的拜占庭容错的分布式系统,区块链系统在计算和存储方面的性能较低,严重制约了系统吞吐,难以满足企业级应用的高吞吐需求。

在公有链系统中,共识往往是整个系统的瓶颈所在。但在联盟链中,基于更好的网络环境和更高效的共识算法,交易执行的效率逐渐成为影响系统吞吐的关键所在。传统的区块链采用串行执行交易的方式,串行执行能够保证交易在所有节点上执行的一致性,但并没有充分利用大多数计算机多核架构的优势,性能较低,难以满足企业级应用的高吞吐需求。而以fabric为代表的一些联盟链采用eov架构,即预执行-共识-验证三个阶段。在验证阶段,利用乐观并发技术来验证交易,从而实现了较高的执行效率。但存在交易被中止的情况,这在某些应用场景下往往是难以接受的。

因此,为了提升交易执行性能,提高整个系统的吞吐量,从而能够较好的满足高性能需求,同时保证百分百的交易提交率,有必要提出一种面向联盟链的交易并行处理方法。



技术实现要素:

为了解决现有技术存在的不足,本发明的目的是提供一种面向联盟链的交易并行处理方法。以提高区块链节点的交易执行性能为目标,针对现有技术的缺失,提出一种面向联盟链的交易并行处理方法。在交易的并行处理过程中,本发明首先通过静态分析或模拟执行的方法确定每笔交易的读写集,再根据交易读写集以及在区块中的顺序使用排序锁对交易进行并行执行。由于使用了锁机制保证读写集冲突的交易不会并行执行,保证了不存在交易会被中止,即使存在预执行读写集与实际读写集冲突的交易,也可以通过再次执行来提交,从而实现了百分百的交易提交率。

本发明提供了一种面向联盟链的交易并行处理方法,所述方法包括如下步骤:

步骤1:对客户端发起的交易提案进行预处理;

步骤2:通过共识算法对交易进行排序打包并生成区块,保证每笔交易在被打包的块中拥有一个全局唯一的顺序;

步骤3:区块链节点收到区块后,对区块内所有交易以确定性排序锁的方式加锁;

步骤4:按排序锁并行执行区块内的交易;

步骤5:对于依赖交易,如果正式执行期间实际访问的键与步骤1中确定的读写集相同,则执行该交易;如果正式执行期间实际访问的键与步骤1中确定的读写集不同,则中止该交易,然后使用实际执行的读写集尝试重新获得锁并执行。

步骤1中,所述预处理是指利用静态分析或者模拟执行的方法确定交易的读写集,所述读写集是指利用静态分析或模拟执行的方法获得该合约实际运行时需要访问的状态;

所述步骤3进一步可以包括以下步骤:

步骤3-1:区块链节点启动锁管理线程对所有交易进行锁管理;

步骤3-2:锁管理线程按区块中交易的顺序依次扫描每笔交易,并对该笔交易所需的读集和写集分别尝试获取读锁和写锁,从而保证交易按区块中的顺序依次获得执行所需的锁。

所述步骤4进一步可以包括以下步骤:

步骤4-1:对于已经获得所需读锁和写锁的交易,区块链节点维护一个工作线程池并行执行,执行完毕后通知锁管理线程释放相应的锁;

步骤4-2:锁管理线程将回收的锁重新分配给等待锁的交易,若有交易获得所需读锁和写锁,则通知工作线程池执行,如此反复直到区块内交易执行完毕。

步骤5中,所述交易重新执行是指将该交易的执行顺序放至当前所有交易的最后,重新等待锁管理线程分配相应的锁;所述依赖交易是指读写集依赖于某些键的值,这些交易的读写集会随着依赖键值的变化而变化,从而导致预执行的读写集与实际读写集不符的情况。

本发明还提供了一种实现上述并行处理方法的系统,所述系统包括:预执行模块、共识模块与交易并行执行模块。

所述预执行模块使用静态分析或模拟执行的方法获得交易对应的读写集,并附在交易中。

所述共识模块使用拜占庭共识协议,如pbft,对交易进行共识从而打包出块。

所述交易并行执行模块则使用本发明提出的交易并行处理方法,利用排序锁对交易进行并行执行。

本发明的有益效果包括:本发明实现了区块链节点上交易的并行处理,从而提升了交易在节点上执行的性能,提高了整个联盟链系统的吞吐。同时,本发明利用了排序锁确定性并发的特性,保证了百分百的交易提交率,并保证交易能够以确定性的顺序提交,这对于保证区块链上各个节点的状态一致至关重要。同时,本发明方法也能够在公链或私有链上进行使用,用于提高公链或私有链的交易并行处理速度。

附图说明

图1是本发明方法执行流程图。

图2是本发明区块链节点中交易流转过程示意图。

图3是本发明交易并行处理具体的实施例中锁的分配情况示意图。

图4是本发明交易并行处理具体的实施例中各线程执行情况示意图。

具体实施方式

结合以下具体实施例和附图,对本发明作进一步的详细说明。实施本发明的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本发明没有特别限制内容。

本发明的整体流程如图1所示,其中的核心逻辑为锁管理线程和工作线程部分,对应伪代码如下所示,其中锁管理线程先将共识交易中得到的交易集合transactions中的交易按序放入等待队列waitqueue中,然后尝试给等待队列中在队首的交易分配锁,若该交易获得所有锁则将其从等待队列中放入就绪队列readyqueue中,否则阻塞的等待锁。

工作线程则不断尝试从就绪队列中获取已经就绪的交易,若拿到了就绪交易,则执行就绪交易并获得实际的读写集,执行完毕后释放该交易对应的锁,并判断实际读写集和原读写集是否相同,若相同则提交该交易的更改,若不相同,则更改该交易的读写集,并将该交易再次放回等待队列的队尾,等待重新分配锁和执行。实际执行中交易在两个队列与工作线程中的流转情况也可见图2。

锁管理线程伪代码

输入为共识后的交易transactions

工作线程伪代码

本发明涉及到的术语及其解释如下:

读写集:某笔交易执行过程中需要读取和写入的键值。

为了提高在区块链节点上交易的执行效率,本发明提出了一种面向联盟链的交易并行处理方法。每个区块链节点都部署了一个完整的智能合约,并且交易经过共识,已经确定全局唯一的顺序,这为区块链节点采用排序锁的方式并行执行交易奠定了基础。

本发明提出的面向联盟链的交易并行处理方法包括以下具体步骤:

步骤1:对客户端发起的交易提案进行预处理,所述预处理是指利用静态分析或者模拟执行的方法确定交易的读写集,即该合约实际运行时需要访问的状态;

步骤2:通过共识算法对交易进行排序打包并生成区块,从而保证每笔交易在被打包的块中拥有一个全局唯一的顺序;

步骤3:区块链节点收到区块后,对区块内所有交易以确定性排序锁的方式加锁,具体步骤如下:

步骤3-1:区块链节点启动锁管理线程对所有交易进行锁管理;

步骤3-2:锁管理线程按区块中交易的顺序依次扫描每笔交易,并对该笔交易所需的读集和写集分别尝试获取读锁和写锁,从而保证交易按区块中的顺序依次获得执行所需的锁;

步骤4:按排序锁并行执行区块内的交易,具体步骤如下:

步骤4-1:对于已经获得所需读锁和写锁的交易,区块链节点维护一个工作线程池并行执行,执行完毕后通知锁管理线程释放相应的锁;

步骤4-2:锁管理线程将回收的锁重新分配给等待锁的交易,若有交易获得所需读锁和写锁,则通知工作线程池执行,如此反复直到区块内交易执行完毕;

步骤5:对于依赖交易,如果正式执行期间实际访问的键与步骤1中确定的读写集相同,则执行该交易;如果正式执行期间实际访问的键与步骤1中确定的读写集不同,则中止该交易,然后使用实际执行的读写集尝试重新获得锁并执行。

实施例1

本实施例是对交易进行排序锁并行处理的方法。设有一区块中包含如下交易,系统中的工作线程数为2:

t1:a=a+1;

t2:b=b+1;c=c-1;

t3:c=c+1;

t4:d=b+c;

其中,t1-t4为四个待执行交易,a、b、c、d为交易涉及的四个键值。

首先,对区块中的交易进行静态分析或模拟执行从而获得对应的读写集如下:

t1:read(a),write(a)

t2:read(b,c),write(b,c)

t3:read(c),write(c)

t4:read(b,c),write(d)

之后,按照区块中确定的交易顺序,通过排序锁并行处理上述四个交易。整个过程中各键值锁的状态如图3所示,其中黑色块代表该交易获得所有锁后正在执行,白色块则代表交易持有对应键值的锁,但仍有未获得的锁,处于等待状态;工作线程中交易的执行过程则如图4所示。下面详细说明整个过程。首先,在0时刻,锁管理线程依次扫描所有交易,t1先获得键值a的写锁,此时t1获得所有读写集的锁,可放入工作线程池进行执行;t2获得键值b和c的写锁,同样放入工作线程池进行执行;由于c的写锁被t2占用,t3需要等待;同理,t4只能获取d的写锁,也需要等待。等到1时刻,t2执行完毕并释放键值b、c的写锁后,锁管理线程会按未获得锁的交易在区块中所处的顺序,再次分配锁。首先是对于t3,尝试获取键值c的写锁,由于此时t2执行完后c的写锁被释放,t3可以拿到c的写锁并被放入工作线程池进行执行;其次是t4尝试获取键值b和c的读锁,由于c的写锁已被t3占用,所以t4只能获得b的读锁。等到2时刻,t3执行完毕释放c的写锁后,锁管理线程将c的读锁分配给t4,此时t4集齐所有锁,被放入工作线程池执行。整个执行过程,t1、t2并行,等t1、t2执行完后依次执行t3、t4。

实施例2

本实施例是对交易进行串行执行的方法。设区块中的交易同实施例1:

t1:a=a+1;

t2:b=b+1;c=c-1;

t3:c=c+1;

t4:d=b+c;

若上述交易使用串行执行的方法,则按照t1、t2、t3、t4的顺序逐个执行,总耗时为4笔交易各自耗时总和,相比本发明的方法多出一个t1的执行时间。

实施例3

随着整个交易集合中读写集冲突的减少,本发明的并行处理方法能够在某一时间段内同时处理的交易量更多,相较于串行处理方法所需要的时间更少,因此本发明的优势会随着交易之间的读写集冲突减少而增加。

本实施例是在交易间冲突较少的情况下,串行执行和本发明所述并行执行方法的时间对比。假设区块中包含如下交易,执行所需时间均为1秒:

t1:a=a+1;

t2:b=b+2;

t3:c=c+3;

t4:d=d+4;

对上述交易使用串行执行的方法,则按照t1、t2、t3、t4的顺序逐个执行,总耗时为4笔交易各自耗时总和,即4秒,而使用本发明所述方法,若cpu核数足够,则可以实现4笔交易并行执行,即所耗时间为4笔交易中耗时最长的交易所需时间,即1秒。大大减少了区块中交易的执行时间。

参考文献

[1]thecasefordeterminismindatabasesystems,vldb,2010

[2]anevaluationoftheadvantagesanddisadvantagesofdeterministicdatabasesystems,vldb,2014

[3]anoverviewofdeterministicdatabasesystems,communicationsoftheacm,2018

本发明的保护内容不局限于以上实施例。在不背离本发明构思的精神和范围下,本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。

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