不可能三角:区块链最大的谎言

  • 2018-10-31 15:49
  • 3282
  • 不可能三角,区块链

 

“不可能三角”的提法很流行;“打破不可能三角”、“突破不可能三角”的宣称也不绝于耳。

 

这很矛盾。科学意义上的“不可能”就是指无论如何也不可能,那它怎么可能“被打破”、“被突破”呢?

 

作者:李画

编辑:秦晋

特别致谢:Genaro 吴为龙

 

 

这不是一篇要盖棺定论的文章,它的出发点是为了探讨,探讨区块链领域一个几乎人人都知晓的概念:不可能三角。

 

我们要探讨它是一个真概念,还是一个伪概念。因为只有当我们分辨出真伪,不再聚焦、不再利用、不再浪费开发能力在伪上,才有可能去探索区块链中真正需要被关注、被解决的问题。

 

本文分为三个部分,分别是:不可能三角的演变史;对不可能三角的质疑;分布式系统CAP定理是真正的不可能三角。

 

以讹传讹的不可能三角演变史

 

区块链不可能三角是指一个区块链系统不可能同时满足三个角,它必须以部分的牺牲某个角为代价,换取另外角的指标的提升。

 

1.长铗版本

 

在中国,最早提出不可能三角理论的是长铗。他在2014年发表了一篇名为《不可能三角形:安全,环保,去中心化》的文章,并引起了广泛的讨论。

 

不过,这篇文章讨论的是加密货币的不可能三角,结论是“环保型密码学货币”是不存在的。这与我们如今谈论的不可能三角的适用领域完全不同。长铗是这么描述不可能三角的:

 

在此,我提出一个三元悖论:去中心化、安全、环保构成一个不可能三角形。

 

设计一个既环保又安全的密码学货币,它必然是中心化的,比如PPcoin、Nextcoin、Ripple,它们要么本身就是中心化的架构,要么其去中心化的架构不可维持,它们本质上仍是PayPal、网银一样的中心化验证机制。

 

设计一个既环保又去中心化的密码学货币,它必然是不安全的,比如IP投票制的P2P货币,中本聪起初就已排除了这种可能,他认为“如果决定大多数的方式是基于IP地址的,一IP地址一票,那么如果有人拥有分配大量IP地址的权力,比如僵尸网络,就有可能主宰比特币网络”。

 

设计一个安全的去中心化货币,它必然是以付出能源与计算力为代价。工作量证明是以去中心化形式构建安全产权认证系统的第一个解决方案,也可能是唯一解决方案。

 

长铗提出的“去中心化”和“安全”在用词上与现今的流行版本一模一样,但它们所代表的意义却截然不同,长铗版本中指的是货币的机制和货币的安全。

 

 

2. Vitalik Buterin版本

 

流行版本的不可能三角理论来自“Vitalik”,是指一个区块链系统无法同时兼顾去中心化(Decentralization)、可扩展性(Scability)、安全性(Security),这个三角被广泛地引用进了各种演讲、报告、文章,甚至白皮书中。

 

但它真的是由Vitalik提出来的吗?

 

该不可能三角发源于GitHub以太坊目录下的一篇文章,名为《On sharding blockchains》,文中首次提出了这个三元悖论(trilemma)。

 

 

这篇文章隶属于以太坊的《Sharding FAQs》系列,由一位名叫James Ray的团队成员创建并维护。这个系列用来做什么?用来回答大家关于分片的种种问题。

 

也就是说,所谓的Vitalik提出的理论,其实只是以太坊团队成员在一篇回答社区问题的文章中提及,不仅与Vitalik无关,不仅不是论文,它连主题性文章都算不上。但真相还不止于此。

 

 

为清晰起见,逐条说明关于“Vitalik”版不可能三角的一些事实。

 

1.原文用的是“This sounds like there’s some kind of scalability trilemma at play”,再结合上下文,会发现不可能三角这一理论的提出是没有经过任何逻辑的、系统的论证,作者只是列举了一些问题后就提出了这个观点。而且作者在文中用的就是不确定的表达,却在后来被人们当作了无疑的真理。 

 

2.原文的上下文都在讨论“scalability”,甚至作者也称其为“scalability trilemma”,也就是说,这个三角本是针对“区块链可扩展性”的,但却被扩大到“区块链”,从Scalability Trilemma演变成了Blockchain Trilemma。

 

3.对于三个角:Decentralization 、Scalabilit、Security,作者给出了明确的定义,比如安全是“being secure against attackers with up to O(n) resources”。也就是说,作者的三角是限定状态下,并基于这种限定状态进行讨论,但却被扩大到无限定条件的区块链。

 

不过,“Vitalik”不可能三角最大的问题还不是上述事实,而是提出这个观点的环境。它出现在用来介绍以太坊分片技术的文章中。

 

写过论文的人知道,为了证明自己的研究解决了问题,第一步就是提出问题;为了证明自己的研究厉害,第一步就是把问题描述的很重要、很难解决。《On sharding blockchains》这篇文章的结构正是如此。

 

首先通过对现状的描述,给出“不可能三角”这个问题;接下来分析多种方法,指出别人无法解决这个问题;最后提出自己的方案,论证该方法可以如何完美地解决问题。

 

没错,如果耐心一些,把“Vitalik”提出不可能三角理论的文章看完,就会发现以太坊已经通过它的分片技术解决掉这个三角难题了。所谓的“不可能”,在它诞生的第一天就被论证为“可能”了。

 

James Ray在文章中写下这个不可能三角,只是为了论证以太坊通过分片技术可以实现可扩展性,只是为了证明we can break through scalability trilemma。

 

