区块链起源

序言

马克思曾说道:事物的发展不是一蹴而就,往往要经历曲折的上升。这句话同样适用于区块链的发展。区块链技术的诞生并非只是某些天才的灵光一现,更多的是分布式系统多年发展以来的技术和思想沉淀。从最初的网络模型到后面的共识算法,正是无数计算机科学家的思考与贡献,为比特币网络及其后的区块链发展铺平了道路。现在,让我们循着先驱者的足迹,回顾分布式系统的发展历程,探求区块链技术真正的起源。

区块链——起源

通常,区块链技术起源于一个(些)笔名为中本聪的神秘天才的创造。这种历史观使得区块链技术看起来神乎其神,并且晦涩难懂。然而,当我们深入了解区块链发展背后的故事时,它的出现就显得理所应当了。在这部分,我将概述几十年来对共识算法和分布式系统的研究中最重要的话题,正是这些研究孕育了区块链技术的诞生。

区块链的史前时代是什么?

什么是分布式系统?

Leslie Lamport,分布式系统领域的先驱之一,曾说过一句名言:A distributed system is one in which the failure of a computer you didn’t even know existed can render your own computer unusable.(分布式系统就是一种未知计算机的崩溃就会导致己方计算机不可用的系统)

Leslie Lamport

这句话精炼地概括了设计分布式系统如此困难的原因。系统中每个节点的都是巨大网络中的一部分,并可与其他节点的通信以完成某些任务。因此,大量移动件(moving pieces)的存在使得这类系统成为最难开发的系统之一。但是,数十年来,使用大规模的互联计算机算力的愿景,一直促使着计算机科学家们寻找克服这些挑战的方法。

失败模型

事实上,计算机本身并不完美,且容易崩溃。对于高可用性要求的服务——像如今很多互联网公司提供的那样——这些有缺陷的机器可能并不能提供良好的容错性。想象一下,如果谷歌运行在一台永远保持开启的服务器上的话,一旦该服务器出现故障,那么整个谷歌服务就将关闭。分布式系统最重要的优点之一就是使服务具有更高的容错性。这也意味着系统本身可以允许出现部分节点错误而保持正常工作。

节点可能出现不同级别的错误,由故障的严重性可依次分为:

崩溃故障——系统中的节点可能崩溃,并永远停止响应。

丢失故障——系统中的节点对消息的回复可能无限延迟。节点虽然在运行,但就像崩溃一样(无法及时回复),同时故障节点可能像正常节点一样传输未来的消息,并可选择丢失的消息。

拜占庭故障——节点不仅会崩溃,停止响应,而且可能故意撒谎并向不同节点发送冲突信息。节点甚至可以在传输过程中伪造消息。在这种故障模型中,我们不能单纯地信任节点能够保持诚实。

认识这些故障模型的意义重大,虽然并非所有的协议都能一次性解决所有问题。但是,更安全的故障模型保障协议都会自动地使故障模型降到最小化。

网络模型

分布式系统中的所有节点都必须通过网络进行通信,因此网络特性对系统的执行方式至关重要。由网络通信的可靠性可依次分为:

同步网络——节点之间存在已知上限的信息传输延迟(我们假设一个消息传递的通信模型)和不同节点速度差异上限。总体而言,在同步系统中,如果消息没有在上限时间内得到响应,那么我们就可以假设发送者可能正在经历失败(崩溃、丢失或拜占庭故障)

部分同步网络——一种同步网络和异步网络的综合体。在这种网络中,节点信息传输延迟和节点速度差异存在未知界限。

异步网络——一种节点信息传输延迟和节点速度差异不存在上限的网络。

如果一种协议可以在相对不太可靠的网络中工作,那么它也可以在更可靠的网络中运行。因此,能在异步网络中运行的协议,可以在所有网络环境中运行。这也是异步网络被视为协议测试的黄金标准的原因之一。还应该注意的是,对于不太可靠的网络模型而言,问题解决起来要困难得多。

大多数人可能认为互联网是一个相对同步的节点连接网络。事实上,这种观点是非常错误的。互联网上的节点在通信时不能提供任何可靠性。但是,应该指出的是,互联网不能保证可靠性,并不意味着它在某些情况下不能提供。

状态机复制

状态机复制(SMR)是一种通用框架,通过将所有副本经同一确定性事件检查而复制跨越多个副本的状态。由于所有服务器上运行的是相同的确定性事件,所以所有服务器会达到相同的状态。对于当前的区块链而言,这一点是不是很熟悉?其实,Leslie Lamport早在1984年就提出了这个方案。

解决SMR问题的一种方法就是使网络中的节点之间达成共识。

共识概述

共识是包括区块链在内的所有分布式系统中的关键主题。共识是一种描述网络中各个节点如何达成共同状态的算法。实际上,这个问题(即达成共同状态)远比表面上看起来难得多。尽管历经多年研究,共识算法却没有什么开创性的突破,而这也是真正的难点所在。共识算法的进展也有助于戳破一些所谓的区块链公司作出的“过于梦幻(too good to be true)”的承诺。我虽然不会细说每种共识算法,但我会尝试就它们的内容和意义进行一次更高级别的诠释。

最重要的结果如下:

FLP不可能性(1985)

即使仅存在单个节点崩溃故障,也没有确定的协议可以在异步网络消息传递过程中解决共识问题。

