div#pop_ad { opacity: 0; }
AD
首页 > 数字货币 > 正文

蔡维德:区块链技术几个重要的坑(中)

[2021-01-29 07:02:45] 来源: 编辑:wangjia 点击量:
评论 点击收藏
导读: 前面已介绍了区块链技术的三个大坑[1],本文将继续介绍区块链技术一定要跨过去的一个大坑——可扩展性问题,主要集中在分片技术上。区块链,无论公链还是私链,要想真正做到更深入的应用和普及,关键就是要解决

蔡维德:区块链技术几个重要的坑(中)

前面已介绍了区块链技术的三个大坑[1],本文将继续介绍区块链技术一定要跨过去的一个大坑——可扩展性问题,主要集中在分片技术上。

区块链,无论公链还是私链,要想真正做到更深入的应用和普及,关键就是要解决交易的吞吐量和速度问题,这在区块链中也被称作可扩展性[2]。目前业界可扩展性问题的解决方案主要分为链上和链下两种。

线下扩容以闪电网络(Lighting Network)为代表,它将大量交易放到链外进行,只把关键环节放到链上确认,这种方法最大的问题在于链下扩展(没有区块链的保护),安全性不能得到保证。

而链上的扩展技术则有侧链(SideChains)和分片(Sharding)技术。

侧链因为最早是对比特币提出,所以这个概念后期也更多是在描述比特币相关的扩容,它的定义是:可以让比特币安全地从比特币主链转移到其他区块链,又可以从其他区块链安全地返回比特币主链的一种协议。也即以比特币区块链作为主链,其他区块链作为侧链,两者通过双向挂钩,实现比特币从主链转移到侧链,侧链机制可将一些定制化或高频的交易放到主链之外进行,从而实现可扩展性。

如果说侧链是通过“外部嫁接”到主链,那分片就是将主链进行“内部分割”。区块链分片技术,是指创建很多分片链,每个分片都是一个新的小星系,或者说将区块链网络切分成许多独立的小区域,称为“碎片”,每个碎片由专门的节点来维护。假设现在有三个节点A,B,C,并且它们需要验证数据T。在传统的区块链网络模式中,每个节点都需要分别去计算和验证整个数据T,在分片技术下,整个数据被分成3个片区:T1,T2 和T3,节点 A,B,C 加上其他节点可以并行验证数据T1,T2和T3,提高了扩展性。

区块链的分片技术来源于数据库的分片技术。数据库的分片技术是将一个数据库切分成多个部分放到不同的数据库上,每个数据库存储部分数据,数据查询方便,从而缓解单一数据库的性能问题。


蔡维德:区块链技术几个重要的坑(中)


数据库分片

区块链也是将数据分片,每个分片处理一部分数据。但是,这二者间有个关键性不同——数据库分片是相互独立的,区块链分片之间有数据交互(如下图)。这就意味着在分片机制里,区块链依然要解决跨片交易问题。


蔡维德:区块链技术几个重要的坑(中)


数据库分片与区块链分片的异同——区块链分片后每片仍然互相交互

可以看到,不论是侧链技术——主链和侧链交互,还是分片技术——两条子链交互通过主链来实现,或是两条链之间直接交互,都需要两次(直接交互)或三次(间接交互)以上的共识,而不跨片的交易只要一次共识。

这将使得整体交易的代价变大,跨片或是跨链交易越多,延迟越高,同时负责两个链共识的节点就成了薄弱环节。切片越多,跨片或跨链交易问题越大,因为太多跨片或是跨链将会使系统瘫痪。这才是真正的问题所在。

如果我们把系统分片为七片,七片交互如下图。


蔡维德:区块链技术几个重要的坑(中)


七片分片交互图

如果是切成九片,那交互图成为下图。


蔡维德:区块链技术几个重要的坑(中)


九片分片交互图

从以上两张图,我们很容易发现交互明显增加了。如果再切成一百片,那交互将更为复杂。再进一步想象,如果按照计划,进行无限扩展,假设切成十万片,那交互情形将会如何?那将会是异常恐怖!

