区块链交易并行化分类

1 交易打包并行

1.1 有向无环图

有向无环图(DAG)是一种使用拓扑排序的有向图形数据结构,改变了区块链的块链式线性存储结构。在DAG中,每一笔新的交易都可以单独作为一个“区块”提交“共识”。DAG的共识机制也不再是传统的广播数据验证,而是根据规则传递前一区块的hash值,数据的记录存储可以是并行的,打破了块链式串行存储结构,从而提升区块链网络的吞吐量。

在这里插入图片描述

2 执行并行

2.1 锁方法

锁(locking)是一种悲观的并发控制方法,智能合约交易执行时对某个共享数据对象进行操作(读操作或写操作),都会对其请求加锁,只要加锁成功,就拥有了对该共享数据对象的控制权.若是排它锁,则在其释放前,其它智能合约交易不能再对该共享数据对象进行读取和修改;若是共享锁,则在其释放前,其它智能合约交易只能对该共享数据对象进行读取,但不能修改.Saraph和Herlihy提出了一种基于读写锁(read-writelock)的两阶段试探执行方法.在其方法中,区块链节点并行执行智能合约可以分为两个阶段:在第一阶段,节点并行执行所有合约交易.追踪每个合约交易的读集和写集(读取和写入的内存位置),通过对每一个存储位置关联一个读写锁检测冲突.每一个读操作会请求一个对应位置的读锁,每一个写操作会请求一个对应位置的写锁.一个合约交易如果请求一个已经被其它合约交易持有、会产生冲突的锁,那么这个合约交易就会被回滚,并推迟到下一个阶段执行.也就是说,如果两个合约交易访问了同一个内存位置,并且至少其中一个是写操作,那么这两个合约交易就会被认为是冲突的,其中一个交易将被提交,另外一个交易将被放弃.在当前阶段结束之前,不会释放任何锁,即使是被终止的合约交易持有的锁也不会释放.在第二阶段,节点按照顺序串行执行那些因为冲突而被回滚的合约交易.在其实验中,重新执行以太坊2016年的合约交易可以实现8倍的加速.当冲突程度较低时,试探执行的方法效果很好,而冲突程度较高时,因为存在大量的回滚和重新执行的操作,整体效果不佳.该方法没有使用交易依赖图,出块节点和验证节点都使用相同的方法并行执行,虽然不会占用额外存储空间,但也未能将并行性发挥到最大.

2.2 多版本并发控制方法

多版本并发控制(MVCC)是一种可以解决读写冲突的无锁并发控制策略,即使存在读写冲突,也可以实现不加锁的非阻塞并发读.每个智能合约交易在执行写操作时不会直接覆盖数据项,而是会保留数据项的每个版本.每个读操作都可以读取到其想要读取版本的数据,因此可以避免因为读太迟而导致的交易冲突.总之,读操作不用阻塞写操作,写操作不用阻塞读操作,多版本并发控制有效减少了交易冲突.Zhang等提出了基于多版本交易排序(MVTO,multi-versiontransactionordering)的并行方案.出块节点可以使用任何并发控制技术生成一个序列化了冲突交易的调度.在执行过程中,出块节点记录每个合约交易的写集,并将这个写集保存到区块中.然后出块节点重新调整这些交易在区块中的顺序以匹配刚才生成的调度.验证节点基于新区块中的交易顺序和写集和构建一个关于冲突数据对象的“写链”,其预先确定了这些交易的竞争关系和优先级.然后验证节点通过使用“写链”在运行时解决冲突以产生确定性的结果,从而完成对该区块的有效性验证.其在“写链”上使用了多版本并发控制,使得执行过程中进一步减少冲突.其实验表明,该方法使用具有3个线程的线程池,在验证区块时,可以实现大约2.5倍的加速.

2.3 软件事务内存方法