这也意味着,协议对象必须是随机的,或者假设一种更强健的网络模型才能在出现任何类型的故障时解决共识问题。但这依然不能解决更为繁杂的拜占庭式故障模型。我强烈建议你点击此处阅读这篇开创性的论文。

CAP定理 (1999)

分布式系统不可能提供以下3种保证中的2种以上:

一致性——每个读写请求都得到最新的写入

可用性——每个请求都得到成功/失败的响应

分区容错性——允许网络丢失从一个节点发送到另一个节点的任意多条消息,并仍能保持正常运行

在如今的互联网中,分区容错性是必需的,且因为网络的不可靠性,分区容错性亦不能妥协。因此,分布式系统(的设计)必须在一致性和可用性之间权衡。如果协议保持100%一致,那么它肯定会在某个时间不可用,反之亦然。CAP定理背后的证明非常优雅易懂,所以我推荐你在这里阅读更多信息。

Lamport/Pease 结果

在同步网络中,如果超过1/3的节点遭遇拜占庭故障,则网络无法达成共识。

这就意味着,想要达成共识,网络需要至少2/3的诚实和有效节点。关于证明的更多信息,你可以在此处阅读原始论文。你们可能会对这个证明感到困惑,因为众所周知基于PoW算法的区块链在51%算力攻击下才是不可靠的,而这显然超过了1/3节点的要求。实际上,这是因为PoW区块链并未完全实现一致性,链上的交易技术上可以回滚并可由具有无限算力的一方更改。

这些结果将有助于我们分析目前所有的共识技术,并帮助塑造一种更加可靠、安全的区块链网络。

传统的共识算法

在区块链发明之前,就有一些广为应用的传统共识算法。

Paxos(1989)

使用最为广泛的早期共识协议是Paxos,由Leslie Lamport 发明。(其工作机制是:)当出现崩溃故障时,Paxos在异步网络中至少需要1/2的正常节点以保证安全性。Paxos只能防止崩溃故障,这一点非常重要,因为它需要所有节点都是可信的(节点不能撒谎或者是拜占庭节点)。Paxos协议对试图构建高可用性服务的大公司最有价值。

细心的读者可能认为我犯了一个错误,我说Paxos可以在异步网络中抵抗1/2的崩溃故障,但我之前又说这在FLP 结论中是不可能的。但Paxos可以通过非实时在线(not being live at all time)方法绕过FLP 。Paxos要求领导者在线并执行操作,而在异步网络设置中领导者的选举是不可能的。因此,Paxos在异步网络中需要一些同步窗口才能选出领导者,然后它再执行操作。所以,在异步网络中,Paxos的所有执行过程都是安全的。

考虑到FLP 不可能性的限制,Paxos似乎是最好的解决方案,这也是为什么它是分布式系统研究中最引人注目的共识算法。Paxos是安全的,且只有在同步期间才会在线。

PBFT(1999)

第一个实际可行的拜占庭容错算法是PBFT(实用拜占庭容错)。类似于Paxos,PBFT即使在异步网络中也始终是安全的,且只有在弱同步时在线。

拜占庭Paxos(2010)

原始Paxos的“拜占庭版本”,即在相同网络情况下,仅存在至多1/3的拜占庭故障节点时,协议是安全的。它是由(你可能已经猜到了!)Leslie Lamport发明的,是最初Paxos论文的延伸之作。

Raft(2014)

一种流行的现代共识算法,是原始Paxos的简化、易懂版本。Raft的安全性和限制都等同于Paxos,但整个协议对工程师更加友好。

虽然分布式系统的研究有了显著的进步,但共识协议的研究依然是当时最热门、最具影响力的工作。

现在我们对分布式系统有了较清晰的认识,那就让我们走进区块链世界吧!

工作量证明(PoW)的起源

很多人错误地认为是中本聪在比特币中创建了PoW算法,但实际上它早在90年代中期就出现了。PoW最早是一种通过Hashcash计算用于反垃圾邮件的算法。Hashcash需要发送者完成一定量的工作量证明(非常类似于现在比特币使用的算法)以发送电子邮件,这就使得垃圾邮件发送者不得不浪费更多资源来发送大量垃圾邮件。

然而,非常重要的一点是,PoW的早期使用案例中并没有用它来解决共识问题,而是迫使人们花费大量的资源以完成一个操作。

比特币起源

这是比特币神话真正开始的地方:传说中,一位(些)笔名为中本聪的无名之士在2008年10月31日发布了一个去中心化的数字货币点对点协议。我恳请大家阅读一下这篇短小精悍的论文。比特币背后的思想是革命性的,而且不仅局限于比特币本身,如今它已在其他系统中迸发出蓬勃的生命力。

比特币提出了以区块链作为同步网络中概率共识的解决方案,即一种拜占庭问题解决方案:拜占庭对手至多拥有小于50%的总网算力(获得安全性的方式与以往的协议不同)才能保证网络的安全性。区块链的设计强调的是可用性,而不是一致性,并且需要支持数千个分散的节点。去中心化的代价就是低得多的吞吐量(TPS)。

我会在下篇文章中详细介绍这些安全和可用性保证。

谢谢阅读!

(完)

原文链接:https://medium.com/blockchains-an-informal-deep-dive/the-origin-of-blockchains-da6c0c5f52

作者:Zain Admani

翻译:Eric