关于这个三角,文中定义清晰、描述严谨,并无问题,只是在后来被多维度误解了。下图是以太坊在这个问题上能实现的解决程度。

 

 

立不住脚的不可能三角

 

不可能三角得到广泛的认可,除了与长铗或Vitalik的知名度有关,更多的是因为这个理论看上去是正确的。但它真的经得起推敲吗?

 

不妨问问自己三个问题:

 

1.什么叫 去中心化?什么叫可扩展性?什么叫安全性?能确切的回答它们各自的含义吗?如果一个理论中的概念都无法准确定义,该理论有什么价值?

 

2.把三个角变成两个角,“不可能”的矛盾关系还存在吗?把三个角变成四个角,“不可能”的矛盾关系还存在吗?如果存在,提“不可能”三角的独特意义何在?

 

3.不可能三角对区块链项目的工程实现有什么实际的指导作用?

 

“可扩展性”在少数版本中被替换成了“性能”,但即使没被替换,人们在语义上也是用“可扩展性”来指“性能”。但这两个概念是不具备等价性的,扩展性只是提高性能的方法之一,性能只是扩展性实现的功能之一。下图是常见的不可能三角的版本。

 

 

 

EOS的21个节点常被用来证明不可能三角的正确性,人们认为它是牺牲了“去中心化”,换来了“性能”,但当我们担心EOS的“去中心化”时,担心的是什么?担心的是EOS因为中心化而不够“安全”,去中心化与安全是紧密相关的。

 

“去中心化”和“性能”是不可能两角的说法反而比不可能三角更为精准,仅仅两角就能说明区块链现阶段的状况。

 

另一个角度,牺牲去中心化和可扩展性就能保证区块链系统的安全吗?显然不是。安全很大一部分是纯技术的解决方案。那么不可能三角中的安全指的是什么?提这种局限的安全的意义又何在?

 

除了用于“吹牛”,不可能三角似乎对区块链项目的工程实现没有任何实际的指导作用。我们无法想象一个项目的负责人对团队成员说,“为了提高性能,我们可以对系统的安全性做一些牺牲”,也无法想象负责人会说“为了去中心化,这个系统不要求高性能”。

 

事实也正是如此。从来没有一个项目说自己为了提高不可能三角的某个指标,而牺牲了其他的指标,他们说的是自己“突破了不可能三角”。

 

如果说不可能三角是真概念,那么它最大的意义恰恰就是告诉项目方,系统必须要在这三个指标间做出取舍,而不是“突破”,可以突破的都不叫“不可能”。

 

分布式系统CAP定理是真正的不可能三角

 

追究不可能三角的真伪,一方面是因为伪概念给了伪项目生存的土壤,这很糟糕;另一方面是希望人们能把焦点集中到真正的问题上。

 

在区块链,有价值的不可能三角是分布式系统CAP定理。它是指分布式系统无法同时确保一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)。

 

Eric Brewer在ACM PODC会议(ACM Symposium on Principles of Distributed Computing,分布式计算领域的顶级学术会议)上首次提出了CAP 猜想,之后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了该猜想,使之成为一个定理。

 

CAP定理是分布式系统领域最重要的原理之一,深刻影响着分布式计算与系统设计的发展。

 

CAP定理一致性、可用性和分区容忍性的具体含义如下:

 

1.一致性:如果系统对一个写操作返回成功,那么之后的读请求都必须读到这个新数据;如果返回失败,那么所有读操作都不能读到这个数据,对调用者而言数据具有强一致性。

 

2.可用性:所有读写请求在一定时间内可以得到响应,不会一直等待。

 

3.分区容忍性:系统中的网络可能发生分区故障,即节点之间的通信无法保障,但这不影响系统正常服务。

 

CAP 定理认为分布式系统最多只能同时实现上述三个要素中的两个。在某时刻如果满足AP,即分隔的节点对外服务,但不能相互通信,这将导致状态不一致,不能满足C;如果满足CP,那么在网络分区的情况下为达成C,请求只能一直等待,这将无法满足A;如果满足CA,即在一定时间内要达到节点状态一致,则要求不能出现网络分区,这将不能满足P。

 

这一结论告诉设计者不要浪费时间去研究如何兼顾这三要素,因为根本不可能,在进行分布式架构设计时,必须根据具体系统的需求做出取舍。

 

 

不可能三角并不是限制,它反而在正确的道路上开拓了设计师的思路,让他们在多样化的取舍方案下设计出了多样化的系统。

 

过去十几年里涌现出不计其数的分布式的新系统,正是基于数据一致性和可用性的相对关系产生的——对于分布式系统,分区容忍性必须满足,否则该系统就毫无意义,因此其实是在一致性和可用性之间做选择。

 

区块链系统的设计也正是如此。

 

在区块链中,一致性是保证各个链的各个节点读出来的数据都一样,可用性是保证各个链的各个节点可以在不同步完全的情况下实现交易,而因为节点是分布的,分区容错性是必须要保证的。基于这三个要素和对三个要素的取舍,有了BFT类共识、PoW类共识和其他共识算法。

 

就像没有一个通用的分布式系统,也没有通用的共识算法。CAP定理指导着区块链共识和治理的设计,决定着其分布式系统的功能和实现。

 

不可能三角的迷人之处在于:科学告诉我们什么是不可能的,而工程告诉我们可以付出一些代价,把它变成可行。CAP定理具有这种带张力的美感,反观流行版本的不可能三角,一点儿都不具备。

 

END

 

点赞