拜占庭將軍問(wèn)題是什么問(wèn)題?
拜占庭將軍問(wèn)題(Byzantine failures)趾徽,是由萊斯利·蘭伯特提出的點(diǎn)對(duì)點(diǎn)通信中的基本問(wèn)題侧巨。含義是在存在消息丟失的不可靠信道上試圖通過(guò)消息傳遞的方式達(dá)到一致性是不可能的沃缘。因此對(duì)一致性的研究一般假設(shè)信道是可靠的躯枢,或不存在本問(wèn)題。
只有了解歷史槐臀,才能感知未來(lái)
拜占庭位于如今的土耳其的伊思彈布爾锄蹂,是東羅馬帝國(guó)的首都。由于當(dāng)時(shí)拜占庭羅馬帝國(guó)國(guó)土遼闊水慨,為了防御目的得糜,因此每個(gè)軍隊(duì)都分隔很遠(yuǎn),將軍與將軍之間只能靠信差傳消息晰洒。在戰(zhàn)爭(zhēng)的時(shí)候朝抖,拜占庭軍隊(duì)內(nèi)所有將軍和副官必需達(dá)成一致的共識(shí),決定是否有贏的機(jī)會(huì)才去攻打敵人的陣營(yíng)欢顷。但是,在軍隊(duì)內(nèi)有可能存有叛徒和敵軍的間諜捉蚤,左右將軍們的決定又?jǐn)_亂整體軍隊(duì)的秩序抬驴。在進(jìn)行共識(shí)時(shí),結(jié)果并不代表大多數(shù)人的意見(jiàn)缆巧。這時(shí)候布持,在已知有成員謀反的情況下,其余忠誠(chéng)的將軍在不受叛徒的影響下如何達(dá)成一致的協(xié)議陕悬,拜占庭問(wèn)題就此形成题暖。
拜占庭將軍問(wèn)題是一個(gè)協(xié)議問(wèn)題
拜占庭帝國(guó)軍隊(duì)的將軍們必須全體一致的決定是否攻擊某一支敵軍。問(wèn)題是這些將軍在地理上是分隔開來(lái)的,并且將軍中存在叛徒胧卤。叛徒可以任意行動(dòng)以達(dá)到以下目標(biāo):欺騙某些將軍采取進(jìn)攻行動(dòng)唯绍;促成一個(gè)不是所有將軍都同意的決定,如當(dāng)將軍們不希望進(jìn)攻時(shí)促成進(jìn)攻行動(dòng)枝誊;或者迷惑某些將軍况芒,使他們無(wú)法做出決定。如果叛徒達(dá)到了這些目的之一叶撒,則任何攻擊行動(dòng)的結(jié)果都是注定要失敗的绝骚,只有完全達(dá)成一致的努力才能獲得勝利。
拜占庭假設(shè)是對(duì)現(xiàn)實(shí)世界的模型化祠够,由于硬件錯(cuò)誤压汪、網(wǎng)絡(luò)擁堵或斷開以及遭到惡意攻擊,計(jì)算機(jī)和網(wǎng)絡(luò)可能出現(xiàn)不可預(yù)料的行為古瓤。拜占庭容錯(cuò)協(xié)議必須處理這些失效止剖,并且這些協(xié)議還要滿足所要解決的問(wèn)題要求的規(guī)范。這些算法通常以其彈性t作為特征湿滓,t表示算法可以應(yīng)付的錯(cuò)誤進(jìn)程數(shù)滴须。
很多經(jīng)典算法問(wèn)題只有在n ≥ 3f+1時(shí)才有解,如拜占庭將軍問(wèn)題叽奥,其中n是系統(tǒng)中進(jìn)程的總數(shù)扔水。
所謂拜占庭失效指一方向另一方發(fā)送消息,另一方?jīng)]有收到朝氓,或者收到了錯(cuò)誤的信息的情形魔市。
在容錯(cuò)的分布式計(jì)算中,拜占庭失效可以是分布式系統(tǒng)中算法執(zhí)行過(guò)程中的任意一個(gè)錯(cuò)誤赵哲。這些錯(cuò)誤被統(tǒng)稱為“崩潰失效”和“發(fā)送與遺漏式失效”待德。當(dāng)拜占庭失效發(fā)生時(shí),系統(tǒng)可能會(huì)做出任何不可預(yù)料的反應(yīng)枫夺。
這些任意的失效可以粗略地分成以下幾類:
進(jìn)行算法的另一步時(shí)失效将宪,即崩潰失效;
無(wú)法正確執(zhí)行算法的一個(gè)步驟橡庞;
執(zhí)行了任意一個(gè)非算法指定的步驟较坛;
各個(gè)步驟由各進(jìn)程執(zhí)行,算法就是由這些進(jìn)程執(zhí)行的扒最。一個(gè)錯(cuò)誤的進(jìn)程是在某個(gè)點(diǎn)出現(xiàn)了上述情況的進(jìn)程丑勤。沒(méi)有出現(xiàn)錯(cuò)誤的進(jìn)程是正確的進(jìn)程。
區(qū)塊鏈之PBFT共識(shí)算法
PBFT拜占庭容錯(cuò)算法:這是一種基于消息傳遞的一致性算法吧趣,算法經(jīng)過(guò)三個(gè)階段達(dá)成一致性法竞,這些階段可能因?yàn)槭《貜?fù)進(jìn)行耙厚。
預(yù)準(zhǔn)備(pre-prepare)、準(zhǔn)備(prepare)和確認(rèn)(commit)岔霸。流程如下圖所示:
其中C為發(fā)送請(qǐng)求端薛躬,0123為服務(wù)端,3為宕機(jī)的服務(wù)端秉剑,具體步驟如下:
1. Request:請(qǐng)求端C發(fā)送請(qǐng)求到任意一節(jié)點(diǎn)泛豪,這里是0
2. Pre-Prepare:服務(wù)端0收到C的請(qǐng)求后進(jìn)行廣播,擴(kuò)散至123
3. Prepare:123,收到后記錄并再次廣播侦鹏,1->023诡曙,2->013,3因?yàn)殄礄C(jī)無(wú)法廣播
4. Commit:0123節(jié)點(diǎn)在Prepare階段略水,若收到超過(guò)一定數(shù)量的相同請(qǐng)求价卤,則進(jìn)入Commit階段,廣播Commit請(qǐng)求
5.Reply:0123節(jié)點(diǎn)在Commit階段渊涝,若收到超過(guò)一定數(shù)量的相同請(qǐng)求慎璧,則對(duì)C進(jìn)行反饋
經(jīng)典算法參考:
在 N ≥ 3F + 1 的情況下一致性是可能解決,N為總計(jì)算機(jī)數(shù)跨释,F(xiàn)為有問(wèn)題的計(jì)算機(jī)總數(shù).
假設(shè)節(jié)點(diǎn)總數(shù)為3f+1胸私,f為拜贊庭錯(cuò)誤節(jié)點(diǎn):
1、當(dāng)節(jié)點(diǎn)發(fā)現(xiàn)leader作惡時(shí)鳖谈,通過(guò)算法選舉其他的replica為leader岁疼。
2、leader通過(guò)pre-prepare消息把它選擇的 value廣播給其他replica節(jié)點(diǎn)缆娃,其他的replica節(jié)點(diǎn)如果接受則發(fā)送 prepare捷绒,如果失敗則不發(fā)送。
3贯要、一旦2f個(gè)節(jié)點(diǎn)接受prepare消息暖侨,則節(jié)點(diǎn)發(fā)送commit消息。
4崇渗、當(dāng)2f+1個(gè)節(jié)點(diǎn)接受commit消息后字逗,代表該value值被確定
如下圖表示了4個(gè)節(jié)點(diǎn),0為leader宅广,同時(shí)節(jié)點(diǎn)3為fault節(jié)點(diǎn)葫掉,該節(jié)點(diǎn)不響應(yīng)和發(fā)出任何消息。最終節(jié)點(diǎn)狀態(tài)達(dá)到commited時(shí)乘碑,表示該輪共識(shí)成功達(dá)成挖息。
PBFT共識(shí)算法也一樣都脫離不了幣的存在金拒,系統(tǒng)的正常運(yùn)轉(zhuǎn)必須有幣的獎(jiǎng)勵(lì)機(jī)制兽肤,系統(tǒng)的安全性實(shí)際上是由系統(tǒng)幣的持有者維護(hù)保證套腹。當(dāng)我們區(qū)塊鏈系統(tǒng)實(shí)際運(yùn)用到商業(yè)應(yīng)用時(shí),由其承載的資產(chǎn)價(jià)值可能遠(yuǎn)遠(yuǎn)超出系統(tǒng)發(fā)行的幣的價(jià)值资铡,如果由幣的持有者保證系統(tǒng)的安全及穩(wěn)定性將是不可靠的电禀。
1)系統(tǒng)運(yùn)轉(zhuǎn)可以脫離幣的存在,pbft算法共識(shí)各節(jié)點(diǎn)由業(yè)務(wù)的參與方或者監(jiān)管方組成笤休,安全性與穩(wěn)定性由業(yè)務(wù)相關(guān)方保證尖飞。
2)共識(shí)的時(shí)延大約在2~5秒鐘,基本達(dá)到商用實(shí)時(shí)處理的要求店雅。
3)共識(shí)效率高政基,可滿足高頻交易量的需求。
目前使用該技術(shù)的區(qū)塊鏈項(xiàng)目:zilliqa, 據(jù)說(shuō)是EOS的強(qiáng)勁死敵闹啦。
2018.1.27?
lola
心痛小姐姐的辛苦匯總的幣豪們沮明,小姐姐接受eos,eth,btc以及各種幣幣打賞
謝謝比豪和未來(lái)的幣豪們: