日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

理解分布式一致性:拜占庭容错与PBFT

發(fā)布時間:2024/2/28 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解分布式一致性:拜占庭容错与PBFT 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

理解分布式一致性:拜占庭容錯與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的工作流程:

  • 客戶端發(fā)給服務器說我要執(zhí)行命令A。
  • Leader將該命令分發(fā)給所有被動節(jié)點。
  • 客戶端收到f+1(f 是系統(tǒng)能夠承受的最大惡意節(jié)點個數(shù),即系統(tǒng)總節(jié)點個數(shù)為3f+1)個相同的結(jié)果,那么客戶端即認為共識完成。
  • 這里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)點

  • 一致性結(jié)果一旦產(chǎn)出,不會更改。在區(qū)塊鏈世界,像是比特幣,以太坊,經(jīng)常會聽到區(qū)塊確認的概念,這個就是結(jié)果不確定的問題,他們用的POW算法是以鏈的長度來決定最終的區(qū)塊,當有更長的鏈產(chǎn)生的時候,之前的交易會被完全推翻。而PBFT不會存在這個問題。
  • 相對于POW,PBFT對能源的消耗會少很多很多,再也不用浪費資源去挖坑了。
  • 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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。