整理 | 传神
出品 | 区块链大本营(blockchain_camp)
近日,CSDN联合创新工场执行董事王嘉平博士于北京成功举办个人见面会之后,业内外技术人士和广大开发者对此极为关注。纷纷表示希望能有机会再深入理解本次演讲内容,能够公开分享演讲资料。在区块链大本营获得创新工场和王嘉平博士本人授权之后,终于为大家献上了本次演讲精华 公开讲义(文末)。
本次见面会是继王嘉平博士于计算机顶级学术会议NSDI 2019上发表一篇名为Monoxide: Scale Out Blockchain with Asynchronized Consensus Zones的轰动性区块链扩容论文后,在国内举办的首场公开技术分享活动。
该论文提出了 Monoxide 方案并获得了业界的高度关注与广泛认可,关键设计就是通过其创新的“异步共识组”(Asynchronized Consensus Zones),将区块链性能提升至比特币的千倍以上,并同时兼顾安全性与去中心化。活动吸引了众多高校学者、开发者以及区块链技术爱好者前来参加,许多观众还带着打印好的原版论文前来请教。
开场时,王嘉平分享了自己对区块链的理解。他认为,区块链最伟大的地方是分布式计算系统的设计,它是在去中心化的系统上设计的,任何人都没有壁垒、可以公平、透明、安全地参与。
首先,王嘉平回顾了这篇论文为何会投在一个分布式系统的会议中。他认为,目前区块链在性能上几乎没有什么提高,容量也没有太大变化,尽管很多公链在谋求某种突破,同时也在控制层面提出了很多方案。但在他看来,如果我们关注的是性能和状态容量的问题,那么它们就跟分布式系统有直接关系,而跟共识算法没什么关系,所以该论文投在一个分布式系统设计与实现的会议中。
从整个学术界的领域来说,这个会议对区块链的关心非常少,这篇论文是NSDI上唯一一篇区块链的论文。
以下是本次分享的重点,王嘉平从两部分展开讲解:
第一部分:从分布式系统的视角,剖析区块链系统的基本工作原理与技术本质,分析目前区块链系统的性能与瓶颈所在。 第二部分:详细讲解今年在USENIX的旗舰学术会议 NSDI 2019 上发布的最新研究成果,如何在保障安全性与丝毫不牺牲去中心化特性的前提下,通过异步共识组架构实现高性能可伸缩的区块链系统,并与大家分享了最新的研究进展与思考。
01
分布式系统视角下的区块链原理与瓶颈
首先,王嘉平博士从结构上剖析了什么是区块链。他认为,从最简单的结构来看,区块链就是一个状态机,它内部有一个状态,这个状态可以是一个树或一堆树,也可以是一个哈希表或一个数据库,这个系统工作是从外部收到input,因为外部系统的不断输入,它会改变自己的状态,这也是所有计算机系统的运作模式。
另外,他也从比特币和以太坊系统设计的角度,来说明什么是状态机以及区块链系统如何运作的,同时也介绍了两者在系统设计上的区别和存在的弊端。
接下来,王嘉平介绍了状态机的性能。他认为,状态机最核心的性能包含几个方面的因素。
第一个方面是状态容量,其最大的瓶颈是内存问题,不是指历时交易要保存下来的问题,而是指当下要记住这个状态。他指出,余额就是一个最典型的例子,比如系统要记住用户余额是多少,为什么余额要存储在状态内存中而不是状态硬盘里呢?因为系统要能够随时随地访问这个数据,当收到一笔交易要验证这个交易的有效性的时,系统就要去访问这个账户里有多少余额,所以这个信息必须要放在内存中,不能放在硬盘里。而目前很多公链系统对状态机没有任何改善。
第二方面是吞吐量,吞吐量就是每秒能处理多少个交易,对于状态机来说就是每秒可以处理多少个inputs。比特币当时设计的整个网络平均带宽比现在低很多,这就是比特币当时为什么用10分钟出一个块,这种非常保守的吞吐量设计。现在比特币的分叉率与当时相比低很多,就是因为现在整个互联网的传输速率比以往高很多,这是最大的不同。后来由于不同公链采用的共识算法的改进,导致吞吐量不同程度地增大。
回到区块链(blockchain)定义和原理上来,王嘉平认为,并不是每个input都是有用的、合法的,每一次input都需要验证,尤其在区块链中,每一次验证是有代价的,同时验证是分批验证,因此就会出现block,这也是为何区块链叫blockchain。
区块链作为一个有验证的状态机,而且还是一个分布式的状态机,不是放在机房里面就可以自己运行的,而是让大家随时随地都能运行,并且保持状态一致。随后,他也进一步介绍了区块链中每个块(block)之间的逻辑关系。
关于区块链的出块速度能达到什么程度呢?王嘉平也给出了解释和证明,他认为区块链的出块速度不可能很快,并用理论公式和技术原理怎么了这一结论。
在TPS的计算公式中:
TPS=BlockSize/(TxSize × BlockInterval)
即每个块的大小除以每个交易的大小与出块间隔的乘积。
对于市面上号称实现百万TPS的区块链,王嘉平也给出了验证和反驳,带宽是有理论上限的,在去中心化的网络中,每个节点不仅要把块收回,还要把块发送出去,所以这里的带宽往往是放大的,若从极端角度来讲,只收块而不送出块,最高的TPS可达到7k多。这也是区块链的核心性能瓶颈。
为何特别强调带宽呢?王嘉平认为,因为在所有计算资源中,唯独带宽不是充分市场化的,内存、硬盘、CPU都可以买到,唯独带宽不行,一是它只有几家运营商能提供,二是高带宽受地理位置的限制。如果提高带宽要求,那就会极大地损失去中心化的程度。
随后,他从计算模式上分析了POW和POS共识算法的区别、出块的机制、解决问题的关键。区块链状态机不仅仅是分布式的,还是去中心化的,出块具有随机性,所有的共识算法是解决由谁来出块,并要达到公平、安全。而共识不仅要解决块由谁来出,还要解决出块冲突的问题。
关于区块链吞吐量的限制问题,王嘉平详细讲解了采用不同共识算法POS和POW的不同,并用函数证明了随着时间推移,全网节点被传播抵达的比例,这条曲线可以直接分析分叉率。
对于区块链不可能三角,王嘉平认为确实存在这个问题,但有个前提假设,如果是单链系统一定会有这个问题,它有安全性、正确性的要求,这意味着全网络节点要复制所有状态;去中心化要求参与门槛低,带宽、CPU、内存要求比较低,否则会有节点参与不进来。在这两个相矛盾的约束下,导致其性能的状态容量不高。
吞吐量就是平均带宽除以交易的大小,单链系统要求每一台电脑维护整个区块链世界交易里涉及的数据,这就决定了其吞吐量不可能太高。
第一部分演讲结束之后,王嘉平针对大家的提问给出了详细的回答。经过短暂的中场休息,活动进入了更为精彩的下半场。
02
异步共识组:高性能可伸缩性区块链系统
第二部分演讲中,王嘉平针对论文提出的 Monoxide方案进行了详细解析。在他看来,这篇论文本质上解决性能这个问题是不需要一个节点去掌控、维护全网交易和数据。并实验中通过2000个分片实现了1000倍的吞吐量提升。
在这样一张曲线图中,横轴是这些节点被划分成了多少个共识组,纵轴是平均每秒处理的交易量。在测试中,最大的共识组数量为2048,此时吞吐量为11694 TPS。这个数字已经远超现今所有公开发表的运行于互联网上的公链项目,当然那些只在机房里面跑,单节点采用怪兽般服务器的项目除外。
世界计算机不是区块链的本质,区块链的核心诉求在于关注计算过程的可信,而不是为了获得计算的结果。这一点是与为了高效将计算完成,获得结果的云计算本质的区别。云计算无法实现向第三方证明其计算过程是可信的,区块链对于计算任务本身也无法向云计算那样的高效和低成本。
王嘉平还强调了区块链去中心化计算是为了让计算变得更加可信,使得实际部署的代码和运算逻辑真实可靠、不可篡改的,而不单单是为了实现计算并输出一个结果的任务。这一点是与为了高效将计算完成并获得结果的云计算本质的区别,云计算无法实现向第三方证明其计算过程是可信的,而区块链对于计算任务本身也无法像云计算那样高效和低成本。
同时,区块链带来的问题和瓶颈是低TPS,难以扩展;每个节点都要复制,所以有带宽的瓶颈;交易要验证,因此对CPU有要求;交易记录要保存下来,因此对硬盘的I/O也有要求;每个节点要存储状态,因此对内存有要求。
为何低TPS是目前区块链系统的通病呢?王嘉平也给出了解释:系统中的每个节点都需要处理网络中出现的所有交易。无论这里的共识算法是什么,PoW、PoS还是BFT,情况总是这样。可伸缩性问题的根本原因不是安全性或去中心化。这是因为它们的系统设计中,让更多节点加入到网络中并不是帮助其工作,只是增加了工作负载的重复。这就是为什么在这些系统中每秒的交易数如此之低。
为了解决区块链系统的可扩展性问题,本篇论文提出了异步共识组。其基本思想是让不同的节点组在网络的不同分区上工作,并称这些分区为组zones。
在该方案中,随着整个网络被划分为更多的组zones,交易吞吐量和状态容量被扩展。共识组由多个同质的、功能上完全一致、地位上也完全平等,并逻辑上尽量隔离的独立共识系统的实例所构成,他们并行工作,分摊全网的吞吐、计算、存储的压力,分摊全网状态的维护工作。
最后,王嘉平针对异步共识组的系统设计进行了详细讲解,并从可扩展性、安全性以及去中心化三个方面进行了深度分析。
活动结束之后,仍有不少观众与王嘉平博士围坐一起,深入交流和探讨学习心得。