为何说比特币是重大创新?谈传统分布式共识 VS 中本聪共识

发布时间:2019-05-16 11:04:47 来源:完美贵宾会-完美贵宾会平台-完美贵宾会官网点击:43

  本文来源于巴比特,原文标题《为何说比特币是重大创新?谈传统分布式共识 VS 中本聪共识》

  每个分布式系统都有一组特定的特征,这些包括:

  A)并发

  系统中的进程同时运行,这意味着同时会发生多个事件。换句话说,网络中的每台计算机与网络中的其它计算机,会同时独立地执行事件。

  Lamport, L (1978):分布式系统中的时间、时钟和事件排序

  B)缺乏全局时钟

  对于同时运行的计算机集合系统,我们需要某种方法来确定事件的顺序。但是,在分布式计算机系统中,有时不可能明确两起事件中的哪起事件是先发生的,因为计算机在空间上是分开的。换句话说,没有一个全局时钟必发365来确定网络中所有计算机发生的事件序列。

  在《 分布式系统中事件的时间、时钟和顺序 》这篇论文当中,Leslie Lamport展示了如何通过记住以下因素来推断出一个事件是否发生在另一个事件之前:

  1)消息是在它们被收到之前发送的; 2)每台计算机都有事件的序列;

  通过确定哪个事件是发生在另一个事件之前的,我们可以获得系统中事件的部分排序。

  Lamport的论文描述了一种算法,该算法要求每台计算机都能够“听到”其它每台计算机。

  通过这种方式,事件就可以基于这种偏序进行完全排序。

  但是,如果我们完全根据每台计算机正在听到的事件进行排序,则可能导致此顺序与外部用户(系统外部)所感知的顺序会不同。因此,该论文提到的算法仍然可允许异常行为。

  最后,Lamport讨论了如何通过使用正确同步的物理时钟来防止这种异必发888常情况。

  但是,等等,这里有一个巨大的警告:协调独立的时钟,是一个非常复杂的计算机科学问题。即使你最初准确地设置了一堆时钟,时钟也会在一段时间后开始出现差异。这是由“时钟漂移”问题造成的,这是一种时钟以稍不同速率计算时间的现象。

  本质上,这篇论文证明了,事件的时间和顺序,是在空间上分离的分布式计算机系统的基本障碍。

  C)组件的独立故障

  理解分布式系统的一个关键部分,在于承认分布式系统中的组件会存在故障。这就是它被称为“容错分布式计算”的原因。

  拥有一个没有故障的系统是不可能的。真实的系统会存在很多可能的缺陷或弱点,无论这是一个进程崩溃,消息丢失、扭曲或重复,还是网络分区延迟或出现丢弃消息的情况,甚至会出现进程完全失控,并根据一些恶意计划发送消息的情况。

  这些失败大致可分为三类:

  崩溃失败:组件在没有警告的情况下停止工作(例如,计算机崩溃);

  遗漏:组件发送了消息,但其它节点并没有收到消息(例如,消息丢失了)

  拜占庭:组件的表现是任意的。在受控环境下(例如Google或Amazon数据中心)出现这类故障是无关紧要的,其中可能没有什么恶意行为。相反,这类错误会发生在所谓的“对抗性环境”下。基本上,当一组分散的独立行动者充当网络中的节点时,这些行动者可能选择以“拜占庭”的方式行事。这意味着他们会恶意选择更改,阻止或不发送消息。

  考虑到这些问题,我们的目标是设计一种协议,它可允许具有故障组件的系统,仍可实现共同目标,并提供有用的服务。

  鉴于每个系统都会有故障,我们在构建分布式系统时必须做出的核心假设是,即使其部件偏离了正常行为,它也能继续存活,无论是否由于非恶意行为(崩溃失败或遗漏错误)还是因为恶意行为(即拜占庭故障)。

  从广义上讲,制作分布式系统时,需考虑两种类型的模型:

  1)简单的容错

  在一个简单的容错系统中,我们假设系统的所有部分都执行以下两种操作之一:它们要么完全遵循协议,要么失败。这种类型的系统,应能够处理脱机或失败的节点。但它不必担心节点表现出随意或恶意行为。

  2)拜占庭容错

  简单的容错系统在不受控制的环境当中,并不是很有用。在一个去中心化的系统当中,节点是由独立的参与者控制的,它们之间在开放的、无需许可的互联网上进行通信,我们还需要为那些选择恶意或“拜占庭”行为的节点进行设计。因此,在拜占庭容错系统当中,我们假设节点是可以失败或恶意的。

  2b)BAR容错

  尽管大多数真实系统都被设计为能够承受拜占庭式的故障,但一些专家认为它过于笼统,并没有考虑到“理性”故障(其中节点可能出于自身利益的考虑而出现偏差行为)。换句话说,根据激励的情况,节点是可以诚实的,也可以是不诚实的。如果激励措施足够高,那么即使是大多数节点也可能会做不诚实的事。

  更正式地讲,这被定义为BAR模型,它同时考虑了拜占庭和理性故障问题。 BAR模型假设有三种类型的成员:

  拜占庭 :拜占庭节点是恶意的,它们试图搞砸你;

  利他主义者:诚实的节点总是遵循协议。

  理性节点:理性节点只有在他们认为合适时才会遵循协议。

  D)消息传递

  如上面所述,分布式系统中的计算机,通过一台或多台其他计算机之间的“消息传递”进行通信和协调。消息可使用任何消息传递协议进行传递,无论是HTTP,RPC还是为特定实现构建的自定义协议。

  如果接受者收到一个接受请求 (“accept,” n, v),它会接受该提议,除非它经响应了一个数字大于n的准备请求。

  阶段3:学习阶段

  每当接受者接受提议时,它会响应所有学习者 (“accept,” n, v)

  学习者从大多数接受者那里接收 (“accept,” n, v) ,决定v,并向所有其他学习者发送(“decide,” v) ;

  学习者接受 (“decide,” v)并决定v;

  来源: https://www.myassignmenthelp.net/paxos-algorithm-assignment-help

  嗯!困惑了吗?我知道这里有很多信息需要去消化。但是,等等……还有更多的信息!

  我们现在知道,每个分布式系统都是有故障的。在Paxos算法中,如果提议者失败(例如,因为存在遗漏错误),则可延迟决策。 Paxos通过从第1阶段的新版本号开始处理此问题,即使之前的尝试从未结束。

  我不会详细介绍,但在这种情况下,恢复正常运行的进程是非常复杂的。

  Paxos难以理解的主要原因,是它的很多实现细节都留给了读者:例如我们如何知道提议者什么时候失败?我们是否使用同步时钟来设置超时时间,来决定提议者何时失败?等等。

  Paxos在领导者选举,故障检测和日志管理等内容是模糊或完全不明确的。

  这种设计选择最终成为Paxos最大的缺点之一,它不仅难以理解,而且也很难实现。反过来,这使得分布式系统领域也难以驾驭。

  到目前为止,你可能想知道同步假设的来源。

  在Paxos中,虽然算法中没有明确的超时,但在实际实现时,在一些超时时间之后选择一个新的提议者是实现终止所必须的。否则,我们就无法保证接收者会输出下一个值,系统可能会因此停止运行。

  Raft算法

  2013年,Ongaro和Ousterhout发布了一种名为Raft的复制状态机共识算法,其核心目标是可理解性(与Paxos的最大不同之处)

  我们从Raft算法学到的一个重要新事物,是使用共享超时的概念来处理终止问题。在Raft中,如果你崩溃了并重新启动,你需要等待至少一个超时时间,才能让自己被宣布为领导者,并保证你取得进步。

  但等等...拜占庭环境呢?

  虽然传统的共识算法(例如Paxos和Raft)能够使用某种程度的同步假设(即超时)在异步环境中发展,但它们不是拜占庭容错的。它们只是崩溃容错的。

  崩溃故障是较容易处理的,因为我们可以将进程建模为工作或崩溃 (0或1),进程不能恶意行事或撒谎。因此,在崩溃容错系统中,分布式系统是可构建的,其中简单的多数参与者就足以达成共识。

  而在开放和去中心化的(例如公链)系统中,用户无法控制网络中的节点。相反,每个节点都会针对其各自的目标做出决策,这可能与其他节点的目标冲突。

  在拜占庭系统中,节点具有不同的激励,它们可以撒谎、协调或任意行动,你不能假设简单的多数节点就能够达成共识。一半或更多的诚实节点是可相互协调和欺骗的。

  然而,Raft并不是为了容忍这种行为而设计的。例如,如果当选的领导者是拜占庭,并且与其他节点保持强大的网络连接,则可能会危及系统。 Raft和Paxos是简单的容错,但不是拜占庭容错。

  拜占庭将军问题

  试图建立一个可处理冲突信息进程的可靠计算机系统,被称为“拜占庭将军问题”。拜占庭容错协议应该能够实现其共同目标,即使是遭受来自节点的恶意行为。

  Leslie Lamport,Robert Shostak和Marshall Pease撰写的《 拜占庭将军问题 》论文,提供了解决拜占庭将军问题的第一个证明:它表明具有x个拜占庭节点的系统,必须至少有(3x + 1)个总节点,才能达到共识。

  原因如下:

  如果x节点出现故障,则系统需要与(n-x)节点协调后才能正常运行(因为x节点可能有故障(拜占庭)并且没有响应)。但是,我们必须为不响应的可能没有错误的X节点做准备,它也可能是做出回应的X节点。如果我们希望非故障节点的数量超过故障节点的数量,我们至少需要(n-x-x)> x,因此,n> 3x + 1是最佳的。

  但是,该论文中演示的算法仅适用于同步环境。这不是一个好消息!看起来,我们只能得到一个或另一个(拜占庭vs异步),对吗?

  一系列round分为“尝试”和“锁定释放”阶段。

  每一轮都有一个提议者,并从每个进程开始,传达他们认为正确的值。

  如果至少有(N ? x)个进程传达了一个值,则提议者“提出”该值。

  当进程从提议者处接收建议值时,它必须锁定该值,然后广播该信息。

  如果提议者从x + 1进程接收到他们锁定某个值的消息,则将其作为最终值提交。

  DLS是一项重大技术突破,因为它创造了一种新的网络假设类型,即部分同步,其还证明了这种假设的共识是可能的。DLS论文中另一个必要的内容,是将拜占庭和异步设置达成共识的问题分为两个方面:安全性和活跃性。

  安全性

  这是我们前面讨论过的“协议”属性的另一个术语,其中所有非故障进程都对同一输出达成一致。如果我们能够保证安全性,则我们能够保证整个系统保持同步。我们希望所有节点同意交易日志的总顺序,尽管会存在失败和恶意行为者的干扰。而违反安全性,意味着我们最终会得到两个或更多有效的交易日志。

  活跃性

  这是我们早期讨论的“终止”属性的另一个术语,其中每个非故障节点最终决定某些输出值。在区块链设置当中,活跃性意味着区块链通过添加有效新区块而不断增长。活跃性是很重要的,因为它是网络继续有用的唯一方式,否则,网络就会停滞不前。

  正如“FLP不可能”告诉我们的,在完全异步的系统中是无法达成共识的。而 DLS论文认为,为实现活跃条件而做出部分同步假设,足以克服FLP不可能性。

  因此,这篇论文证明了算法不需要使用任何同步假设来实现安全条件。

  很明确,对吧?如果不是,不要担心。让我们深入探讨这个概念:

  请记住,如果节点没有决定某个输出值,系统就会暂停。因此,如果我们做出一些同步假设(即超时),以保证终止,并且其中一个会失败,那么这也会使系统停止。

  但是,如果我们设计一个算法,其中我们假设了超时(以保证安全性),而如果同步假设失败,则会带来导致两个有效交易日志的风险。

  这比前一种选择会危险得多。如果服务损坏(即没有安全性),则没有必要提供有用的服务(即活跃性)。

  基本上,拥有两个不同的区块链,会比整个区块链停止会更糟。

  分布式系统总是需要权衡利弊的,如果你想克服限制(例如FLP不可能),你必须在其它地方做出牺牲。在这种情况下,将关注点分解为安全性和活跃性是非常好的。它允许我们构建一个在异步设置中安全,但仍需要某种形式超时来保持生成新值的系统。

  尽管DLS论文提供了所有内容,但DLS算法从未真正被广泛实施,或用于真实世界的拜占庭式设置。这可能是由于DLS算法的核心假设之一,是使用同步处理器时钟(以便具有共同的时间概念)。实际上,同步时钟容易受到大量攻击,并且它在拜占庭容错设置中并不是很好。

  PBFT算法

  另一种由Miguel Castro和Barbara Liskov于1999年发表的拜占庭容错算法,被称为“ 实用拜占庭容错 ”(PBFT)。对于展示拜占庭行为的系统而言,它被认为是一种更为“实用”的算法。

  从这个意义上来说,“实用”意味着它可以在互联网等异步环境中运行,此外它也进行了一些优化,使其较以前的共识算法要更快。该论文中提到,以前的算法虽然被证明是“理论上可行的”,但它们要么太慢,无法被使用,要么是为了安全性而做了假定同步。

  正如我们已经解释的那样,在异步设置中,这可能是非常危险的。

  简而言之,PBFT算法表明,假设(n-1)/ 3 个节点出现了故障,它可以提供安全性和活跃性。正如我们之前讨论的那样,这是我们需要容忍拜占庭故障的最小节点数。因此,该算法的抵抗性是最理想的。

  无论有多少节点出现故障,该算法都能够提供安全性。换句话说,它没有为安全性而假设同步。然而,该算法确实依赖于同步性来实现活跃:

  最多的情况下,(n-1)/ 3 个节点可出现故障,并且消息延迟的增长速度不会超出某个时间限制。

  因此,PBFT通过使用同步假设来保证活跃性,从而规避了FLP不可能性。

  该算法通过一系列“view”,其中每个view都有一个“主要”节点(即领导者),其余view都是“备份”节点。以下是有关PBFT工作方式的逐个步骤:

  在客户端上发生了一笔新的交易,并向主要节点广播;


必发365 必发888 必发365