这个女生说:弄懂本文前,你所知道的区块链可能都是错的
以下是 DLS 算法的工作原理:
如果提议者接收到 x + 1 个进程发出的建议值,这个值将会作为最终值提交。 DLS 算法可以说是一个重大突破,因为它创造了一个新的网络假设类型,即部分同步,并证明了在部分同步中,实现共识是可能的。 那么如何实现呢,我们关注两点:安全性和活跃性。 安全性 这是“一致性”(Agreement)的另一个术语。其中所有非故障进程都赞成相同的输出值。如果我们能保证足够的安全性,就能够保证整个系统保持同步;而如果安全性不够,将会导致需要更多的事务日志来终止这一轮的信息传输。我们希望所有节点都遵从事务日志的顺序,尽管故障和恶意进程是无法避免的。 活跃性 这是“终止性”(Termination)的另一个术语。其中每个非故障节点都会以某个输出值作为最终决定值。在区块链设置中,新的区块不断生成,区块链不断延伸,这就是活跃性。只有保持活跃,这个网络才有用处,否则,区块链就“烂尾”了。 从 FLP 不可能性中我们知道,在完全异步的系统中,共识是不可能达成的。DLS 的论文则认为,如果进行部分同步假设,就可以营造活跃环境,而这就足以攻克 FLP 不可能性。 因此,本文证明了该算法无需进行同步假设,安全条件都可以保证。 如果节点没有决定某个输出值,系统就会停止。为了保证终止,也就是保证活跃性,我们可以做一些同步假设(即超时)。但如果某一次同步假设失败,系统也会停止。 但是,如果我们设计一个算法,在这个算法中假设超时以保证安全性。可一旦如果同步假设失败,就有可能导致有两个有效的事务日志生成。 两个事务日志要比系统停止要危险得多——如果不安全,那么活跃无意义。 可以说,即使整个区块链停止,那也好过于生成两个不同的区块链。 分布式系统总是在权衡取舍。如果你想突破一个限制(比如 FLP 不可能性),你必须在别的地方做出让步。在这种情况下,把关注点分成安全性与活跃性是非常合理的。这样我们可以构建一个在异步假设中的安全系统,但仍然需要超时来保证有新的值持续输出。 DLS 的论文已经讲得足够详细,但到如今,DLS 从未真正地被广泛应用,甚至没有在实际的拜占庭场景中使用。这可能因为 DLS 算法的核心假设之一是使用同步时钟,以便有一个共同的时间概念。实际上,同步时钟很容易受到多重攻击,在一个拜占庭容错假设中往往不够可靠。 PBFT(Practical Byzantine Fault-Tolerance) Miguel Castro 和 Barbara Liskov 在 1999 年发表了论文《Practical Byzantine Fault-Tolerance》(《实用的拜占庭容错》),其中提出了 PBFT 算法。对于拜占庭系统来说,这种算法正如其名——更加“实用”。 这篇论文认为,以前的算法虽然“理论上可行”,但要么太慢而无法使用,要么为了安全性必须做同步假设。我们前文中提过,这在异步环境中是非常危险的。 PBFT 中的 “P”(Practical)意味着该算法可以在异步环境中应用,并且做了一些优化,运行速度会更快。 在 PBFT 中,无论有多少故障节点,系统都能够提供安全性。如果系统内的节点总数是 n,那么算法的容错节点数量 x 的最大值是 (n-1)/3,而且消息延迟的增长速度不会超过一定的时间限制。 因此,PBFT 进行同步假设并不是为了安全,而是为了活跃,并以此规避 FLP 不可能性。 算法通过一系列“视图”(view)运行,每个视图都有一个“主”节点(即领导者),其余的都是“备份”。下面是 PBFT 详细的工作步骤:
如果主节点不出错,协议就能正常运行。然而,如果主节点出错,或者恶意,备份节点能够通过 timeout 机制检测到主节点是否已经废掉。当出现这些异常情况时,这些备份节点就会触发视图更换(view change)协议来选举出新的主节点。但是这个过程非常缓慢,为了达成共识,PBFT 需要进行二次通信——每台计算机必须与网络中的所有计算机都进行通信。 注意:想要完整地解释PBFT算法,得非常大的篇幅!这里说一下关键部分就好。 虽然 PBFT 相比以前的算法已经有了长足的改进,但对于有大量参与者的实际场景(如公链)来说,它还不够实用。但是,至少在故障检测和领导者选举方面,它给出了一些具体的做法,这要比 Paxos 强多了。 PBFT 的贡献是举足轻重的,它整合了一系列重要的有变革意义的算法思想,不少新的共识协议从中受益匪浅,尤其是后区块链时代(post-blockchain world)。 比如,Tendermint 是一种新的共识算法,从 PBFT 中获益颇丰,且设计更加实用。在“验证”阶段,Tendermint 使用两个投票步骤来决定最终值;Tendermint 每轮都会更换新领导者。如果当前一轮的领导者在一段时间内没有响应,那么它就会被跳过,算法直接进入下一轮,并产生新的领导者。而在 PBFT 中,每次视图更换选新的领导人,都需要一次繁琐耗时的点对点连接,相比起来,Tendermint 运行更简洁,更有实用意义。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |