区块链起源
区块链技术的起源通常仅仅归因于某个神秘天才的行为,这个天才以中本聪的笔名工作。这种对历史的看法通常会让这种技术看起来几乎是不可思议的,并且很难理解。当人们了解这些系统开发背后的实际历史时,就会增加更多的基础知识。在本文中,将概述几十年来对共识算法和分布式系统的研究中最重要的主题,这些研究导致了区块链的诞生。
什么是分布式系统?
莱斯利·兰波特(Leslie Lamport),分布式系统领域的先驱之一,他曾说过:
分布式系统是这样一种系统,其中一台您甚至不知道存在的计算机的故障可能导致您自己的计算机无法使用。
这句话概括了为什么设计分布式系统如此困难。系统中的每个节点都是较大网络的一部分,并依赖于与其他节点通信以完成某些工作。大量的移动部件使这些系统成为最难开发的系统之一。然而,能够利用连接在一起许多计算机力量的好处激励了几十年的的计算机科学家研究克服这些挑战的方法。
失败模型
计算机不完美且容易坏,这是事实。然而,对于要求高可用性的服务,例如当今许多互联网公司,这些有缺陷的机器可能并不总是可以容忍的。想象一下,如果谷歌只在一台服务器上运行的话,这台服务器必须保持持续运行,如果出现故障,整个谷歌就全部瘫痪,分布式系统最重要的动机之一是使服务更具容错能力。这意味着系统本身可以容忍某些节点失败,但可以持续它提供的服务。
节点可能在不同的严重性级别出现故障。从最不严重到最严重的故障模型如下:
1. 崩溃失败 - 系统中的节点可能崩溃并永远停止响应。
2. 遗漏失败 - 系统中的节点可以无限延迟地回复系统中的任何消息。就像崩溃一样,但节点仍处于运行状态,并且可能像正常情况一样传输未来的消息,并可以选择省略的消息。
3. 拜占庭故障 - 节点不仅可以崩溃并停止响应,而且可以主动错误的向不同节点发送冲突消息。节点还可以将消息从节点伪造到另一个节点。这是一个失败的模型,你不能简单地信任节点来说实话。
注意这些不同的故障模型非常重要的,因为并非所有协议都能解决所有故障模型。但是,任何管理更安全故障模型的协议都会自动管理任何较小的故障模型。
网络模型
由于分布式系统中的所有节点都必须通过网络进行通信,因此网络特性对系统的执行方式至关重要。从最可靠到最不可靠的几种类型的网络如下:
1.同步 - 节点之间存在已知上限的网络(我们假设消息传递通信)和节点速度之间差异的已知上限。基本上在同步系统中,如果消息没有及时出现,那么您可以假设发送者正在经历失败(崩溃,遗漏或拜占庭)。
2. 部分同步 - 同步和异步混合的网络。在此网络中,消息传递时间和节点速度之间的差异存在未知界限。
3. 异步 - 节点之间的消息传递时间没有上限且节点速度之间没有上限的网络。
如果协议被评定为在不太可靠的网络中工作,那么它也可以在更可靠的网络中工作。因此,如果协议在异步环境中工作,那么它适用于所有环境,这就是它被视为协议的黄金标准的原因。还应该注意,对于不太可靠的网络模型来说,解决起来要困难得多。
大多数没有经验的人可能认为互联网是一个相对同步的网络来连接节点。事实上,这种假设是非常错误的,互联网上的节点在通信时不能保证任何种类的可靠性。还应指出的是,解决可靠性较低的网络模型要困难得多。
状态机复制
状态机复制(SMR)是通过使所有副本通过相同的确定性事件在多个副本之间复制状态的通用框架。通过在所有服务器上运行相同的确定性事件,所有服务器应该达到相同的状态。这对我们今天的区块链来说可能很熟悉,Leslie Lamport在1984年就提出了这个公式。
解决SMR的一种方法是在网络中的节点之间达成共识。
共识概述
共识是包括区块链在内的所有分布式系统中的关键主题。共识是描述网络中各个节点如何进入公共状态的算法。这个问题实际上比表面看起来更困难。在多年的研究中,几乎没有关于共识的开创性证据,这些证据确定了问题的真正难度。证据还将有助于指出一些可疑的区块链公司所做出的任何潜在的“太好不可能”的承诺。虽然我不会详细说明每个证据,但我会尝试对它们所包含的内容进行高级别的解释。
最重要的结果如下:
FLP不可能性(1985)
即使存在单个崩溃故障,也没有确定性协议在消息传递异步系统中解决共识。
这意味着协议必须是随机的,或者假设某种更强大的网络模型,以便在出现任何类型的故障时解决共识。这并不能解决更难以解决的拜占庭式失败问题。我强烈建议你在这里尝试阅读这篇开创性的论文。
CAP定理(1999)
分布式系统不可能提供以下3种保证中的2种以上:
一致性 ---- 每个读取请求都获得最新的写入
可用性 ---- 每个请求都会获得成功/失败的响应
分区容差 ---- 允许网络丢失从一个节点发送到另一个节点的任意多条消息,并且仍能正常运行
在今天的互联网中,分区容忍是必需的,因为网络不可靠所以不能放弃,因此必须在一致性和可用性之间做出妥协。因此,分布式系统必须处理一致性和可用性之间的权衡。如果协议100%一致,那么它肯定不能在某个时刻可用,反之亦然。这背后的证据是非常优雅和可理解的,所以我建议你在这里阅读更多相关信息。
Lamport / Pease结果
如果超过1/3的节点在同步网络中遭受拜占庭故障,则无法达成共识。
这意味着要达成共识,我们需要2/3的节点保持诚实和可用的。您可以在此处原始论文中阅读更多有关证明的内容。你们中的一些人可能会对这个证明感到困惑,因为你们可能知道PoW区块链,在51%的攻击下是安全的,这显然超过了1/3,这是因为PoW区块链实际上并未实现一致性,因为它们可以在技术上回退并由具有无限计算能力的对手进行回滚和更改。
这些结果将帮助我们分析所有共识技术,并以我们可以检查它们提供的保证和安全性的方式构建区块链。
传统的共识算法
有一些值得注意的传统共识算法在区块链发明之前被广泛使用。
Paxos(1989)
最广泛使用的早期共识协议是Paxos。Paxos是由Leslie Lamport发明的,当出现崩溃故障和异步网络时至少有1/2个节点没有故障时提供了安全性。Paxos只会防止崩溃,这一点很重要,因为这需要所有节点都可信任(他们不应该撒谎或者他们将成为拜占庭),这对试图构建高可用性服务的大公司 很有用。
细心的读者可能会认为我犯了一个错误,因为我说Paxos可以在异步设置中承受1/2崩溃失败,但之前我已经说过,在FLP不可能的情况下,这是不可能的。Paxos绕过FLP的方式是不在任何时候。Paxos要求主节点生存并取得进展,主节点选举是不可能在异步设置的。所以Paxos需要一些同步窗口才能选出一个主节点,然后它就可以在异步设置中取得进展。在所有执行过程中,Paxos即使在异步设置中也始终是安全的。
因此,考虑到FLP不可能性的限制,Paxos似乎是最好的,这就是为什么它可能是分布式系统研究中最值得注意的共识算法。Paxos始终是安全的,只有在同步期间才能生存。
实用BFT(1999)
第一个实际可行的拜占庭容错(BFT)算法是PBFT。它类似于Paxos,即使在异步网络下也始终是安全的,并且只能在弱同步下 运行。
Byzantine Paxos(2010)
原始Paxos的BFT版本,在相同网络假设下存在1/3拜占庭故障节点时是安全的。这是由(你可能已经猜到了)Leslie Lamport发明的,是他最初的Paxos论文的延伸。
筏(2014)
一种流行的现代共识算法,被视为原始Paxos的更简单,更易理解的版本。据说它提供的保证和限制等同于Paxos,而整个协议更容易让工程师使用。
虽然分布式系统的研究有了许多显着的进步,但这些协议突出了当时最受欢迎和最有影响力的作品。
现在我们已经在分布式系统中拥有了良好的基础,我们可以开始进入区块链!
工作证明的起源(PoW)
很多人错误地认为Satoshi Nakamoto在比特币中创建了PoW算法,但实际上它是在1990年代中期创建的一个更古老的想法。它早期被用作Hashcash的电子邮件反垃圾邮件算法。Hashcash要求发送者完成PoW(非常类似于比特币今天使用的算法)发送电子邮件,以便垃圾邮件发送者不得不浪费更多资源来发送许多电子邮件。
然而,重要的是要注意PoW的早期使用案例并没有用它来解决共识,而是用它来强迫人们可以花费大量的资源来做一个动作。
比特币的起源
这就是比特币的神话真正占据主导地位的地方。传说中,一位名不见经传的人Satoshi Nakamoto(中本聪)的匿名人士于2008年10月31日发布了一个为数字货币提供分散的数字对等系统协议。我恳请你阅读这篇简短而精彩的论文。虽然比特币背后的想法是革命性的,但它现在可以开始在所有其他系统的环境中更有意义,而不是靠它自己。
比特币标志
比特币提出了区块链作为同步网络中概率共识的解决方案。它是来自拜占庭对手的BFT,这些对手的网络哈希率不到总网络哈希率的50%(与其他历史协议不同的获取安全的方式)。区块链在设计上更倾向于可用性而非一致性,并且能够支持数千个分散的节点。分权的成本是以每秒事务量(TPS)衡量的低得多的吞吐量。
我将在我的下一篇文章中详细介绍这些保证和其他内容!
===========================
FLP论文:
https://groups.csail.mit.edu/tds/papers/Lynch/jacm85.pdf
CAP定理更多信息:
https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/
Lamport / Pease 论文:
https://people.eecs.berkeley.edu/~luca/cs174/byzantine.pdf
中本聪论文:
https://bitcoin.org/bitcoin.pdf
转自:medium
作者:Zain Admani
翻译:熵链学派