CAP定理和区块链

CAP定理,也称为Brewer定理,由Eric Brewer在1998年作为猜想引入。 2002年,它作为一个定理被Seth Gilbert和Nancy Lynch证明。 该理论指出,任何分布式系统都不能同时具有一致性,可用性和分区容忍性:

一致性是一种属性,可确保分布式系统中的所有节点都具有单一,当前和相同的数据副本。

可用性意味着系统中的节点已启动,可供使用,并且在需要时接受传入请求并响应数据而不会出现任何故障。 换句话说,每个节点都有数据,节点都能响应请求。

分区容忍性确保如果一组节点由于网络故障而无法与其他节点通信,则分布式系统继续正常运行。 这可能由于网络和节点故障而发生。

已经证明,分布式系统不能同时具有一致性,可用性和分区容忍性。 以下示例对此进行了解释。 让我们假设有一个带有两个节点的分布式系统。 现在让我们在这个最小的只有两个节点的可能分布式系统上应用三个定理属性。

一致性:如果两个节点具有相同的共享状态,则实现一致性; 也就是说,它们具有相同的最新数据副本。

可用性:如果两个节点都启动、运行并使用最新的数据副本进行响应,则可以实现可用性。

分区容忍性如果通信在两个节点之间没有中断(由于网络问题,拜占庭故障等等),则可以实现分区容差,并且它们能够相互通信。

现在想一想分区发生且节点不能再相互通信的场景。 如果此时新的更新数据到来,则只能在一个节点上更新。 在这种情况下,如果节点接受更新,则仅更新网络中的那个节点,因此失去一致性。 现在,如果节点拒绝更新,则会导致可用性丢失。 在这种情况下,由于分区容忍性,可用性和一致性都无法实现。

这很奇怪,因为某种程度上区块链设法实现所有这些属性 – 或者说是吗? 这将很快解释。 要实现容错,必须使用复制。 这是一种实现容错的标准和广泛使用的方法。 使用一致性算法实现一致性,以确保所有节点具有相同的数据副本。 这也称为状态机复制。 区块链是实现状态机复制的手段。 通常,节点可能遭遇两种类型的故障。 这两种类型都属于分布式系统中可能出现的更广泛的故障类别:

失效停止故障:当节点崩溃时会发生此类故障。 失效停止故障是两种故障类型的中更容易处理的故障。 本章前面介绍的Paxos协议通常用于处理此类故障。 这些故障很容易处理。

拜占庭故障:第二类故障是故障节点任意表现恶意或不一致的行为。 这种类型很难处理,因为它会因产生误导信息而产生混淆。 这可能是攻击者攻击,软件错误或数据损坏的结果。 为了解决第二类故障,诸如PBFT的状态机复制协议被开发出来。

奇怪的是,似乎CAP定理在区块链中被违反,特别是在其最成功的实现中 – 比特币。 然而,这种情况并非如此。 在区块链中,牺牲了一致性,选择了可用性和分区容忍性。 在这种情况下,区块链上的一致性(C)不能与分区容忍性(P)和可用性(A)同时实现,但它是随着时间的推移而实现的。 这称为最终一致性,其中由于多个节点随时间的验证而实现一致性。 为此目的,在比特币中引入了挖矿的概念。 挖矿是一个通过使用PoW一致性算法促进达成共识的过程。 在更高级别,可以将挖矿定义为用于向区块链添加更多区块的过程。 稍后将在第5章“比特币介绍”中对此进行更多介绍。

本章总结

在本章中,我们向您介绍了高级区块链技术。 首先,我们讨论了分布式系统的一些基本概念,然后我们回顾了区块链的历史。 我们还讨论了电子现金等概念。

此外,我们从不同的角度提出了区块链的各种定义。 我们还向您介绍了几种区块链技术的应用。 接下来,我们探索了不同类型的区块链。 最后,我们研究了这项新技术的优点和局限性。 一些有关于区块链可扩展性和适应性问题的主题被简要介绍,因为这些将在后面的章节中进行深入讨论。

在下一章中,我们将向您介绍去中心化的概念,这是区块链及其大量应用程序背后的核心思想。

去中心化 - 使用区块链进行去中心化
区块链101 - 区块链中的共识