提高区块链系统性能和可扩展性的方法

区块链系统受制于著名的理论:“不可能三角理论”,即安全性、去中心化和可扩展性三者可兼得。为了达到去中心化的目的,全网所有节点共同维护数据,共同检验交易,POW共识机制还要求节点做无价值的计算来争夺记账权,这导致了许多冗余的存储和计算,但为了安全性这些似乎是必要的。所以,如何提高区块链的性能,成为了一个重要的问题。目前,提高区块链系统性能和可扩展性的方法主要有:分片(Sharding)、扩展的共识协议(Scalable consensus)、有向无环结构(DAG)、优化系统实现方法、离链计算(Off-chain computing)及侧链(Sidechain)。

分区

分区(Sharding)是一种传统的数据库技术,它将大型数据分成更小、更快、更容易管理的多个碎片,并将这些碎片放置在不同的服务器上,用于提高性能和可用性。具体到区块链上,就是将区块分片,每个节点只需要处理一小部分输入的交易,并且通过与网络上的其他节点并行处理就能完成大量的验证工作,即将验证、打包的过程并行化,这样可以使交易量提到千笔每秒,并且还能减少交易费用。分片策略则有很多种,比如网络分片、交易分片、状态分片等,这些策略都各自有其优势和存在的问题,应视情况选择。

扩展的共识协议

另一个提高区块链性能和可拓展性的方法是采用新的可扩展的共识协议。PoW工作量证明的缺点是挖矿造成大量的资源浪费,共识达成的周期较长,不适合商业应用。PoS权益证明是POW的一种升级共识机制,是根据每个节点所占代币的比例和时间,等比例的降低挖矿难度,从而加快找随机数的速度,这在一定程度上缩短了共识达成的时间,但仍然需要挖矿,本质上没有解决商业应用的痛点。另一种共识机制是DPoS权益证明,类似于董事会投票,持币者投出一定数量的节点,代理他们进行验证和记账,这样可以大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证,但整个共识机制还是依赖于代币,很多商业应用是不需要代币存在的。PBFT拜占庭容错算法性能较高,具备最终性且安全性好,但去中心化程度弱,节点系统封闭,且容错率低。Ripple共识协议:PCA对交易分两个阶段完成,第一阶段是达成交易集(即未打包进入区块的合法交易的集合)的共识,第二阶段是对新生成的区块进行提议,最终形成被共识过的区块。它通过子网络内部相互信任,从而达到了更加迅速的共识速度,并保证了最终性,但很容易导致分叉,安全性较弱,并且非常中心化,很大一部分的记账节点实际上是由Ripple自己控制的。由以上的协议,可见要通过改变协议提高区块链系统的可拓展性和性能,则势必导致去中心化程度的减弱,所以,如何在这些因素之间取得一个平衡,或者要看趋向于哪一边,还得看具体的应用要求。

有向无环结构

第三个方法是将区块链设计为有向无环结构(DAG),与由Block区块组成的单链只能按出块时间同步依次写入不同,DAG是由交易单元组成的网络,可以异步并发写入交易,从而可提高性能。

优化系统实现方法

优化系统实现方法则是通过优化系统架构、代码结构、数据存储效率、网络发送效率等,提高区块链性能。

离链计算及侧链

离链计算(Off-chain computing)是指在主链之下进行交易,中间交易不进入主链确认,待最后一笔交易完成后回归到主链。侧链的概念是通过双向锚定实现了主链与侧链之间的价值转移,侧链的目的是为了扩展主链的功能和性能。与区跨链分片机制不同,后者是对主链划分。侧链的本质是,首先把你的一部分比特币(或者以太坊)锁定在主链上,并且在侧链上对你的货币进行操作,当操作周期结束之后再在主链上结算。跨链交易要解决链与链之间的信任问题,验证跨链之间的交易数据可以通过公证人机制或者区块头Oracle + SPV简易验证解决。跨链交易包含多个子交易,这些子交易构成了一个事务,可以通过等待足够多确认,区块纠缠,DPoS/xBFT等方法确定子交易被最终确认,永不回滚。此外,哈希时间锁可以保证交易的原子性,所有子交易要么都成功,要么都失败。单一托管人、联盟托管人、智能合约托管则可以管理资产跨链转移时的锁定资产。比特币的闪电网络也可以认为是一种侧链,因为它允许用户A和用户B不在主链上直接交易,而是在“侧链”上进行频繁地进行了N笔交易之后,再把最后的交易结果同步到主链上。

在以太坊上构建侧链,需要用到Plasma技术。Plasma由两个关键部分设计组织成:重构所有区块链运算进入一套MapReduce functions,以及一种激励抵制“扣块攻击”的股权证明机制。可理解为一套将大量运算处理为可拓展的分布式运算的办法,以及一种特殊的股权证明共识机制。Plasma的设计类似于一种网络分片,或者说分片状态下的共识、记账、计算处理。这种构建通过在主链上编写智能合约,使用欺诈证明,可以在主链上强制状态的锁定。我们将区块链编组为一个树形的分层结构,将每一个区块链视为一个独立的分支,强制将整个区块链的历史,和可MapReduce的计算提交到Merkle证明。通过主链强制将某个链的帐本信息打包到子区块链中,这个链将通过最低的信任达到不可思议的扩容。子链负责处理具体交易,一个人并不需要关心根链上所有的交易数据,仅仅需要关心设计其利益的Plasma的子链数据。根链负责以智能合约的方式持有资金,但账本记录在Plasma子链上。

猜你喜欢

转载自blog.csdn.net/Runner1st/article/details/88046165