拜占庭容错 Byzantine Fault Tolerance(BFT)

简介

拜占庭将军问题

拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。基于一些原因,这10支军队不能集合在一起单点突破,必须在分开的包围状态下同时进攻。他们任一支军队单独进攻都毫无胜算,除非有至少6支军队同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵相互通信来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。在这种状态下,拜占庭将军们能否找到一种分布式的协议来让他们能够远程协商,从而赢取战斗?这就是著名的拜占庭将军问题。
拜占庭将军问题中并不去考虑通信兵是否会被截获或无法传达信息等问题,即消息传递的信道绝无问题。Lamport已经证明了在消息可能丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。所以,在研究拜占庭将军问题的时候,假定信道是没有问题的,然后去做一致性和容错性相关研究。

两将军问题

两个将军要通过信使来达成进攻还是撤退的约定,但信使可能迷路或被敌军阻拦(消息丢失或伪造),如何达成一致?
根据FLP不可能原理,两将军问题无通用解。

BFT

BFT(Byzantine Fault Tolerance), 即拜占庭容错是拜占庭将军问题在现实世界的模型化,由于硬件错误,网络问题以及恶意攻击等原因,分布式计算系统的计算机和网络可能会出现不可预料的行为。拜占庭容错技术被设计用来处理现实存在的异常行为,并满足所要解决的问题的规范要求。

通常,发生故障的节点被称为拜占庭节点,正常的节点为非拜占庭节点。
拜占庭容错系统是一台拥有n个节点的系统,整个系统对于每个请求,满足一下条件:

  1. 所有非拜占庭节点使用相同的输入信息,产生相同的结果
  2. 如果输入的信息正确,那么所有非拜占庭节点必须接收这个信息并计算相应的结果

拜占庭系统普遍采用的假设条件包括:

  1. 拜占庭节点的行为可以是任意的,拜占庭节点之间可以共谋
  2. 节点之间的错误是不相关的
  3. 节点之间通过异步网络连接,网络中的消息可能丢失、乱序、延时到达
  4. 服务器之间传递的信息,第三方可以知晓,但是不能篡改、伪造信息的内容和验证信息的完整性

结论

拜占庭将军问题是一个有趣的困境,最终产生了拜占庭容错系统,这些系统正在各种场景中得到广泛应用。除区块链行业外,拜占庭容错系统的一些使用案例也包括航空,航天和核电行业。

在数字货币领域中,拥有高效的网络通信以及良好的共识机制对于任何区块链生态系统都至关重要。保护这些系统需要持续的努力,现有的共识算法尚未能克服一些限制(例如可扩展性)。尽管如此,工作量证明和权益证明作为拜占庭容错系统来说都是有效的方法,其潜在的应用会激发更多的创新。

posted @ 2022-04-20 17:31  哪吒young  阅读(234)  评论(0编辑  收藏  举报