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