我最近读了很多关于拜占庭容错的论文。有一个常见的证明,需要 3m+1 台计算机来处理 m 个拜占庭故障。一般证明是这样的:
存在三个“将军”:A、B、C。假设将军们是这样沟通的,其中C是“叛徒”:
A --> B "Attack", A --> C "Attack"
B --> A "Attack", B --> C "Attack"
C --> A "Attack", C --> B "Retreat"
A receives "Attack" from both sources, and will attack.
B receives "Attack" from A but "Retreat" from C and doesn't know what to do.
C is a traitor, so his action could be anything.
Run Code Online (Sandbox Code Playgroud)
因此,我们不能保证大多数参与者会达成共识。
我有点理解这个证明,但似乎忽略了一个要点。A、B、C不也各自内部计算着要做什么吗?由于A和B是这里的“忠诚”将军,因此似乎“正确”的行动是进攻。难道B在决定做什么时不允许考虑他自己的计算吗?在这种情况下,他可以轻松打破相互冲突的 A&C 输入之间的联系并决定进攻。然后,A和B都进攻,问题就解决了。这是一个与经典的拜占庭将军问题不同的问题吗?
fault-tolerance distributed-computing distributed-system multiple-processes