不知道聪明的读者到此是否已经明白?现在区块链的分片技术根本不是扩展性技术,而是紧缩性技术!

扩展性技术是指,工作量虽然增大,但性能保持差不多。紧缩性技术则是工作量越大,性能越差。区块链现在的分片技术,如果工作量越大,分片越多,交互也越多,性能就越差。可能有人说,“不对,当我分成两片的时候,性能比较好。”这是可能的,因为只分了两片。但如果一直切分下去,分片越多,性能越差,这正是紧缩性技术的特性,而不是扩展性技术的特性。

早在2015年,笔者第一次见到Vitalik时,他就说自己有一套方法,可以使以太坊无限扩充,速度无限提高。他当时拿出一篇论文从数学上证明他的方法是正确的。


蔡维德:区块链技术几个重要的坑(中)


2015年在清华大学和Vitalik合影

现在已经到了2018年中,虽然以太坊确实有了长足进步,也提出了Casper及分片技术,但是离以太坊跨分片交易的目标-速度无限提高-还有点距离。

笔者非常喜欢Vitalik,他是一个难得的天才,伟大的数学天才!但是笔者是一个软件工程师,因此下面将从软件工程的角度来分析这个问题。区块链分片在数学上可以达到无限扩展,但实际工程上有其他问题。

目前,已经有很多链设计了各种各样的算法和协议,它们像以太坊一样,都说自己有可行的分片技术,具有很强的扩展性,而且图文并茂,另外也有许多区块链分片学术论文发表,上面满满的都是数学推导和协议算法。但这些是否真的解决了区块链分片问题?

如果想研究这些白皮书或学术论文来弄明白区块链分片的问题,很容易走进“林间小路”(Garden path),这是美国学术界用的名词,表示在“学术丛林里”迷失方向。文中的协议复杂,但是一些协议没有介绍高层设计原则,而是直奔协议细节,搞得你辛辛苦苦研究完细节后还是不明白协议的本质。

实际上,笔者认为分片技术,即区块链扩展性问题应该换另一个角度来考虑,那就是应该先关注底层数据结构,而不是只注重算法或协议。

现在大家都关注顶层协议,设计了各式各样的协议和算法,但效果都有距离,问题的关键在哪里呢?在于他们没有透过现象看本质,没有看到底层的数据结构才是最关键的。如果不解决数据结构的问题,无异于在沙滩上盖大楼。


蔡维德:区块链技术几个重要的坑(中)


错误的关注点,应关注底层数据结构

图灵奖得主尼古拉斯·沃斯(Niklaus Wirth)写过一本名著《算法+数据结构=程序》(Algorithms + Data Structures = Programs),书名中的公式是计算机科学的名言。他的一个重要理论就是算法受数据结构影响,数据结构是算法实现的基础,算法设计是不可能独立于数据结构的,如果数据结构不好,算法很难发展。

可能有人会说区块链是协议,不是软件,所以沃斯理论不适用。但是网络协议也是软件实践的,因此沃斯理论其实是完全可以用在区块链上的。有人说他的分片技术使区块链性能提高很多,也有数据证明。但有没有把跨片交易的一致性成本放进去?如果有,跨片交易成本一定高(因为跨片交易要多次共识),分片越多,跨片交易越多,成本越高。


蔡维德:区块链技术几个重要的坑(中)


图灵奖得主Niklaus Wirth教授,提出程序以数据结构为主

从这观点出发我们来看一下前两代区块链数据结构:

第一代区块链,半账户数据结构

第一代区块链以比特币为代表,使用UTXO模型,可以称为“半账户”,就是没有完整的账户[3]。账户创造后,只能使用一次,用过就不能再用。传统金融系统都采用余额账户,但是用UTXO模型来处理余额账户会非常困难。系统必须把相关UTXO账户整理成传统账户。因为在传统金融系统中,一个人只会有几个账户,其中一些账户可能有许多交易。而在UTXO模型中,每一笔交易就是一个账户,所以一个人可能就有成千上万甚至几十万个UTXO账户。在这种情况下,我们可以想想,余额计算会有多么困难,那么多的账户如何处理?比如宇宙第一大行工行,拥有数亿级的客户账户,假设每个客户有100笔交易(每笔存取款都是一笔交易),那工行使用UTXO模型就需要处理百亿级的计算量!

