Chr*_*own 6 fault-tolerance distributed-computing distributed-system multiple-processes
我最近读了很多关于拜占庭容错的论文。有一个常见的证明,需要 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都进攻,问题就解决了。这是一个与经典的拜占庭将军问题不同的问题吗?
你所描述的是三方共识,所有参与者都可以有自己的意见。拜占庭将军问题包括单个将军向其他将军发送命令。所有忠诚的将军必须作为一个整体,要么服从,要么不服从命令。问题是要确保每个人都同意指挥官所说的话。
这是一个例子:
首先,担任指挥官或拜占庭将军很容易;你不在乎别人怎么想。困难的部分是成为一名忠诚的将军接受别人的命令。
对于 3 位将军试图决定是否应该进攻,我们有两种可能的情况:
由于你,忠诚的将军,不知道指挥官实际上对另一位将军说了些什么,所以你不知道指挥官是否对你撒了谎,或者另一位将军是否撒了谎。
| 归档时间: |
|
| 查看次数: |
705 次 |
| 最近记录: |