理解分布式一致性:拜占庭容错与PBFT
理解分布式一致性:拜占庭容錯與PBFT
- 拜占庭問題
- 拜占庭容錯BFT
- PBFT(Practical Byzantine Fault Tolerance)
- why 3f+1 ?
- PBFT 的優(yōu)點
- PBFT 的缺點
之前的幾篇文章我們講了分布式協(xié)議里面的Paxos協(xié)議和Raft協(xié)議。這兩個協(xié)議主要適用于可信節(jié)點的情況,所謂可信節(jié)點就是節(jié)點只會出現(xiàn)因為系統(tǒng)或者網(wǎng)絡問題的宕機情況,不會有惡意節(jié)點。
那么如果有惡意節(jié)點的情況下,我們怎么去達成共識呢?一個很簡單的辦法就是少數(shù)服從多數(shù),下面我們看一下拜占庭是做的。
拜占庭問題
先看一下我們要解決的問題,也叫做拜占庭將軍問題。
話說有一天有n個拜占庭將軍相約于魔法師大峽谷中,他們的目標就是推掉對方的塔。塔有點強大,只有不少于m個將軍同時去推塔才能成功,如果一個一個的去推塔,就免不了身死道消的結(jié)果。那時候他們的微信版本還比較低,不能建群聊天,只能一對一的通信。
將軍之間并不是表面上看起來的一條心,假如一個將軍想組織大家在下午兩點鐘去偷塔,那需要怎么樣操作才能保證不少于m個將軍同時執(zhí)行”兩點鐘偷塔“這個命令呢?
這個問題就叫做拜占庭將軍問題,是指在不可信任環(huán)境下的分布式一致性問題。
這里我想強調(diào)一點,分布式一致性是指各個節(jié)點之間的數(shù)據(jù)同步一致,跟數(shù)據(jù)正確與否沒有關系。
拜占庭容錯BFT
拜占庭容錯是分布式協(xié)議的一種屬性,如果這種協(xié)議可以解決不可信任環(huán)境下的分布式一致性問題,那么它就是拜占庭容錯。
PBFT(Practical Byzantine Fault Tolerance)
PBFT是拜占庭容錯的一種實現(xiàn)。它的性能很高并且低延時,能夠解決不信任節(jié)點的問題。
其有如下幾個特征:
1. 同一時間只有一個Leader向外發(fā)送消息,其它節(jié)點只是被動接收消息。
2. 所有的節(jié)點互相之間通信,并且將其收到的消息轉(zhuǎn)發(fā)給其他節(jié)點,從而達成多數(shù)共識。
3. 節(jié)點之間的消息需要保證:A:節(jié)點收到的消息確實是某個節(jié)點轉(zhuǎn)發(fā)的。B:消息在發(fā)送過程中不會被篡改。
如果想讓PBFT正常工作,那么惡意節(jié)點個數(shù)不能大于總節(jié)點個數(shù)的1/3。
正常來講,節(jié)點個數(shù)越多,惡意節(jié)點所占有的比率就會越低,系統(tǒng)就會越穩(wěn)定,但是因為所有的節(jié)點之間需要兩兩通信,節(jié)點個數(shù)的增多會帶來節(jié)點之間通信的壓力。
下面看下PBFT的工作流程:
這里Leader是隨機選擇出來的,如果選出來的Leader在給定的時間內(nèi)并沒有發(fā)出廣播,那么系統(tǒng)會自動挑選新的Leader并進入下一輪。
why 3f+1 ?
很多同學可能不理解為什么對于f個惡意節(jié)點來說,至少要3f+1個節(jié)點才能正常工作。這里給大家解釋一下。
之前在Paxos和Raft協(xié)議里面,我們給大家講過在可信任節(jié)點的環(huán)境里面,達成共識的條件是收到的消息需要>n/2 ,即要收到大多數(shù)節(jié)點的反饋才能表示共識完成。
那么在有不可信節(jié)點f的情況下,我們的可信任節(jié)點個數(shù)是n-f個,我們收到的可信任節(jié)點個數(shù)的反饋必須>(n-f)/2才表示絕大多數(shù)可信任節(jié)點已經(jīng)收到消息了。同時我們也可能收到f個不信任節(jié)點發(fā)來的消息,那么當(n-f)/2 > f 的時候,根據(jù)多數(shù)原則,我們可以區(qū)分出哪些是信任消息,哪些是不可信任消息,因此得出 n> 3f .
PBFT 的優(yōu)點
PBFT 的缺點
說完優(yōu)點說缺點。其實前面我們也提到了,PBFT需要節(jié)點之間兩兩通信,當節(jié)點個數(shù)太多的話,節(jié)點之間通信的消耗會大大增加。所以PBFT只適合用在聯(lián)盟內(nèi)部少數(shù)節(jié)點的情況。像是Hyperledger這樣的聯(lián)盟鏈。
同時,PBFT也可能會受到女巫攻擊(Sybil attack),這個后面我們有時間再單獨講。
更多精彩內(nèi)容且看:
- 區(qū)塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續(xù)更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續(xù)更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續(xù)更新
- java程序員從小工到專家成神之路(2020版)-持續(xù)更新中,附詳細文章教程
更多教程請參考flydean的博客
總結(jié)
以上是生活随笔為你收集整理的理解分布式一致性:拜占庭容错与PBFT的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理解分布式一致性:Paxos协议之Gen
- 下一篇: 女巫攻击及其防范