软件事务内存(STM)作为一种新型的并行编程模式,相较锁机制存在代码复杂度高和易死锁等问题,STM允许开发者将一组需要访问共享内存的操作封装成一个事务,然后以原子操作的方式运行.该事务满足原子性和独立性,原子性要求这组操作要么都执行成功,要么都不执行.独立性意味着这组操作所做的更新仅在成功提交时才对共享内存可见,因此,多个事务可以并行执行,具有乐观性质.
STM会为每个智能合约交易创建一个STM事务,通过分解智能合约的每一步操作指令,使用STM.read(x,v)替代智能合约中的读操作,使用STM.write(x,v)替代智能合约中的写操作,以此来控制并行的多个合约交易对共享内存中变量的访问.如果一个合约交易终止了,则STM会重新为这个智能合约交易创建一个新事务,直到成功提交该事务
基于乐观软件事务内存系统(optimisticSTM),Anjana等人提出了一种高效的无锁并行执行框架.如图所示,出块节点基于STM多线程并发地执行所有合约交易,最终可以得到一个有冲突的交易集合(使用交易依赖图表示)和一个无冲突的交易集合(被称为并行箱).验证节点接收到新区块之后,分两个阶段确定性地并行执行新区块中的合约交易.第一阶段,所有线程从并行箱中取智能合约交易,然后可以直接并行执行,因为并行箱中的交易不存在任何冲突.第二阶段,并行箱中的智能合约交易执行完之后,开始根据交易依赖图执行那些具有冲突的交易.最后将本节点此时产生的最终状态和区块中记录的最终状态进行对比,如果一致,则接受该区块,如果不一致,则丢弃.在其实验中,出块节点和验证节点都基于多版本时间排序的STM实现智能合约的并行执行,相较串行执行分别得到了4.55倍和7.84倍的速度提升.

在这里插入图片描述

2.4 交易处理架构“执行-排序-验证-提交”

大多数的区块链采用如图所示的交易处理架构“排序-执行-验证-提交”,这种架构是串行的.一方面,出块节点挑选一批交易进行排序和执行,可以完成执行的交易数量受限于当前出块节点的最大执行能力;另一方面,验证阶段位于出块阶段之后,需要重新执行一遍新区块中的智能合约交易.
在这里插入图片描述

在出块阶段,将执行交易从出块节点中分离,并将“执行交易”置于“排序交易”之前,即构成一种新的交易处理架构“执行-排序-验证-提交”,这种架构允许不同的节点之间并行执行来自不同客户端的交易,从而提高区块链系统的吞吐率.在许可链中,所有节点都是互相信任的,可以为出块节点和验证节点提前确定一批合约交易及其执行顺序,然后让出块节点和验证节点同时并行执行这一批合约交易,这将能极大缩短验证新区块的时间,从而提高区块链系统的吞吐率.

2.5 出块节点和验证节点并行

对于许可链,节点间是互相信任的,可以由专门的节点(可以是出块节点)选择一批新交易进行排序,再广播给其它节点执行.
因为交易集和出块节点在此刻是确定的,那么可以让所有节点(包括出块节点和验证节点)同时执行交易集,等待出块节点执行完所有智能合约交易之后,出块节点将包含执行结果的新区块广播给其它节点,其它节点通过比较自己的区块链最终状态和出块节点的区块链最终状态是否一致以判断出块节点生成的新区块的有效性

在这里插入图片描述

3 粗粒度并行

3.1 状态通道

状态通道的转移方式主要是链下通道交互、链上清算。开辟联通交易双方的通道,锁定区块链部分状态,将交易中间过程和相关的大量数据计算与事务处理放在通道内处理,只把最终的状态提交到链上进行开辟通道前状态记录更新,通道内数据交互不需要经过链上共识,以节省时间达到提高系统效率的目的。使用状态通道的一般流程为:锁定状态、开辟通道,通道内数据交互,关闭通道、提交更新状态、链上清算。在通道内的数据交互与状态更新是不需要进行区块链共识的,因此能够提高区块链系统吞吐量。

3.2 分片技术

区块链主要包括网络分片、交易分片、状态分片3种分片方式,其中,网络分片是基础,状态分片是瓶颈。网络分片通过一定的组织方式将整个网络分成不同分片,各个分片并行处理整个区块链中的部分交易,各部分交易完全不同,从而同时完成多笔交易验证。交易分片使得各个网络分片对交易具有更强的处理能力,其将客户端的跨片交易分成若干个相关的子交易,不同分片的跨片交易可以并行处理。为了降低各个节点存储账本的压力,状态分片将各部分完全不同的账本分别存储在各个分片(分片内的节点往往存储同一版本的账本),整个分片网络组成一个完整的账本。在现行的技术条件下,网络分片和交易分片都具有比较理想的实现方式,而实现状态分片还存在很多技术问题,状态分片制约着分片技术的发展。

