PBFT拜占庭容錯(cuò)算法
PBFT是一種基于消息傳遞的一致性算法叶圃,算法經(jīng)過三個(gè)階段達(dá)成一致性凉倚,這些階段可能因?yàn)槭《貜?fù)進(jìn)行爽待。
假設(shè)節(jié)點(diǎn)總數(shù)為N,f為拜贊庭錯(cuò)誤節(jié)點(diǎn),N滿足:N=3f+1藤违。
- 當(dāng)節(jié)點(diǎn)發(fā)現(xiàn)leader作惡時(shí)粥脚,通過算法選舉其他的replica為leader谍咆。
- leader通過pre-prepare 消息把它選擇的 value廣播給其他replica節(jié)點(diǎn)禾锤,其他的replica節(jié)點(diǎn)如果接受則發(fā)送 prepare,如果失敗則不發(fā)送摹察。
- 一旦2f個(gè)節(jié)點(diǎn)接受prepare消息恩掷,則節(jié)點(diǎn)發(fā)送commit消息。
- 當(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á)成誓焦。
這里主要說明一下為什么需要3F+1個(gè)節(jié)點(diǎn)來保證算法的安全性,這里有N個(gè)節(jié)點(diǎn)着帽,假設(shè)有F個(gè)拜占庭節(jié)點(diǎn)杂伟,則消息需要從N-F個(gè)節(jié)點(diǎn)中判斷竿秆,如果由于網(wǎng)絡(luò)延遲等原因,誠實(shí)節(jié)點(diǎn)的消息還未到達(dá)稿壁,極端情況下N-F中有F個(gè)拜占庭節(jié)點(diǎn),如果要保證消息的正確性,至少需要誠實(shí)消息大于F則有N-2F>F歉备,則至少需要保證N=3F+1傅是。