如何理解拜占庭将军问题?
11位拜占庭將軍去打仗, 他們各自有權(quán)力觀測敵情并作出判斷, 進(jìn)攻或撤退, 那么怎么讓他們只用傳令兵達(dá)成一致呢?
一種很符合直覺的方法就是投票,
每位將軍作出決定后都將結(jié)果"廣播"給其余所有將軍, 這樣所有將軍都能獲得同樣的11份(包括自己)結(jié)果, 取多數(shù), 即可得到全軍都同意的行為.
?
但如果這11位將軍中有間諜呢? 假設(shè)有9位忠誠的將軍, 5位判斷進(jìn)攻, 4位判斷撤退, 還有2個(gè)間諜惡意判斷撤退, 雖然結(jié)果是錯(cuò)誤的撤退, 但這種情況完全是允許的. 因?yàn)檫@11位將軍依然保持著狀態(tài)一致性.
暫時(shí)從戰(zhàn)爭故事中抽離出來, 分布式數(shù)據(jù)庫最糟糕的問題絕對(duì)不是寫入或者讀取失敗, 而是狀態(tài)不同步, 還感知不到. 這個(gè)的后果就是correctness不能保證, 那程序就沒有任何意義了.
2個(gè)間諜怎么破壞狀態(tài)一致性呢? 他們跟5位判斷進(jìn)攻的將軍說, 我們支持進(jìn)攻, 那么這5位將軍統(tǒng)計(jì)發(fā)現(xiàn)7位支持進(jìn)攻, 4位支持撤退, 將發(fā)動(dòng)進(jìn)攻. 又跟4位撤退的將軍說, 我們支持撤退, 一統(tǒng)計(jì), 5票進(jìn)攻, 6票撤退, 立馬撤退. 這場戰(zhàn)爭必輸無疑了.
避免這種狀態(tài)不同步的問題, 我稱之為"廣義拜占庭將軍問題".
參考鏈接:https://www.zhihu.com/question/23167269
總結(jié)
以上是生活随笔為你收集整理的如何理解拜占庭将军问题?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Twemproxy对redis集群进行代
- 下一篇: 限流算法——漏桶算法和令牌桶算法介绍