找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

为什么需要共识呢

qukuailian 2019-11-22 16:49 882人围观 资讯

由于状态机具有决定性,为了使这些冗余的状态机具有一致的状态,每个状态机都必须依相同的顺序进行状态转换,因此每个状态机必须达成对转换顺序的共识。这些状态机组成一个网络,每个状态机都是网络中的节点,节点与节点间仅能透过通信交换信息以达成共识。

为什么共识这么难?

在只依赖通信便想达成共识的情境下,会碰到一个难解的问题,这也是在共识协定中一个著名问题:拜占庭将军问题。

一群拜占庭将军围攻一座城市,他们必须达成同时进攻或同时撤退的共识,且各将军只能透过信使将自己的决定通知其他人。然而,这群将军中有叛徒,可能会发出相反的信息干扰,或者只通知一部分的将军。在已知有叛徒存在的情况下,该如何达成正确的共识?

显然,状态机复制的共识问题可以被化约成拜占庭将军问题:

节点就是将军;

通信就是信使;

进攻/撤退的决策就是需达成共识的内容;

将军/状态机的随机行为称为拜占庭错误(Byzantine Fault);

叛徒/敌对状态机存在的情形下仍能达成共识的特性便称为拜占庭容错(Byzantine Fault Tolerance)。

正确的共识:安全性(Safety)与活跃性(Liveness)

一个正确、可用的共识协定必须确保拜占庭将军们一定会达成唯一的共识(安全性),且共识一定会形成(活跃性)。

共识一定可以达成吗?

具备安全性与活跃性的共识一定可以达成吗?答案是不一定。根据FLP原理:在非同步的网络通信及决定性的程序(Process)下,若出现任一个毁坏故障(Crash Fault),则共识不可能同时具备安全性与活跃性。

那怎么办?有两种方法可以绕过FLP原理的限制:第一种方法是假设网络通信是同步的——这就是PBFT所采用的方式;第二种方法是在共识协定中引入一些随机的因子,使整个协定变为非决定性的(Non-deterministic),这样做的优点是协定更强健,就算在非同步的网络通信下依然可以运作,例如Honey Badger BFT就是一个非同步且非决定性的共识。

效能如何?

在PBFT出现前,曾出现许多不同的共识协定,但是性能都不够好,直到PBFT的出现改变了一切,由其命名中的P(Practical)便能看出端倪。
(文章转载,如有侵权,请联系删稿)

我有话说......
相关文章