通俗易懂理解PBFT拜占庭容错的回答
鏈接:https://www.zhihu.com/question/52254063/answer/322188918
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
拜占庭容錯是一種共識算法,即如何使遠距離通信的人們對一個提案達成一致意見。
與普通的共識算法(例如,majority wins,即超過一半人贊成即有效)不同的是,PBFT可以容忍投票的人中產生叛徒或者不響應。
舉個合適的例子,我是一個愚昧的國王,沒有自己的判斷力,我不知道應該對敵國進攻還是投降好。我有一些大臣,我希望聽從他們的意見做出決定,但是他們現在都離我很遠,我只能通過飛鴿傳書的方式告知他們目前的問題,得到他們的選擇。然而,可能出現大臣叛變,故意提出相反的觀點(錯誤的節點),也可能出現鴿子在傳輸過程中飛錯了,我沒有得到該大臣的選擇(網絡堵塞)。PBFT可以保證如果我有3f+1的大臣的話,即使其中有f個大臣叛變或者沒有響應,我依然可以得出共識的正確結果。
這里一個核心問題就是,為什么有f個節點未響應或出錯時,為了保證系統的正常,我需要總共有3f+1個節點進行投票。
同樣用國王的例子,假設除了我(國王)一共有n個大臣,我知道其中有f個大臣是叛徒或者未響應,所以我一定要能從n-f個大臣的回應中進行判斷(如果上述f個大臣都是未響應)。然而由于是飛鴿傳書(異步傳輸),所以當我陸續收到n-f個傳來的消息后,我并不知道之后是否還會有新的消息傳來。因為如果f個有問題的大臣都是未響應,那么我將不會收到新的消息,如果其中有大臣是叛徒,我之后還會收到消息,但作為國王的現在不知道是哪種情況,卻需要立刻作出進攻還是投降的判斷。
最壞的情況下,剩下的f個大臣都是好人,只是鴿子飛得慢我還沒收到消息,也就是說我收到消息的n-f的大臣中有f個大臣都是叛徒,即f個叛徒和n-2f個好人。由于多數者勝,所以只有當n-2f>f的情況下,作為國王的我會做出正確的決定,即n>3f,n最小需要取3f+1。
這也就是為什么PBFT能保證有3f+1節點投票時,允許f個節點未響應或者出現故障投相反票。
總結
以上是生活随笔為你收集整理的通俗易懂理解PBFT拜占庭容错的回答的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用python从0开始创建一个区块链,从
- 下一篇: 详解DPoS共识算法