加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

这个女生说:弄懂本文前,你所知道的区块链可能都是错的

发布时间:2018-12-02 14:15:50 所属栏目:传媒 来源:李晓泉译
导读:整个区块链行业的凛冽寒冬中,价格的涨跌已经左右了太多的人头脑之中的理智。可是,众人之中,究竟有几个人真正理解了区块链技术的密码学机制与分布式计算?究竟有几个人还会关心区块链在技术上的创新? 尘归尘,土归土。可能只有巨大的泡沫消散之后,区块链

以下是 DLS 算法的工作原理:

  • 运算的每一轮都被分为“试探”阶段和“锁定-释放”阶段。N 是系统的总节点数量,x 是系统的容错节点数量。
  • 每一轮都有一个提议者,回合的开始时候,每个进程传输各自认为正确的值。
  • 如果一个值最少被 N − x 个进程程传达过,那么提议者将把它作为建议值。
  • 当某个进程从提议者接收到建议值时,它必须锁定该值,然后散布这个信息。

如果提议者接收到 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 详细的工作步骤:

  • 客户端有一项新事务,将其发送给主节点。
  • 主节点将这项事务传递给所有备份。
  • 各备份执行该事务并向客户端发送回复。
  • 客户端收到来自 x+1 个节点的相同消息后,则该响应就是这次运算的结果,共识已经正确完成。

如果主节点不出错,协议就能正常运行。然而,如果主节点出错,或者恶意,备份节点能够通过 timeout 机制检测到主节点是否已经废掉。当出现这些异常情况时,这些备份节点就会触发视图更换(view change)协议来选举出新的主节点。但是这个过程非常缓慢,为了达成共识,PBFT 需要进行二次通信——每台计算机必须与网络中的所有计算机都进行通信。

注意:想要完整地解释PBFT算法,得非常大的篇幅!这里说一下关键部分就好。

虽然 PBFT 相比以前的算法已经有了长足的改进,但对于有大量参与者的实际场景(如公链)来说,它还不够实用。但是,至少在故障检测和领导者选举方面,它给出了一些具体的做法,这要比 Paxos 强多了。

PBFT 的贡献是举足轻重的,它整合了一系列重要的有变革意义的算法思想,不少新的共识协议从中受益匪浅,尤其是后区块链时代(post-blockchain world)。

比如,Tendermint 是一种新的共识算法,从 PBFT 中获益颇丰,且设计更加实用。在“验证”阶段,Tendermint 使用两个投票步骤来决定最终值;Tendermint 每轮都会更换新领导者。如果当前一轮的领导者在一段时间内没有响应,那么它就会被跳过,算法直接进入下一轮,并产生新的领导者。而在 PBFT 中,每次视图更换选新的领导人,都需要一次繁琐耗时的点对点连接,相比起来,Tendermint 运行更简洁,更有实用意义。

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读