拜占庭将军问题 / 拜占庭容错

Byzantine Generals Problem / Byzantine Fault Tolerance

  • 拜占庭将军问题也就是分布式网络一致性问题(Distributed Consensus)
  • 拜占庭容错是莱斯利·兰伯特(Leslie Lamport)用来描述分布式系统一致性问题时,在论文中抽象出的著名的例子
  • 莱斯利·兰伯特是美国计算机科学家,是2013年图灵奖得主
  • 拜占庭将军的故事大意:

1.拜占庭(古希腊城市,现今土耳其伊斯坦布尔,旧名叫做君士坦丁堡)。拜占庭帝国,即东罗马帝国。
2.拜占庭帝国想进攻一个强大的大人,派10支军队包围敌人。敌人虽不比拜占庭帝国强大,但是足以抵御5支拜占庭帝国军队同时进攻。这10支军队分开包围,任何一支单独进攻都毫无胜算,至少需要6支军队同时袭击才能得胜。
3.拜占庭帝国的这10支军队分散在敌国四周,依靠通信兵起码相互通信来协商进攻或者撤退。各支军队行动策略限定为进攻或撤退2种。
4.问题在于:

     a.没有叛徒情况下,一个将军提出进攻提议,其他将军同事发出了不同进攻提议。出于时间差异,不同将军收到并认可的提议就是不同的;
     b.将军中可能出现判断;
     c.拜占庭将军问题不考虑通信兵是否被截获或无法传递信息等问题,也就是认为消息传递的信道绝无问题。兰伯特已经证明了在消息可能丢失的不可靠通信上,通过消息传递方式达成一致性是不可能的。所以在研究拜占庭将军问题时,已假定信道没有问题。
  • 分布式计算中,不同计算机通过通讯交换信息达成共识,从而按照同一套协作策略来行动。但是有时候系统中成员计算机可能出错而发出错误信息,使得网络中不同的成员关于全体协作的策略得出不同的结论,从而就破坏了系统的一致性。
  • 拜占庭将军问题被认为是容错性问题中最难的问题类型之一。共识算法的核心就是解决拜占庭将军问题。
  • 解决分布式系统一致性问题主要是兰伯特提出的Paxos算法。但是该算法仅仅适用于中心化的分布式系统,这样的系统中没有不诚实节点。
  • 1999年,有人提出了PBFT算法(Practical Byzantine Fault Tolerance, 实用的拜占庭容错算法)。

1.叛徒等于或大于三分之一,拜占庭问题无解;
2.当叛徒数量不到三分之一,那么忠诚将军就至少有三分之二,此时拜占庭问题有解,仍然可以达到容错。

  • 比特币系统通过POW共识机制巧妙地解决了拜占庭容错问题。

1.POW增加发送信息的成本,降低了节点发送消息的速度,保证一段时间内只有一个节点广播消息,同时在广播上附上签名。这样就解决了因为时间差而导致消息传递不一致的问题;
2.对于将军做叛徒的问题,比特币系统的解决方案就是,让比特币网络中每个节点没有动机和动力做叛徒。

     a.POW工作量证明机制提高了做叛徒(发布虚假区块)的成本,在工作量证明下,只有第一个完成证明的节点才能广播区块,竞争难度非常大,需要很高算例,如果不成功其算力就白白的耗费了(算力是需要成本的),如果有这样的算力作为诚实的节点,可以获得很大的收益(这就是矿工所作的工作),这也实际就不会有做叛徒的动机,整个系统也因此而更稳定。
     b.对于51%攻击问题,那更是提高了做叛徒的成本。拥有这么大的算力的,自然就是希望依赖比特币系统而盈利的,当然更不会造假而损坏自身利益。
     c.当然很多人批评POW工作量证明机制造成巨大的电力浪费,促使人们去探索新的解决一致性(共识)问题的机制:权益证明机制(POS : proof  of  Stake)是一个代表。在拜占庭将军问题的角度来看,它同样提高了做叛徒的成本,因为账户需要首先持有大量余额才能有更多的几率广播区块。如果已经拥有这么大的利益,当然更不会造假而损坏自身利益了。

你可能感兴趣的:(拜占庭将军问题 / 拜占庭容错)