本篇主要结合Lamport((2013年的图灵奖得主) 1982年的论文《Byzantine Generals Problem》讲一讲拜占庭将军问题(Byzantine Generals Problem),本质上,它是分布式系统的一致性问题。区块链最重要的特点就是分布式系统,去中心化,那么在这个系统中同样地存在一致性问题。
为了理解什么是一致性问题,看一下下面的图。
在中心化系统中,中心点负责传达消息,只要中心点不出错,系统就能够正常运行。譬如,银行负责记账,用户只负责交易和查询。但是,正如我们之前看到的,中心点是可能出问题的。
而非中心化系统中,各个节点之间如何达成一致呢?在货币系统中,如果有用户花了钱又不肯认帐怎么办?有恶意攻击者故意捣乱怎么办?这就是分布式系统的一致性问题。
(一)拜占庭问题
以下定义来自维基百科:拜占庭将军问题重定向到拜占庭容错。
拜占庭容错(BFT)是容错计算机系统,特别是分布式计算系统的可靠性问题,其中组件可能发生故障并且关于组件是否发生故障的信息不完整。在“拜占庭式故障”中,诸如服务器之类的组件对故障检测系统可能不一致地出现故障和起作用两种情况,向不同的观察者呈现不同的状况。
其他组件很难将其声明失败并将其关闭,因为他们需要首先就哪个组件失败达成共识。所以的组件必须就协同战略达成一致,以避免灾难性的系统失败,但有些组件不可靠。拜占庭容错也被称为交互一致性或源一致性、错误雪崩、拜占庭协议问题、拜占庭将军问题和拜占庭失败。
至于为什么会叫做“拜占庭将军问题”,分布式系统的大牛Lamport给出了一段说明:https://www.microsoft.com/en-us/research/publication/byzantine-generals-problem/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Flamport%2Fpubs%2Fbyz.pdfwww.microsoft.com
简而言之就是说,Lamport觉得在并发领域,哲学家吃饭问题(The Philosopher's Eating Problem)获得的关注比读者-写者问题(Reader-Writer Problem)大多了,虽然读者-写者问题的用处明显很大一些。Lamport的结论就是,给一个研究性的问题起一个故事性的名字对引起关注有好处。
之前有过“Two Generals Problem(Chinese Generals Problem)”,主要是研究不安全的链路上进行通信和协调的情况。所以Lamport