现在我们在UTXO系统上使用分片技术。因为每个UTXO账户只能属于一个客户,而且只能用一次,可以用下列两种方法存放UTXO账户:

一是随机放在一个分片上;

二是以客户账户分,放相关的UTXO账户。

采用第一种方法,会立刻面临一个难题。因为需要跟踪UTXO账户和客户账户的关系,做余额计算非常困难;而如果用第二种方法,余额计算则比较容易,因为可以分析每片上的账户得到余额。

无论采用上述两种方法中的哪种,每个分片上的账户都可能和其他分片上的账户进行交易,导致很多跨片交易,而跨片交易成本比片内交易成本高的多。

我们可以这样思考,第一代区块链系统,为了方便交易处理,把账户系统大大简化,账户的数据结构太过简单,简单到没有办法支持现代金融系统。可以说第一代区块链系统主要是一个交易系统,账户管理系统只是外加的[4]。

所以基于第一代数据结构发展出来的系统,在金融上很难有所发展,如RSCoin和Corda,因为它们的数据结构和现代金融系统数据结构格格不入[5]。

第二代区块链,全账户数据结构

第二代区块链系统像现在金融系统一样,有完整的账户[6,7]。这是一个很大的进步,以太坊是第一个有全账本的区块链系统!值得嘉奖。

但它却带来了一个新问题。现在的金融系统,账户系统只管理账户,交易系统只负责交易,是两套不同系统,但在第二代区块链系统中,这个余额账户系统,既要做账户管理,又要做交易。如果这只是个小系统,还不成问题,但如果是大系统,需要扩展怎么办?

如果区块链系统只有账户管理系统,扩展性很容易,分片就像切蛋糕一样,将不同账户分到不同分片就好。比如说,有100个账户,每个分片上可以放20个账户,可将所有账户分成五片,放到五个服务器上。这样,每个账户都是独立的,和其他账户没有联系。想要查询账户,只需知道账户在哪个分片,然后找到那个分片,在其内进行处理。


蔡维德:区块链技术几个重要的坑(中)


切蛋糕,每片蛋糕独立,和其他片没有关联

或者,如果区块链系统只有交易系统,就不能采用分片。否则会存在藕断丝连的问题,因为区块链里每个账户都可能和其他账户做交易,不管怎样分片,两个交易账户都可能处在不同分片上,这样两个账户之间的交易就是跨分片的交易,非常麻烦。


蔡维德:区块链技术几个重要的坑(中)


藕断丝连

这种情况下扩展性以增加交易系统或是代理(Agent)为主。

问题是第二代区块链既要管理账户又要做交易,应该如何扩展呢?若用第一种方案,跨片交易会很多,成本高又麻烦。而用第二种方案,账户管理就会出问题。为了处理一个客户的余额,需要在每个交易系统里面收集资料,再处理收集到的资料。

可能有人会说,可不可以有第三种扩展性技术能解决这一问题?也许有,但这第三种技术要解决两个扩展性:账户管理扩展和交易扩展,而这两种扩展方式是不一样的。

可能有人会说,他有分片技术可以使区块链性能提高很多,也有数据证明。但有没有把跨片交易的一致性成本放进去? 如果有,跨片交易成本一定高(因为跨片交易要多次共识),分片越多,跨片交易越多,成本越高。


蔡维德:区块链技术几个重要的坑(中)


账户和交易扩展方法不匹配

问题就在这里,第二代区块链犯了软件工程的一个大忌,即一个系统应该只处理一个功能。如果一个系统处理两个功能,那更改性和扩展性一定会有问题。这是46年前软件工程之父戴维·帕纳斯(David Parnas)提出的理论。帕纳斯提出的理论都非常简单,不懂的人会认为太简单了,没什么价值,但事实上大道至简,世界上最有价值的理论都是最简单的!根据帕纳斯的理论,第二代区块链系统的扩展性问题极其难解。


