今年以来,基于区块链技术构建的各类 Web3 项目蓬勃发展,以 X to earn 及数字藏品为代表的诸多应用引爆了市场,吸引了大量传统行业的用户与资金进入 Web3 行业。
然而随着上层应用交易量的逐渐增多,应用对底层区块链系统的性能要求变得更加苛刻。因此,如果没有强大的底层性能支持,这些上层 Web3 应用将很快遇到增长的瓶颈。而这,也就再次引出了困扰区块链行业已久的扩容问题。
是的,自区块链行业诞生以来,扩容几乎是伴随着整个行业一个永不过时的核心议题。然而经过了多年发展,除了通过牺牲去中心化而换取性能的折中方案,和以 Rollup 为代表的链下扩容技术,区块链的底层性能似乎依然没有得到本质的提升。
那么,制约整个区块链系统性能提升的主要瓶颈在哪里,又有哪些方面存在继续优化的空间呢?要回答这些问题,我们还要先从区块链系统的基本特点谈起。
区块链系统存在的根本意义,在于给用户提供一个可信任的协作平台,因此区块链系统也被称为「信任的机器」。这种最基本的目标决定了区块链系统必须要满足以下一些基本特点。
首先,信任不是凭空产生的,用户之所以能够信任区块链中存储的数据,不仅在于其无法篡改,更重要的是其可以被高效地验证,这就是区块链系统的可验证性。
典型的区块链系统如比特币、以太坊,其链中存储的交易数据,都以各种「树」型结构而存在。如果你曾尝试阅读过相关技术文档,那么你一定对诸如 Merkle Tree(默克尔数),或者 Merkle Patricia trie 这样的名字有印象(这里不需要读者理解这些技术名词,只要对名字有印象即可,其示意简图如下)。而之所以区块链普遍使用这类「树」结构存储数据,其实是为了满足其数据可验证的基本需求。
虽然从理论上讲,任何用户只要下载了区块链系统的所有数据并重新执行全部交易,就可以验证任何想要验证的数据,但是这种模式显然极为低效,也无法满足区块链使用者频繁验证交易的需求。
而树状结构的好处就在于,系统只需要提供几个关键节点的信息,就可以证明交易的存在。举个不太恰当的例子,就像同样采用树状结构的住宅地址一样,只要经过省、市、区等少数几个关键节点的确认,就可以验证一个地址的有效性,这种验证方式相比遍历式的搜索效率显然获得了大幅提高。
这种可验证的数据结构也就成为了区块链存储系统必须具有的特性之一。
区块链是一个活的系统,其系统中存储的数据也随时因为用户的操作而产生变化。小到每个人的账户余额,大到一个智能合约的最新状态,都在随着区块链的不断延伸而改变。
而所有这些不同版本的状态,都要完整的保存在区块链的存储系统中,这便是我们所说的「多版本」。
区块链系统的历史数据会随着运行时间的增长而持续增长,在公链领域也被称为状态爆炸。随着区块链不断打包存入新的交易,整个全节点的存储容量将会迅速提升。
目前这个情况在比特币中表现的不明显,毕竟比特币每个区块基本只存储相对简单的转账信息。但是对于以太坊这种智能合约公链,由于需要存储更多的智能合约代码,历史数据的增长速度就会更为迅速。
而对于比以太坊拥有更高 TPS 的高性能公链甚至联盟链来说,其历史数据的膨胀速度就会更加迅速。然而存储容量的增加必然会导致整个系统的运行效率降低,以下便是存储容量的增加对区块链性能影响的示意图。
可以看到无论是交易性能(TPS)还是存储性能,都会随着区块链的持续增长而快速衰减。
从上面的性能衰减图可以看出,对于很多典型的区块链系统,只要存储规模超过一定程度,其整体性能或者说 TPS 都会出现显著的性能衰减。
而之所以目前的比特币和以太坊的用户没有明显的感受到这个问题,一是受制于 PoW 之类的共识算法,另一个很大的原因在于其存储容量尚未达到性能的瓶颈,其衰减效应只是还没有明显地显现出来而已。
然而就像双十一的极限挑战促使阿里开发出了全球最高效的结算系统一样,由存储引发的区块链性能瓶颈,首先出现在了更加高效的联盟链领域。
那么联盟链能否借鉴传统技术解决这个问题呢?也不行,正如上文我们提到的,区块链数据存储必须满足可验证等特性,因此这不是传统的数据库技术能够直接解决的。
相比传统的计算机存储系统,区块链的存储系统需要面对更多的挑战。上图是阿里蚂蚁链团队对解决存储瓶颈主要挑战的分析。其中关于性能、成本与规模的挑战比较容易理解,这里我们稍微解释下前两个问题,也就是「读写放大」和「数据局部性」。
上文提到,区块链系统为了满足数据的可验证需求采用了树状存储结构。而树状存储的特点就是,随着数据存储量的增加,树的层数也会随之增加。
想象一下一个只有六七人的创业团队,可能一共只有老板和员工两个管理层级,找人的时候只要在办公室吼一嗓子就可以了。而像阿里这样的大企业,为了管理好数十万员工,其内部职级序列排到二十几层也不过分。这时候如果想在这样的大厂中随机验证一个员工的业务能力,寻找以及验证速度显然就会大大降低。
这种由于层数增多引起的存储效率降低,就是上图提到的区块链存储系统的第一个挑战:读写放大。
第二个「数据局部性」也是区块链特有的一个存储问题。我们知道为了达到区块链系统数据难以篡改的特点,所有上链的数据都会经过哈希运算,并将数据与哈希同时存储。
但也正是这种随机性,给数据的存储和查询带来了很大的困难。就像如果一本字典中的字都是按照拼音顺序排列,那么在查询时候就可以很快定位到大致的位置,提高查找效率。但如果字典中的字都是按照每个字的随机哈希值排列,那么其查询难度显然会大大增加。
这种由于哈希的随机性引起的「数据局部性」,大大提高了磁盘在存储与查询时的难度,降低了区块链系统的存储性能。
其实对于以上问题,无论在联盟链领域还是公链领域都已经有不少团队做出过一些改进的尝试。
比如联盟链领域的 HyperLedger 选择在一定程度上弱化可验证性,但这种思路只是在不同特性之间进行取舍和权衡,并没有从根本上解决问题。而蚂蚁链团队的研发方向,则是希望在保持安全性、可验证性、数据完整性等关键属性不妥协的前提下,对存储效率进行提高。
那么蚂蚁链新推出的 Letus 系统是如何解决这些问题的?
我们已经知道区块链为了满足可验证的需求而采用树状存储结构,但其实所谓的「树」也是抽象出来的概念。最终真正保存到硬盘中的,肯定不会是画成树状的图表,而是一组组排列整齐的数据。这就需要将各种「树」进行重新排列,并且利用数据库软件将其按一定规则整理,最终再存储到硬盘中。
我们以以太坊的存储过程为例。下方关于以太坊数据存储过程的图示有些复杂,读者不需要看具体的细节,只需要知道以太坊的存储也是从各种抽象的「树」结构(最上方),最终变成符合数据库格式的整齐数据(最下方),然后再存入硬盘就可以了。
是的,尽管我们说区块链不是个简单的数据库,但是区块链数据最终存储进节点的硬盘时,依然需要数据库软件进行整理并最终保存。
而蚂蚁链的 Letus 系统,为了提高存储效率,突破性地将可验证的「树」状结构,直接与更下层的数据库系统进行了整合,相当于将上图中的三层结构合并成了一层。这样就可以使可验证的数据结构和底层存储之间,分别利用自己的特点进行深度优化,进而提高存储以及验证的效率。
在传统的区块链树状结构中,只要最下方的数据(叶子结点)有一个数据改动,其上每一个相关节点的哈希值都会发生变更,进而需要重新存储。
而蚂蚁链由于「读写放大」导致树的层级越来越多,因此为了避免每次修改数据都需要重新存储所有层的哈希,减少带给存储系统的压力,Letus 采用了增量存储的新思路。就是将所有的增量存储优先保留成增量的索引(如下图右侧)。
这样不但解决了随着数据增加的层数增多(读写放大)问题,也减少了频繁修改树节点哈希的次数。只要保证这些增量信息的可验证性,就能大大提高系统的存储性能。
对于前文提到的数据局部性问题,LETUS 通过将区块号 (有序的) 作为版本、实现有序索引等技术解决这一问题,用基于版本号的索引 key 来代替哈希随机索引 key,一方面数据写入时就按区块号顺序,另一方面数据的存储和查询都通过有序的索引 (如 B 树) 进行,从而避免数据随机布局,也提升数据的局部性。
除此以外,Letus 系统还实现了诸如智能控温分层存储、基于边界扫描的批量剪裁等诸多技术创新,降低成本,提升业务续航,但限于篇幅原因在此不再进行展开。
目前流行于公链领域的扩容方案,除了链下扩容技术(如 Rollup)外,在公链本身的扩容领域基本进入了一个瓶颈期。市面上绝大多数所谓高性能公链其实并没有根本性的解决区块链的性能问题,而只是在安全、去中心化与性能三者之间进行取舍。
这导致市场上诸多高性能公链项目,其更多的性能提升都是通过放弃去中心化的特性来获得的。这也是为什么这些高性能公链的解决方案难以被以太坊所借鉴的原因,毕竟以太坊一直希望保持节点的硬件成本不高于 2500 美元,以最大程度的维持系统的去中心化属性。
但是蚂蚁链 Letus 系统的解决方案,并没有在安全性或者可验证,甚至数据完整性上做出任何的取舍。这种创新,对于整个行业来说其实更加具有进步意义。
作为一个长期研究公链的从业者,我个人在价值观上当然更加偏向更开放的公链生态,之前也确实极少关注联盟链行业的技术进展。
然而在了解了以蚂蚁链为代表的联盟链同行们做出的新的技术创新后,突然发现联盟链行业其实一直都不是在闭门造车。虽然他们由于合规或其他考虑,很少在公开场合点评公链技术,但其团队对公链领域的技术进展的研究从未停止,也在积极的通过自己的方式探索更优的解决方案。
而这些新开发出的技术,也并非只适用于联盟链领域,而是对整个公链的技术发展都有极强的借鉴价值。虽然我们近年来总是调侃 Web3 很难发生在中国,但其实中国的区块链技术领域并没有真的进入万马齐喑的程度。在合规的前提下,以蚂蚁链为代表的技术团队依然在区块链的底层技术上进行探索与改进。在不远的未来,甚至不排除这些技术可以对公链行业进行反哺和技术输出。
当然,或许也是由于联盟链行业的 to B 色彩太浓,导致其不太重视和普通用户的沟通(毕竟没有公开发行的 Token,因此也没有炒作自己的必要)。希望未来联盟链领域的团队能够多披露些信息,让更多的人能够了解到国内最优秀技术团队在区块链领域的最新进展。