我们先讲述一个简单的小故事
两位拜占庭的将军分别率领了一只军队攻打同一座城市,为了侵占这座城市,两位将军各自驻扎在城市周边的两座山头里。两座山之间隔着一道山谷,双方唯一的通讯方式是派遣信使来往于山谷之间。
可这两座山的中央早已被城市的保卫部队占领,因此,信使在往返其间时,将有可能被保卫部队抓获。现在两支军队要协商仅供城市的时间,必须要同时进攻城市,它们才能获得战争的胜利。现在的问题是,两位将军能就何时进攻达成一致吗?
1982年,图灵奖获得者Leslie Lamport发表了一篇重要的论文《拜占庭将军问题(TheByzantine Generals Problem)》,这篇论文记载了拜占庭将军的小故事。由此展开了长达几十年的、关于如何在分布式系统中有节点被故意破坏的情况下达成共识的讨论。区块链技术的出现以后,这种讨论有愈演愈烈的趋势。
现在我们来演绎这个过程
将军A写了封进攻信“我们两支军队凌晨四点一起发动总攻”,并将信交给信使。信使将信带出去后,将军A根本不知道信使是被捕了还是已将信送达。因此,将军A会犹豫是否发动进攻,除非收到了将军B的确认回信。
假设信使通过了山谷,将信交给了将军B,将军B写了封回信“我同意在凌晨四点发动总攻”,他将回信交给信使之后,将军B不能肯定将军A收到了回信,因此只好等到将军A送来回信时再进攻……你已经发现了,他们将在这中间不断往