3.3 分区方法

分区方法被王嘉平等提出的Monoxide区块链采用.如图所示,系统会被分为多个区域(zones),每个分区被称为一个异步共识区.每个异步共识区都拥有自己的区块链账本、状态数据库等,能够在各自的分区内完成交易的处理和区块的共识.不同的合约交易会根据规则映射到某个分区进行处理,不同分区的合约交易因此可以被并行执行,从而提高了整个区块链系统的吞吐率.分治并行执行模型都会存在因为算力稀释导致子链安全性下降的问题,这是因为每个子链只是由系统中的部分节点运行.对于区块链来说,越多的节点参与共识,黑客聚集大于51%算力的难度就越大,系统就越安全.与其它分治并行执行模型不同的是,王嘉平等提出了“连弩挖矿”方法以应对算力稀释导致的安全性下降问题.其实验表明,在1200台虚拟机上运行48000个节点,实现了超过以太坊1000倍的吞吐率.同时,随着分区数量的增加,吞吐率可以实现线性增长.
在这里插入图片描述

3.4 侧链方法

侧链方法同样被许多区块链采用以实现智能合约交易并行执行.aelf是一个基于多级侧链的并行化区块链框架,其主链负责统一规划和索引,侧链独立运行,每条侧链专门负责一项功能服务.不同功能服务的合约交易可以在所属的侧链上并行执行,因此得以提高整个区块链系统的合约交易执行效率.同时,侧链可以通过主链的验证以实现跨链交互.此外,每个子链中采用了资源互斥分组方法,交易集会根据冲突关系被划分为多个分组,同组内的合约交易串行执行,不同组的合约交易并行执行.
在这里插入图片描述

3.5 群组方法

群组方法被FISCOBCOS用来实现其分治并行执行模型.每个区块链节点都可以根据实际业务关系,自由组成多个群组.如图所示,每个群组拥有一个属于自己的独立账本,其交易处理、数据存储和区块共识都是与其它群组相互隔离的.这种架构在保障隐私性的同时,允许不同群组间的交易合约可以被并行执行,从而提高了整个区块链系统的处理能力.
在这里插入图片描述

4 链下计算

链下计算的主要思想是将原本置于链上处理的各类计算、事务,放到链下处理,而链上仅作数据验证,以此间接提升区块链处理数据的速度。链下计算实现方案主要包括链下可信执行环境(TrustedExecutionEnvironment,TEE)计算、链下安全多方计算、链下激励驱动3种方式。

1)链下TEE计算。将链下的计算放在TEE中进行,TEE提供基于硬件的计算机密性和安全性,Intel芯片的SGX与ARM芯片的TrustZone都可以用于链下TEE计算。

2)链下安全多方计算。链下计算通过安全多方计算的方式实现数据可用不可见的应用方式,类似TEE提供硬件芯片的加密安全,多方安全计算提供基于软件算法的加密。具体而言,链下安全多方计算首先锁定链上的公共状态,然后将数据分发到链下进行安全多方计算,最后将各计算结果组合并返回链上进行验证。

3)链下激励驱动。激励驱动型链下计算是采用激励机制,用于激励处理计算任务的求解者和检验求解者计算结果正确性的验证者,计算正确的参与者可获得奖励,反之受到惩罚。链下计算扩容方案在提升区块链性能的同时,较好地兼顾了非中心化和安全性,具有各种优异特性,前景可期。但技术实现难度较大,想要真正取得理想效果较难。目前,已经部署运行的链下计算项目主要包括Truebit、Enigma与Ekiden等

参考文章

  1. 区块链智能合约并行执行模型综述
  2. 区块链分片技术综述
  3. 区块链扩容技术研究综述

猜你喜欢

转载自blog.csdn.net/qq_40713201/article/details/125351127