請教技術大牛,pbft是不是區塊鏈目前最優的共識機制?
央行推出的區塊鏈數字票據交易平台用的就是優化後的pbft演算法。
一言以蔽之,共識最好的設計是模塊化,例如Notary,共識演算法的選擇與應用場景高度相關,可信環境使用paxos 或者raft,帶許可的聯盟可使用bft ,非許可鏈可以是pow,pos,ripple共識等,根據對手方信任度分級,自由選擇共識機制,這樣才是真的最優
consensus的效率至少有兩方面,一是確認時間,一是scalability--網路節點數乃至dynamics。PBFT在permissioned setting確認時間不錯,然而他的communication至少是節點平方,obviously很難支持大規模網路節點,即使是在permissioned setting。據同事試驗,hyperledger上一百個節點目前就要完卵。。。
在區塊鏈中,相較於傳統的pow等,pbft這種通過投票來達成共識的機制可以很好的解決包括分叉等問題的同時提升效率。但這僅僅比較適合於聯盟鏈私有鏈,因為pbft的機制要求是一個封閉的集群,兩兩節點需要進行通信,通信量是O(n^2)(通過優化可以減少通信量),在公有鏈這種全球性的大環境下,既不符合封閉性的原則,同樣無法達成這種巨大的通信量。現階段我觀察大部分創業公司採用的也基本上是聯盟鏈私有鏈,節點數量並不是很多,採用pbft效率更高結果也更好。
但針對BFT協議來說,16年CCS有一篇文章實現了非同步的BFT,針對的場景也是屬於permissioned,文章題目如下,有興趣的可以看看。
Miller A, Xia Y, Croman K, et al. The honey badger of BFT protocols. ACM CCS 2016.
BFT共識這個大類和比特幣共識目前為止很難說誰好誰壞,因為兩個東西沒法放在同樣的模型里對比。
比特幣共識需要大型網路,而BFT演算法不能應用於超過100個節點,具體請見我的這個回答:
區塊鏈是什麼,如何簡單易懂地介紹區塊鏈? - 知乎接著,比特幣共識不需要許可,而BFT演算法需要許可(至少需要知道節點的數量和他們對應的公鑰),但是這東西幾乎在各自對應的應用中,幾乎不構成障礙。
所以說,BFT共識和比特幣共識目前沒有交集,放在區塊鏈的語境下的話,公有鏈用比特幣共識更好,私有鏈(聯盟鏈)用BFT演算法更好。
接著,至於pbft是不是最好的BFT演算法,或者說,是不是目前BFT演算法里最適合區塊鏈的。我可以負責任的說,不是,對於區塊鏈,有很多更好的演算法。
然並卵。
因為PBFT已經很好了,而且在實際應用中非常成熟,效果也非常好。所以說,並不是PBFT就一定最好,但是PBFT在目前聯盟鏈的場景中非常夠用,而且換了其他的共識演算法,效率也提高不到哪去。
所以說,目前來看,公有鏈目前能夠確保安全可靠的,只有POW工作證明。
私有鏈和聯盟鏈,PBFT不是最好的,但肯定是不差的選擇(除非環境特殊,PBFT在網路不穩定的情況下延遲很高,而且如果網路穩定或者有其他的條件,有一些演算法效率更高)。
至於對於區塊鏈,BFT演算法可擴展性(scalability)差,比特幣共識(包括POW,POS權益證明或者別的什麼PO…)效率低,都不夠好。
之所以目前區塊鏈會分成兩種,會有公有鏈私有鏈之爭,歸根結底,就是因為目前的所有共識演算法,都不夠好。
講是否最優,還是得看具體的應用場景.如果要求強一致性,PoW是打死也不能上的.按照已有的幾種共識演算法來說,對於一個要求高可用並且一致性要求不高(公有鏈)顯然PoW是比較適合的.對於聯盟鏈這種帶許可機制,但是尚存在BFT節點的,那麼PBFT演算法是比較適合的.如果是完全可信的,類似大哥帶小弟的聯盟鏈,那麼直接上Paxos或者Raft就可以了.
雖然央行選擇了pbft演算法,但我們還是要給其他演算法機會嘛,我簡單介紹下區塊鏈常見的幾種演算法,大家可以自己得出結論。
1、Pow工作量證明,就是大家熟悉的挖礦,通過與或運算,計算出一個滿足規則的隨機數,即獲得本次記賬權,發出本輪需要記錄的數據,全網其它節點驗證後一起存儲;
優點:完全去中心化,節點自由進出;
缺點:目前bitcoin已經吸引全球大部分的算力,其它再用Pow共識機制的區塊鏈應用很難獲得相同的算力來保障自身的安全;挖礦造成大量的資源浪費;共識達成的周期較長,不適合商業應用
應用案例:比特幣
1、Pos權益證明,Pow的一種升級共識機制;根據每個節點所佔代幣的比例和時間;等比例的降低挖礦難度,從而加快找隨機數的速度。
優點:在一定程度上縮短了共識達成的時間
缺點:還是需要挖礦,本質上沒有解決商業應用的痛點
應用案例:未來幣,以太坊採用了Pow+POS的混合機制。
3、DPos股份授權證明機制,類似於董事會投票,持幣者投出一定數量的節點,代理他們進行驗證和記賬。
優點:大幅縮小參與驗證和記賬節點的數量,可以達到秒級的共識驗證
缺點:整個共識機制還是依賴於代幣,很多商業應用是不需要代幣存在的
應用案例:比特股
以上三種演算法大家都比較熟悉,我就簡單說一下,下面就是題主的問題了。
4、pbft拜占庭容錯演算法,這是一種基於消息傳遞的一致性演算法,演算法經過三個階段達成一致性,這些階段可能因為失敗而重複進行。
假設節點總數為3f+1,f為拜贊庭錯誤節點:
1、當節點發現leader作惡時,通過演算法選舉其他的replica為leader。
2、leader通過pre-prepare 消息把它選擇的 value廣播給其他replica節點,其他的replica節點如果接受則發送 prepare,如果失敗則不發送。
3、一旦2f個節點接受prepare消息,則節點發送commit消息。
4、當2f+1個節點接受commit消息後,代表該value值被確定
如下圖表示了4個節點,0為leader,同時節點3為fault節點,該節點不響應和發出任何消息。最終節點狀態達到commited時,表示該輪共識成功達成。
優點:上述共識演算法都脫離不了幣的存在,系統的正常運轉必須有幣的獎勵機制,系統的安全性實際上是由系統幣的持有者維護保證。當我們區塊鏈系統實際運用到商業應用時,由其承載的資產價值可能遠遠超出系統發行的幣的價值,如果由幣的持有者保證系統的安全及穩定性將是不可靠的 。
1)系統運轉可以脫離幣的存在,pbft演算法共識各節點由業務的參與方或者監管方組成,安全性與穩定性由業務相關方保證。
2)共識的時延大約在2~5秒鐘,基本達到商用實時處理的要求。
3)共識效率高,可滿足高頻交易量的需求。
應用:央行的數字貨幣、布萌區塊鏈。
pbft雖然性能很好,能在失效節點數量不超過(n-1)/3的情況下同時保證安全性和活性,但拜占庭容錯演算法不能動態加入,不適合共有鏈需求。使用它的鏈,比如央行的電子票據系統、布萌區塊鏈、fabric都是聯盟鏈,節點都是確定的。
PBFT由於其封閉性(節點數目提前確定並互相聯通)和高性能開銷(O(N^2)的消息量),已經複雜的view change演算法和開銷,跑超過100個節點都夠嗆,使用在目前的公有鏈上基本不太可能。聯盟鏈會是一個不錯的場景。但是如果只是為了吞吐量並且聯盟中大家都有證書,保證彼此的真實性和正確性,為什麼還要用區塊鏈呢?分散式資料庫豈不是更好?很多時候,不能為了使用區塊鏈而用,要看特定的場景。
目前的Bitcoin和Ethereum都遇到了很嚴重的吞吐量小的問題,例如幾個交易每秒。這樣使得不說未來,就只是支持目前大量的ICO應用都夠嗆,更不要說Web 3.0。所以開發出高吞吐量的公有區塊鏈迫在眉睫。PBFT與已有的POW或者POS的結合可能是一種方式。POW已經有論文證明其相對正確性和安全性。市面上雖然有五花八門的POS,例如Ethereum的Casper,但是有理論證明安全性的POS還沒見到。
不懂就不要亂答PBFT才是傳統的共識演算法,這類共識演算法只能應用於聯盟鏈(需要准入機制),上世紀研究分散式系統的很多在研究這個。而PoW則解決了公有鏈下的共識問題,這才是它最有突破性的地方。
來個神預測,以後聯盟鏈肯定要變成raft ,pbft太慢了。
這個問題類似,JAVA是不是目前最優的編程語言。
共識機制的制定是權衡去中心化,節省能源,優化速度,安全性等多方利益的結果。
所以特定的應用場景才存在相對最優的共識機制。
如果你關注區塊鏈在金融行業的落地應用,關注公眾號:tangdaijinfu
怎麼可能,區塊鏈不適合銀行。之所以選擇pbft也不過是因為它適合銀行的業務模式,不代表它是最優的。
不是。
One PoW to rule them all.
上面有答主@逆望高提到,pbft適用於聯盟鏈,但個人不認可。如果突破算力限制(這是未來必然發生的事),我認為pbft更適用於公有鏈。
從區塊鏈類型來講,公有鏈以大量用戶作為節點、聯盟鏈以少量機構作為節點,而拜占庭容錯演算法的基礎是「大量節點」。如果節點過少,會輕易突破51%,導致作弊。而「大量節點+算力」的優勢,正是為未來的公有鏈量身打造推薦閱讀:
※怎麼看"央行開展1625億MLF操作"?
※什麼是利率長廊,如何評價利率長廊?
※周小川強調金融改革要補課,推進政策性銀行改革的目的是什麼?
※在人民銀行任職,每當親朋好友問我你們行為什麼沒有貸款時,該怎麼回答?
※2013年日本政府及中央銀行採取了哪些手段來促進日本復甦的?
TAG:技術 | 中央銀行 | 密碼學 | 區塊鏈Blockchain |