Page 295 - 《软件学报》2020年第9期
P. 295

2916                                 Journal of Software  软件学报 Vol.31, No.9,  September 2020

         需要 5 000gas,而写操作需要 20 000gas.在这种情况下,当用户执行查询验证时,一个考量是如何用尽量少的 gas
                                            2
         来达到验证的目的.基于此,作者提出了 GEM -Tree 这一数据结构,来达到减少 gas 开销的目的.一般验证查询结
         果需要区块链以及用户端均产生相应的验证签名,并在查询返回结果之后,通过签名进行查询结果验证.针对区
         块链这一读写操作开销差别极大的情况,作者提出利用代价低的读操作代替代价高的写操作的思想,并提出了
         SMB 树.SMB 树是一种压缩的默克尔树,它并不显示地存储默克尔树的非根节点,而是只在区块中存储其根节
         点的哈希值.整个智能合约的索引包含一个完整的默克尔树以及多个 SMB 树.新加入的数据总是先加入到
         SMB 树中.由于 SMB 树一般规模较小,所以针对插入操作,其 gas 开销较小.由于区块链中包含一个默克尔树和
         多个 SMB 树,当执行范围查询时,服务器需要搜索整个默克尔树,并在相应数据上执行查询处理过程.在得到结
         果的同时,服务器也需要将包含结果的默克尔树或者 SMB 树的验证信息全部返回.客户端获得所有验证信息
         后,需要利用相应的验证重构默克尔树或 SMB 树并进行查询验证.
             Veritas [96] 针对数据库共享表的情况,设计支持验证的区块链.Veritas 将数据存储在数据库中,并且允许共享
         表可被网络中的节点访问.在数据库之外,数据签名以及共识投票则存储在区块链中.为了保证共享表在各个数
         据库的一致性,Veritas 利用可信的节点来对事务进行排序.与一般的区块链系统不同,Veritas 的各个节点只在自
         身的数据库中执行针对共享表的事务.所有节点在一段时间内广播其所有新生成的日志以及执行事务所进行
         的读写数据.所有节点对于广播的日志以及数据,利用投票的方式来确保一致性.
         5    区块链可扩展性

             分布式系统的可扩展性主要考虑两个方面的因素:每秒处理事务数(TPS)和网络节点数.而区块链在这两方
         面均受到一定的制约        [23] .其原因在于:为了满足拜占庭容错,节点间需要满足共识协议条件.无论是基于计算的
         共识协议还是基于通讯的共识协议,都会产生极大的计算开销和网络开销.另一方面,传统的中心化系统可利用
         平衡不同节点的工作量等方式提高系统的吞吐量.但是在区块链中,节点均存储区块链中的数据且均需执行相
         应的事务.
             文献[97]讨论了提高区块链吞吐量的诸多挑战.部分工作,例如 BigchainDB                    [87] 等,针对比特币所支持的
         UTXO 这类交易数据模式进行优化,以提高可拓展性.而大部分提高区块链吞吐量的工作针对的是 Account 模
         型下的数据模式.由于区块链系统中,共识的达成是基于区块的粒度,所以一种简单的提高吞吐量的方法是通过
         调整系统的各个参数,例如区块的大小,使得系统的 TPS 得到提升.该种方法在公有链环境下对性能有一定的提
         升.但是 StreamChain [98] 指出,改变区块的大小可以提高基于工作量证明共识协议下的区块链系统吞吐量.而在
         联盟链中,多采用的是基于通讯的共识.在这种情况下,增加区块的容量反而会使系统性能降低.部分工作提出
         了将区块链的链式结构拓展到无环图              [99,100] 或利用侧链 [101−130] 的方式,以提高区块链的共识效率.但是由于无环
         图同样可以产生一个全局的区块顺序,并且可以根据该序列转化为链式结构,因而本节主要针对链式结构下提
         高区块链可扩展的技术,尤其是分片以及链下事务处理技术.

         5.1   基于分片的区块链系统
             为了提高吞吐量,将数据库中的分片技术引入到区块链系统中是研究的一个热点问题                              [104] .表 4 总结了部分
         区块链可扩展性的特点.
             Elastico [49] ,RapidChain [50] ,Omniledger [105] 等系统利用分片技术大幅度提升了系统的吞吐量.在一般情况下,
         系统中所有节点划分为多个片且每个片包含多个节点.这样,每个片都具有一定的算力可以支持区块链的共识
         协议.由于采用了分片技术,且区块链系统运行在非可信环境中,片的划分需要保证存在恶意节点前提下,依然
         可以安全进行事务处理.因此,现有的基于分片的区块链工作大多需要在每个事务处理过程中,进行片的随机再
         构建等操作     [23,49,105] ,以保证恶意节点无法控制一个片.同时,为了降低共识阶段的开销,大多数系统会选取一部
         分节点组成委员会,且只有委员会节点参与共识阶段.为了保证安全性,部分区块链会在一段时间后,对委员会
         节点进行重新选择或替换.
   290   291   292   293   294   295   296   297   298   299   300