曾經(jīng)的拜占庭國(guó)土遼闊,為了抵御來(lái)自各個(gè)方向的敵人,軍隊(duì)之間分隔很遠(yuǎn),他們之間只能通過信使互相傳遞消息。一場(chǎng)新的戰(zhàn)役即將爆發(fā),有5支拜占庭軍隊(duì)要共同進(jìn)退,5個(gè)將軍都是平級(jí)的,他們要怎么達(dá)成一起進(jìn)攻或者一起撤退的共識(shí)呢?
最簡(jiǎn)單的辦法就是投票,每個(gè)將軍都派出信使將自己的意見發(fā)給其他四個(gè)將軍。對(duì)每個(gè)將軍來(lái)說,算上自己的票數(shù),如果進(jìn)攻票超過2票就會(huì)發(fā)起進(jìn)攻,如果少于或者等于2票就撤退。這是最簡(jiǎn)單的情況,很合邏輯。那假如是下面的情況呢?
- 5個(gè)將軍中有一個(gè)是奸細(xì),其他4個(gè)將軍有兩個(gè)贊成進(jìn)攻,2個(gè)反對(duì),這個(gè)將軍給其中2個(gè)發(fā)去了進(jìn)攻的意見,給另外2個(gè)卻是撤退,結(jié)果是2支軍隊(duì)進(jìn)攻,2支軍隊(duì)撤退,沒有達(dá)成共識(shí)。
- 可能有一個(gè)或者多個(gè)信使被暗殺,或者被策反。
在這兩種情況下,投票的結(jié)果不能代表大多數(shù)將軍的意見。
以上,可以總結(jié)出拜占庭將軍問題:在可能有叛徒的情況下,其余忠誠(chéng)的將軍如何不受其影響達(dá)成一致的協(xié)議?
拜占庭帝國(guó)在還沒得出解決方案就亡國(guó)了,那現(xiàn)在說這個(gè)問題的意義在哪?
賣了個(gè)大官子,其實(shí)這個(gè)故事是對(duì)分布式系統(tǒng)要解決問題的模型化。
什么是分布式系統(tǒng)?
隨著對(duì)計(jì)算量和存儲(chǔ)量需求的不斷增加,制造一臺(tái)擁有超強(qiáng)計(jì)算能力和存儲(chǔ)空間的計(jì)算機(jī)成本高,而且總是會(huì)有瓶頸,分布式系統(tǒng)則是由一組普通廉價(jià)的計(jì)算機(jī)通過互相通信來(lái)一起完成計(jì)算和存儲(chǔ)等工作,當(dāng)需要更高的算量或者儲(chǔ)存時(shí),可以增加機(jī)器,需求少的情況可以減少機(jī)器,整體比單臺(tái)超級(jí)計(jì)算機(jī)更靈活也更實(shí)惠。
從 拜占庭將軍問題 到 分布式系統(tǒng)問題
將拜占庭將軍的故事映射到分布式系統(tǒng)上,每個(gè)將軍代表一臺(tái)計(jì)算機(jī),信使代表通信系統(tǒng),單臺(tái)計(jì)算機(jī)可能遭受惡意攻擊后向其他計(jì)算機(jī)發(fā)送錯(cuò)誤信息,通信網(wǎng)絡(luò)可能會(huì)阻塞、斷開,通信內(nèi)容可能被截取、替換,在這些情況下,正常運(yùn)行的計(jì)算機(jī)怎么達(dá)成一致執(zhí)行任務(wù)呢?
這是2013年圖靈獎(jiǎng)得主 Leslie Lamport 在 1980 年的論文 The Byzantine Generals Problem 中提出的分布式領(lǐng)域的容錯(cuò)問題,這是分布式領(lǐng)域最復(fù)雜、最嚴(yán)格的容錯(cuò)模型。
許多解決方案,共識(shí)算法相繼被提出。在日常工作中使用的分布式系統(tǒng)面對(duì)的問題不會(huì)那么復(fù)雜,更多的是計(jì)算機(jī)故障掛掉了,或者網(wǎng)絡(luò)通信問題而沒法傳遞信息,這種情況不考慮計(jì)算機(jī)之間互相發(fā)送惡意信息,極大簡(jiǎn)化了系統(tǒng)對(duì)容錯(cuò)的要求,最最主要的是達(dá)到一致性。
下一篇文章會(huì)介紹在這種簡(jiǎn)化要求的情況下的一種共識(shí)算法:Raft,再之后會(huì)講講其他的一些能夠解決復(fù)雜情況的共識(shí)算法。