區(qū)塊鏈 共識簡介:沮喪的將軍們 (1)

在很久很久以前,有三個將軍在攻打一個叫拜占庭的城市。拜占庭的守軍很強,任何一個將軍單獨都攻打不下來,但如果他們的兩個聯(lián)手就可以取勝。這導致將軍們需要協(xié)同進攻的時間和地點。

他們分隔足夠遠,需要通信,而他們的通信方法,是依靠馬背上的傳令兵。但在戰(zhàn)場環(huán)境里面,這些傳令兵分分鐘被城上的火炮打死。將軍們很悲慘的,不知道他們的消息,無論是邀請同僚發(fā)動進攻,還是確認同僚的邀請,到底送到?jīng)]有。設(shè)想下,如果將軍甲發(fā)出了進攻的邀請,然后沒有收到確認,他自己一個人就去攻城,那是一個多么悲催的結(jié)果。

而且問題遠遠比想象的復(fù)雜,先簡化到兩個將軍間的聯(lián)系。甲送信給乙,乙收到確認,然后返回信件給甲?,F(xiàn)在的風險是,乙將軍的信使可能在途中被消失。那么乙的信件可能沒有送到。甲沒有收到回信,只好假設(shè)乙沒有確認,為了安全起見,甲決定不進攻。于是悲催的乙就一個人去攻打然后被打殘了。

那么我們增加一個環(huán)節(jié),甲收到回信后,再發(fā)送一封信給乙如何呢?這不能解決問題,因為這封回信也可能丟失,這么來回確認,只要是有限的N次,這種協(xié)同還是無法保障的。按說這就沒法玩兒了,但在具體的社會和工程實踐中,我們只好評估傳令兵被打死的概率,確認次數(shù)足夠多,就認為是達成了一致,雖然這有風險。計算機系統(tǒng)中常見的提交是 兩階段,或者三階段提交。也就是 建議-》準備-》提交模式。

這個方法,只能在三個將軍都是好人(honest)的條件下才能使用?,F(xiàn)在假設(shè)其中有個將軍叛變了。他給甲將軍的信是確認,但到點兒他卻不去了,這問題就麻煩了。這個問題怎么辦呢?答案是沒辦法!在點對點系統(tǒng)基礎(chǔ)上的分布式系統(tǒng),至少需要大于2/3的將軍們靠譜才能協(xié)同。也就是所謂3F+1,兩個人能搞定的事情,需要派四個人去才行。

現(xiàn)在停下來,想想為什么本來三條腿就夠的凳子,卻都是四條腿。因為對于四條腿的凳子來說,任何一條壞了,或者虛了,仍然不會倒。具有很好的容錯能力。

這種故意 的欺詐,以及其他的消息錯漏,假消息等等錯誤,稱為拜占庭錯誤。如何解決這個問題,且聽下回分解

附錄:技術(shù)部分

熟悉技術(shù)的人知道我在談?wù)摰氖前菡纪④妴栴},The Byzantine Generals Problem (leslie et. al 1982)。特別地,我談?wù)摰氖瞧洳豢赡苄缘牟糠帧8鼫蚀_的說法是1/3的背叛就足以搞黃整個團隊,三個人的話,一個人搗亂就夠了。

No solution will work unless more than two-thirds of the generals are loyal. In particular, with only three generals, no solution can work in the presence of a single traitor.

在比特幣這個系統(tǒng)里面,他們說51/100的節(jié)點honest就夠了,這是很大的一個區(qū)別。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容