區(qū)塊鏈中的拜占庭將軍問題解析
今天我們要講的內(nèi)容是:“什么是拜占庭將軍問題”?
我們在之前講過,分布式賬本可以說是區(qū)塊鏈的框架,每一個人都可以自由地參與進(jìn)來,共同處理區(qū)塊鏈中的數(shù)據(jù),基于這一點,區(qū)塊鏈實際上就是一個大的分布式計算網(wǎng)絡(luò)。
它并沒有一個類似中央指揮室的東西來發(fā)號施令,整個網(wǎng)絡(luò)是完全分散的,要依靠不同的節(jié)點間,彼此交換信息、達(dá)成共識,才能統(tǒng)一行動,整個過程就像無領(lǐng)導(dǎo)小組討論一樣。
對此,有人就提出了疑問,萬一有節(jié)點發(fā)送了錯誤的信息,干擾網(wǎng)絡(luò)正常運行或者大家產(chǎn)生了分歧怎么辦?于是,學(xué)者們便建立了一個模型,統(tǒng)一將這類用來描述分布式系統(tǒng)一致性的問題,稱為拜占庭將軍問題。
所謂拜占庭將軍問題是這樣的:
拜占庭帝國想要攻打一個國家,它派出了多支軍隊進(jìn)行圍攻,但敵國軍事實力也很強(qiáng),將軍們必須在同一個時間,一起發(fā)動進(jìn)攻才能獲取勝利。
現(xiàn)在的問題在于,每個將軍都分散在敵國四周,只能依靠通信兵騎馬相互通信,確定進(jìn)攻的時間,可是一方面通訊兵可能會在送信過程中被敵方擊殺,另一方面根據(jù)不可靠消息,在這些將軍中有叛徒的存在,叛徒可能會擅自變更進(jìn)攻意向或者進(jìn)攻時間,從而向其他將軍傳達(dá)虛假指令,影響他人判斷。
如果整個分布式網(wǎng)絡(luò)相當(dāng)于拜占庭帝國,而每個節(jié)點相當(dāng)于里面的將軍,那么在這種狀態(tài)下,該怎么做才能保證網(wǎng)絡(luò)中的全部節(jié)點對于某個事情達(dá)成一致?(即將軍們在同一時間一起發(fā)起進(jìn)攻,從而贏取戰(zhàn)斗)這就是拜占庭將軍問題。
所以簡單來說,拜占庭將軍描述的是,分布式網(wǎng)絡(luò)會面臨的兩個問題:
1)如何解決各個節(jié)點之間的同步問題。比如在沒有叛徒情況下,將軍 A 向其他將軍傳遞進(jìn)攻方案時(如:明日下午 2 點進(jìn)攻),可能將軍B也在傳遞進(jìn)攻方案(如:明日下午 3點進(jìn)攻)。
2)如何解決惡意節(jié)點,故意發(fā)送錯誤信息干擾網(wǎng)絡(luò)的運行的問題。比如在有叛徒情況下,叛徒會向不同的將軍發(fā)出不同的進(jìn)攻提議,干擾其他將軍們達(dá)成一致。
后來大家發(fā)現(xiàn),想要在分布式網(wǎng)絡(luò)中,讓每一個節(jié)點都不出錯是不可能的,于是就有人提出了“拜占庭容錯”的觀點來解決拜占庭將軍的問題,這個解決辦法就是信息的偽造或錯誤并不重要,只要誠實的將軍數(shù)量大于總數(shù)的三分之二,即使有少部分不誠實的將軍存在,整個系統(tǒng)也可以達(dá)成一致。
于是大家以此為基礎(chǔ),設(shè)計出了很多解決方案。
區(qū)塊鏈四大核心技術(shù)中的共識機(jī)制,就是為了解決這個問題,而誕生的一個方案。