蔡维德:区块链技术几个重要的坑(中)


软件工程之父David Parnas教授,提出许多非常简单但极有价值的理论,至今他的理论还在影响区块链的发展

如果不肯让一个系统只处理一个功能,根据帕纳斯的理论,设计这种系统就是自讨苦吃,更改性和扩展性都会很差。这就是今天第二代区块链遇到的困难,也是经过这么多年的研究,设计了各式各样的协议,问题还是没有解决的真正原因。

第二代区块链的困难就是既维持全账本但又做交易,所以存在跨片或跨链交易的问题。跨片或是跨链交易越多,问题越大。而要解决这问题,通常就是用中心化的方案。为什么要用中心化设计呢?因为跨片或是跨链交易成本很高,很难处理,用中心化系统处理比较方便。

比如2017年欧美提出一种异构网络(Heterogeneous networks),欧洲提出的是Polkadot,美国提出宇宙网络(Cosmos)。


蔡维德:区块链技术几个重要的坑(中)


Polkadot


蔡维德:区块链技术几个重要的坑(中)


Cosmos

上述异构区块链网络都是中心化的设计[8]。它们与以太坊一样,做成中心化的结构,这是这类系统的通病[9]。虽然中间链可以由一条分布式的链构成,但从整个系统的角度来看,这还是中心化的结构,就与区块链的设计初衷相悖[10,11]!当有许多参与链需要相互交易时,中间链的计算及通讯量就成了系统的瓶颈。

异构网络的特点是多参与链(Parachain)经中间链连接,需要维护三个一致性[12]:

一是每条链(参与链或中间链)需要维护自己的一致性;

二是中间链需要和每一条参与链维护彼此的一致性;

三是一条跨链交易需要由多条参与链以及中间链来维护。

现在很多单条的区块链因为共识算法复杂,都需要花费大量时间和算力,而无法提高效率。所以,要维护上面三个一致性,效率就更低了。因为每条链与每条链之间的一致性必须动态维护,而且第一个一致性必须与第二个一致性是有关联的,在做第二个一致性时,必须牵动第一个一致性。

例如,参与链A与中间链做共识,参与链B与中间链也做共识。中间链要保持一致性,就需要参与链A与参与链B同时和中间链维护一致性,这会使整个网络变慢。而且参与链越多,复杂性越高,而参与链事实上可能有成千上万条,这将使该设计达不到第二代互联网的需求。

如何处理这一问题?其实很容易,就是让一个系统只具备一个功能。这就是第三代区块链系统,这是区块链的未来发展方向。

第三代区块链和第二代一样有完整账户,但是账户管理系统只处理账户,交易系统只处理交易。这就是天德链系统分账户链(Account Blockchain,ABC)和交易链(Trading Blockchain,TBC)的原因[13,14]。

账户链可以用分片处理来解决扩展性,交易链用增加交易链来解决扩展性。这与现在的金融系统一样,而且与Cosmos等中心化的架构相比,天德链系统没有中心链的概念,这是区块链技术思想上一个突破。因为每个系统只做一个功能(符合帕纳斯原则),可以有扩展性,像切蛋糕一样。金丝猴模型和熊猫模型就是以这种原则完成的。

其中金丝猴模型,是完全分布式、多链网络,没有中心节点或者架构。如下图所示:


蔡维德:区块链技术几个重要的坑(中)


金丝猴模型

红色的区域是参与链,可以有一个或多个金融机构,而绿色的区域是中间链,也是一个或多个金融机构。在两个参与链之间,可以有多条中间链,每两个机构之间都可以互相进行交易。

要听从沃斯的建议,采用正确的数据结构,并进行符合帕纳斯原则的设计,就可以有可扩展的分片技术。


声明:转载自金融界,此文出于传递更多信息之目的,内容仅供读者参考。若存在侵权行为,请联系我们删除。


添加新手交流群:币种分析、每日早晚盘分析

添加助理微信,一对一亲自指导:YoYo8abc

查看更多:

为您推荐