拜占庭容错共识算法及其变种

拜占庭容错共识算法及其变种_第1张图片
区块链3.jpeg

拜占庭容错共识算法(Byzantine Fault Tolerance)
核心特点:

  • 速度快,支持高并发
  • 可扩展
  • 通常用于私有链或者联盟链

解释说明:
拜占庭将军问题是分布式计算中的一个经典问题。
拜占庭将军问题是Leslie Lamport(2013年的图灵奖得主)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子。
这个例子大意是这样的:
拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。这10支军队在分开的包围状态下同时攻击。他们任一支军队单独进攻都毫无胜算,除非有至少6支军队(一半以上)同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵骑马相互通信来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。在这种状态下,拜占庭将军们才能保证有多于6支军队在同一时间一起发起进攻,从而赢取战斗?
拜占庭将军问题中并不去考虑通信兵是否会被截获或无法传达信息等问题,即消息传递的信道绝无问题。Lamport已经证明了在消息可能丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。所以,在研究拜占庭将军问题的时候,已经假定了信道是没有问题的.
问题分析
单从上面的说明可能无法理解这个问题的复杂性,我们来简单分析一下:
先看在没有叛徒情况下,假如一个将军A提一个进攻提议(如:明日下午1点进攻,你愿意加入吗?)由通信兵通信分别告诉其他的将军,如果幸运中的幸运,他收到了其他6位将军以上的同意,发起进攻。如果不幸,其他的将军也在此时发出不同的进攻提议(如:明日下午2点、3点进攻,你愿意加入吗?),由于时间上的差异,不同的将军收到(并认可)的进攻提议可能是不一样的,这是可能出现A提议有3个支持者,B提议有4个支持者,C提议有2个支持者等等。
再加一点复杂性,在有叛徒情况下,一个叛徒会向不同的将军发出不同的进攻提议(通知A明日下午1点进攻, 通知B明日下午2点进攻等等),一个叛徒也会可能同意多个进攻提议(即同意下午1点进攻又同意下午2点进攻)。
叛徒发送前后不一致的进攻提议,被称为“拜占庭错误”,而能够处理拜占庭错误的这种容错性称为「Byzantine fault tolerance」,简称为BFT。
相信大家已经可以明白这个问题的复杂性了。

PBFT(Practical Byzantine Fault Tolerance)实用拜占庭容错
当前的Hyperledger Fabric 采用的就是这种方案,PBFT实用了少于20个的预定将军数,所以运行的效率非常高效。
特点

  • 高交易量和高吞吐量
  • 趋于中心化
  • 适用于私有链或者联盟链场景

FBA(Federated Byzantine Agreement)联邦拜占庭协议
瑞波币采用的就是这种共识算法。
理念是每个拜占庭将军负责自身的链、消息一旦到来,通过排序建立事实。在Ripple中,将军(验证者)是Ripple 基金会预先选定的。
特点

  • 超高的吞吐量
  • 低交易开销
  • 方便网络扩展性

dBFT(Delegated Byzantine Fault Tolerance)授权拜占庭容错算法
这是一种支持通过代理投票实现大规模参与共识的拜占庭容错共识算法。典型的应用是 Neo,令牌持有者可以通过投票选取其支持的BookKeeper,之后,选定的BookKeeper组采用BFT算法达成共识,并生成新的区块。Neo网络中的投票是实时的,而非因人而异。
dBFT容错涵盖了安全性和可用性、不受将军和拜占庭错误影响,适合任何网络环境。dBFT具有非常好的最终一致性,一旦区块进行确认,区块将不可分叉,交易将不可撤销或者回滚。
Neo的dBFT机制生成一个区块需要15~20秒,交易吞吐量测定为1000TPS,对于公有链来讲,已经是非常好的性能。通过一定的优化,可以达到10000TPS的潜力,就可以支持大规模的商业应用。
dBFT中加入了数字身份技术,这意味着BookKeeper可以是真实的个人,也可以是某些机构。因此,dBFT根据存在于其本身之中的司法判决,可以冻结、撤销、继承、检索和拥有代币兑换权。它有利于实现合规的金融资产在Neo网络中注册。

上述就是有关拜占庭将军共识算法及其变种的一些介绍。

你可能感兴趣的:(拜占庭容错共识算法及其变种)