分散式系統的基本概念
FLP不可能原理和CAP原理
FLP 不可能原理(FLP impossibility):在網路可靠,存在節點失效(即便只有一個)的最小化非同步模型系統中,不存在一個可以解決一致性問題的確定性演算法。1985年 FLP 原理實際上說明對於允許節點失效情況下,純粹非同步系統無法確保一致性在有限時間內完成。 科學告訴你什麼是不可能的;工程則告訴你,付出一些代價,我可以把它變成可能。
CAP 原理最早由 Eric Brewer 在 2000 年,ACM 組織的一個研討會上提出猜想,後來 Lynch 等人進行了證明。
分散式計算系統不可能同時確保一致性(Consistency)、可用性(Availability)和分割槽容忍性(Partition),設計中往往需要弱化對某個特性的保證。
- 一致性(Consistency):任何操作應該都是原子的,發生在後面的事件能看到前面事件發生導致的結果,注意這裡指的是強一致性;
- 可用性(Availability):在有限時間內,任何非失敗節點都能應答請求;
- 分割槽容忍性(Partition):網路可能發生分割槽,即節點之間的通訊不可保障。
弱化一致性
對結果一致性不敏感的應用,可以允許在新版本上線後過一段時間才更新成功,期間不保證一致性。
例如網站靜態頁面內容、實時性較弱的查詢類資料庫等,CouchDB、Cassandra 等為此設計。
弱化可用性
對結果一致性很敏感的應用,例如銀行取款機,當系統故障時候會拒絕服務。MongoDB、Redis 等為此設計。
Paxos、Raft 等演算法,主要處理這種情況。
弱化分割槽容忍性
現實中,網路分割槽出現概率減小,但較難避免。某些關係型資料庫、ZooKeeper 即為此設計。
實踐中,網路通過雙通道等機制增強可靠性,達到高穩定的網路通訊。
什麼是共識Consensus?
當多個主機通過非同步通訊方式組成網路叢集時,這種非同步網路預設是不可靠的,那麼在這些不可靠主機之間複製狀態需要採取一種機制,以保證每個主機的狀態最終達成相同一致性狀態,取得共識。
為什麼認為非同步網路預設是不可靠的?這是根據FLP原理。Impossibility of Distributed Consensus with One Faulty Process一文提出:在一個非同步系統中我們不可能確切知道任何一臺主機是否當機了,因為我們無法分清楚主機或網路的效能減慢與主機當機的區別,也就是說我們無法可靠地偵測到失敗錯誤。但是,我們還必須確保安全可靠。
達成共識越分散的過程,其效率就越低,但滿意度越高,因此也越穩定;相反,達成共識越集中的過程,效率越高,也越容易出現獨裁和腐敗現象。
達成共識常用的一種方法就是通過物質上的激勵以對某個事件達成共識;但是這種共識存在的問題就是容易被外界其它更大的物質激勵所破壞。
還有一種就是群體中的個體按照符合自身利益或整個群體利益的方向來對某個事件自發地達成共識;當然形成這種自發式的以維護群體利益為核心的共識過程還是需要時間和環境因素的,但是一旦達成這樣的共識趨勢,其共識結果也越穩定,越不容易被破壞。
CFT & BFT
Paxos & Raft
Paxos 問題是指分散式的系統中存在故障,但不存在惡意節點場景(即可能訊息丟失或重複,但無錯誤訊息)下的共識達成問題。因為最早是1990年 Leslie Lamport 用 Paxon 島的故事模型來進行描述而命名。
Paxos過於晦澀難懂,和難以實現,之後有出現了各種改進演算法:Egalitarian Paxos、Hydra、Fast Paxos、Ios、VRR(Viewstamped Replication Revisited)、 Multi-Paxos、Raft等
Raft 演算法是Paxos 演算法的一種簡化實現,2013年才問世。
Paxos是一種無領導人Leaderless演算法,而Raft演算法是一種強領導力Leadership的演算法。
拜占庭將軍問題&兩軍問題
拜占庭將軍問題是一個共識問題: 首先由Leslie Lamport與另外兩人在1982年提出,被稱為The Byzantine Generals Problem或者Byzantine Failure。核心描述是軍中可能有叛徒,卻要保證進攻一致,由此引申到計算領域,發展成了一種容錯理論。
Lamport的論文中講了這樣一個故事:
拜占庭帝國想要進攻一個強大的敵人,為此派出了10支軍隊去包圍這個敵人。這個敵人雖不比拜占庭帝國,但也足以抵禦5支常規拜占庭軍隊的同時襲擊。基於一些原因,這10支軍隊不能集合在一起單點突破,必須在分開的包圍狀態下同時攻擊。他們任一支軍隊單獨進攻都毫無勝算,除非有至少6支軍隊同時襲擊才能攻下敵國。他們分散在敵國的四周,依靠通訊兵相互通訊來協商進攻意向及進攻時間。困擾這些將軍的問題是,他們不確定他們中是否有叛徒,叛徒可能擅自變更進攻意向或者進攻時間。在這種狀態下,拜占庭將軍們能否找到一種分散式的協議來讓他們能夠遠端協商,從而贏取戰鬥?這就是著名的拜占庭將軍問題。
而容易與拜占庭將軍問題混為一談的是兩軍問題。兩軍問題描述了這樣一個故事:
白軍駐紮在溝渠裡,藍軍則分散在溝渠兩邊。白軍比任何一支藍軍都更為強大,但是藍軍若能同時合力進攻則能夠打敗白軍。他們不能夠遠端的溝通,只能派遣通訊兵穿過溝渠去通知對方藍軍協商進攻時間。是否存在一個能使藍軍必勝的通訊協議,這就是兩軍問題。
看到這裡您可能發現兩軍問題和拜占庭將軍問題有一定的相似性,但我們必須注意的是,通訊兵得經過敵人的溝渠,在這過程中他可能被捕,也就是說,兩軍問題中通道是不可靠的,並且其中沒有叛徒之說,這就是兩軍問題和拜占庭將軍問題的根本性不同。由此可見,大量混淆了拜占庭將軍問題和兩軍問題的文章並沒有充分理解兩者。
針對拜占庭將軍問題,目前業界比較常用的是PBFT演算法。
PBFT是Practical Byzantine Fault Tolerance的縮寫,意為實用拜占庭容錯演算法。該演算法是Miguel Castro (卡斯特羅)和Barbara Liskov(利斯科夫)在1999年提出來的,解決了原始拜占庭容錯演算法效率不高的問題,將演算法複雜度由指數級降低到多項式級,使得拜占庭容錯演算法在實際系統應用中變得可行。
這個演算法在保證活性和安全性的前提下提供了(n-1)/3的容錯性,也就是節點數需要達到3f+1個節點才能容錯f個節點。
以4個節點組成的分散式網路為例,PBFT演算法的節點間網路通訊如圖所示:
從上圖我們可以看出,PBFT演算法下,網路通訊的複雜度達到了O(n²),這也就意味著,PBFT網路節點不能太多,如果節點太多將會造成網路風暴,使得整個網路堵塞。
我們平時說的CFT就是Crash Fault Tolerant的簡寫,是無惡意節點的情況下的容錯,常用的共識演算法有: Paxos、Raft
而BFT就是Byzantine Fault Tolerant的簡寫,是有惡意節點的情況下的容錯,常用的共識演算法有:PBFT、POW
POW工作證明
Proof of Work,工作證明相關理念最早於1993年被Cynthia Dwork和Moni Naor提出,之後的幾年,該概念在是否能有效對抗拒絕服務攻擊的爭論中不斷被人們所知。PoW機制的核心在於強迫攻擊者作出一定量的工作才能進行接下來的互動操作,這樣無形中就給攻擊者提高了攻擊的成本。自然而然的,攻擊者需要完成的工作可以按消耗的計算機資源種類分為以下三大類:
- 消耗CPU資源。例如,反垃圾郵件的Hashcash方案以及受此啟發而誕生的比特幣;
- 消耗記憶體資源。例如,為了防止與比特幣採用相同的共識機制所可能導致的51%攻擊,以太坊目前就使用了一種需要佔用大量記憶體資源的PoW演算法;
- 消耗網路資源。攻擊者在進行拒絕服務攻擊之前,必須要獲取多個遠端伺服器傳送的命令。
POW作為數字貨幣的共識機制於 1998 年在 B-money 設計中提出。2008年中本聰發表比特幣白皮書,比特幣採用POW共識,通過計算來猜測一個數值(nonce),得以解決規定的 Hash 問題(兩次SHA256)。保證在一段時間內,系統中只能出現少數合法提案。 同時,這些少量的合法提案會在網路中進行廣播,收到的使用者進行驗證後會基於它認為的最長鏈上繼續難題的計算。因此,系統中可能出現鏈的分叉(Fork),但最終會有一條鏈成為最長的鏈。
Hash 問題具有不可逆的特點,因此,目前除了暴力計算外,還沒有有效的演算法進行解決。反之,如果獲得符合要求的 nonce,則說明在概率上是付出了對應的算力。誰的算力多,誰最先解決問題的概率就越大。 當掌握超過全網一半算力時,從概率上就能控制網路中鏈的走向。這也是所謂 51% 攻擊的由來。
比特幣POW演算法的ASIC化問題
由於比特幣採用的是比較簡單的SHA256雜湊演算法作為POW共識演算法,這個演算法只消耗CPU資源,對記憶體要求不高,所以可以很容易被製造出ASIC晶片。這是比特幣挖礦晶片的更新換代圖:
而現在,比特幣的挖礦都變成了這樣子:大量ASIC礦機組成的礦場。
這樣算力就越來越集中到了大礦主手裡,普通使用者使用電腦根本不可能挖到礦,這與中本聰當年設想的人人都能公平記賬的願景相違背。為此,人們設計了各種反ASIC化的方案。主要思想就是將POW演算法改的很複雜,需要大量的記憶體,這樣ASIC晶片是不可能整合大量記憶體進去的,從而無法制造出專門的挖礦晶片。比較有程式碼的改進方案有:
- 萊特幣:剛性記憶體雜湊函式Scrypt取代SHA256
- 達世幣:X11,11種雜湊函式混合使用
- 以太坊:Ethash,大記憶體DAG搜尋
但是實際上,只要利益足夠大,人們總能夠設計出專門POW挖礦的礦機,萊特幣礦機和達世幣礦機先後被製造了出來,以太坊之前也頂多是使用顯示卡挖礦,最近位元大陸也研發出了專門進行以太坊挖礦的專業礦機“螞蟻礦機E3。具體可以參考這個新聞:http://t.cj.sina.com.cn/articles/view/1181714847/466f899f001007d4h
比特幣POW演算法的資源浪費問題
中本聰為了解決拜占庭共識問題,在比特幣系統中引入競爭挖礦的機制。同時,為了保證最大可能的公平性,採用了基於雜湊運算的PoW共識機制。礦工如果想要得到一個合法的區塊,則必須向區塊頭中填入不同的隨機值,然後計算出區塊頭的雜湊值,使得得到的雜湊值小於目標值。這樣,礦工在不斷尋找合適隨機值的過程中完成了一定的工作量。可以發現,礦工完成的這個工作量對於現實社會毫無意義。唯一的意義就是保障了比特幣的安全性。
這是最新的比特幣歷史算力曲線,現在的算力已經相當驚人,這樣就意味著,後面後200多萬臺專業的比特幣礦機在執行!!!
有人做了個估算,其耗電量比伊朗整個國家的耗電量還大。
比特幣的POW演算法是沒有任何實際意義的SHA256運算,那麼有沒有可能在挖礦的同時,把這些算力算出一些副產物?以下是幾個比較有名的進行有效工作量證明的區塊鏈:
- 質數幣:Primecoin(質數幣)釋出於2013年7月。其最大的特點是將虛擬貨幣中浪費的演算法資源利用起來。它的PoW可以搜尋質數,從而計算孿生素數表。所以有一定的科學價值。
- 治療幣:Curecoin(治療幣)釋出於2013年5月。治療幣最大的特點是將蛋白質褶皺結構的研究SHA256工作量證明演算法進行了結合。因為蛋白質褶皺研究需要對蛋白質進行生化反應的模擬過程需要大量的計算資源,所以在“挖礦”的同時,還用於發現治癒疾病的新藥,一舉兩得。
- 比原鏈:比原鏈重新設計一種不同於比特幣的雜湊運算PoW共識機制,引入了矩陣運算與卷積運算,這樣就能讓人工智慧運算充分利用比原鏈的挖礦裝置。在這個過程中,人工智慧加入了新的硬體,其演算法執行速度得到明顯提高。同時,這樣也能減少一定的資源浪費。在這種情況下,礦機市場巨大的經濟利益能夠極大地加速人工智慧ASIC晶片的發展,加快人工智慧的研究。反過來,人工智慧的快速發展也產生了更多的ASIC礦機需求。因此,這是一種正向反饋良性發展的過程。
POS權益證明
POW演算法畢竟是要靠大量資源的消耗來保證共識的達成,有沒有完全不需要靠計算機資源堆砌來保證的共識機制呢?在2011年,一個名為Quantum Mechanic的數字貨幣愛好者在Bitcointalk論壇提出Proof-of-Stake(POS)證明機制,該機制被充分討論之後證明具有可行性。如果說POW主要比拼算力,算力越大,挖到一個塊的概率越大,POS則是比拼餘額,通俗說就是自己的手裡的幣越多,挖到一個塊的概率越大。
POS共識演算法存在一個漏洞,就是鼎鼎大名的Nothing-at-Stake攻擊(常寫作N@S)。
假設系統中出現了兩個分支鏈,那麼對於持有幣的”挖礦者“來講,最佳的操作策略就是同時在兩個分支上進行“挖礦”,這樣,無論哪個分支勝出,對幣種持有者來講,都會獲得本屬於他的利益,即不會有利益損失。而且由於不需要算力消耗,因此PoS中在兩個分支上挖礦是可行的。這導致的問題是,只要系統存在分叉,“礦工們”都會同時在這幾個分支上挖礦;因此在某個情況下,發起攻擊的分叉鏈是極有可能成功的,因為所有人也都在這個分叉鏈上達成了共識;而且甚至不用持有51%的幣量,就可以成功發起分叉攻擊。而這在PoW中是不可行的,因為挖礦需要消耗算力,礦工只能在一個分支上進行挖礦。所以在實際POS演算法中,還需要加入一些懲罰機制,如果礦工被發現兩個分支同時挖礦,就會進行懲罰。
第一個POS虛擬貨幣——點點幣
Peercoin(點點幣,PPC)於2012年8月釋出,最大創新是其採礦方式混合了POW工作量證明及POS權益證明方式,其中POW主要用於發行貨幣,未來預計隨著挖礦難度上升,產量降低,系統安全主要由POS維護。目前區塊鏈中存在兩種型別的區塊,POW區塊和POS區塊。PPC的作者為同樣不願意公開身份的密碼貨幣極客Sunny King,同時也是Primecoin的發明者。
第一個純POS虛擬貨幣——未來幣
2013年9月,一個名為BCNext的使用者在Bitcointalk論壇發起一個帖子,宣佈將發行一種全新的純POS幣種,後來取名為Nextcoin,簡稱NXT。Nxt是且是第一個100%的股權證明(PoS)機制的電子貨幣,Nxt不再通過消耗大量的資源“挖礦”產生新貨幣,而是通過現有賬戶的餘額去“鍛造”區塊,並給與成功“鍛造”區塊的賬戶交易費用獎勵。NXT的POS實現方式與PPC完全不同,合格區塊判定方法為:
hit < baseTarget * effectiveBalance * elapseTime
hit是根據最新區塊和使用者的私鑰生成的值,使用者在挖一個區塊時只需要計算一次即可。而右邊的值跟賬戶餘額成正比,跟流逝的時間成正比。也就意味著,使用者賬戶餘額越多,挖到礦的機率越高,隨著時間的流逝越久,越容易找到新的區塊。NXT區塊的生成完全摒棄了競爭的理念,有點“上帝早已安排好一切”的味道,下一個區塊由誰來生成冥冥中早就註定了,全網節點能做的就是靜靜等待那一刻的到來。
POS的本質就是比誰的錢多,錢越多越容易挖到區塊,這將會造成富者越富,資源越來越集中,從而變得更中心化。
DPOS代理權益證明
針對POW、POS的效率低和會變得越來越中心化的問題,BM在2013年8月啟動的位元股BitShares專案則採用了DPOS共識演算法。
位元股
位元股核心賬本採用石墨稀技術,對交易容量和區塊速度有極高要求,顯然POW或POS都達不到要求,於是位元股發明了一種新的共識機制——Delegated Proof-Of-Stake(DPOS),即代理股權證明。
DPOS很容易理解,類似於現代企業董事會制度,位元股系統將代幣持有者稱為股東,由股東投票選出101名代表,然後由這些代表負責產生區塊。那麼需要解決的核心問題主要有:代表如何被選出,代表如何自由退出“董事會”,代表之間如何協作產生區塊等。持幣者若想成為一名代表,需先拿自己的公鑰去區塊鏈註冊,獲得一個長度為32位的特有身份識別符號,使用者可以對這個識別符號以交易的形式進行投票,得票數前101位被選為代表。代表們輪流產生區塊,收益(交易手續費)平分。如果有代表不老實生產區塊,很容易被其他代表和股東發現,他將立即被踢出“董事會”,空缺位置由票數排名102的代表自動填補。
從某種角度來說,DPOS可以理解為多中心繫統,兼具去中心化和中心化優勢。
EOS
另外目前最火的區塊鏈專案之一EOS也是採用了DPOS共識。EOS通過投票的方式選舉出21個超級節點作為記賬節點,每個節點有3秒的時間片,輪流記賬。如果輪到某節點記賬而沒有出塊,則該節點可能被投票出局,由其他備選節點頂替。出塊速度是0.5秒!
EOS.IO軟體允許區塊精準的以每0.5秒產生一個區塊,只有一個生產者被授權在任何給定的時間點生產一個區塊。如果區塊在預定的時間沒有被生產出來,那麼,那個時間的區塊將被跳過。當一個或多個區塊被跳過,將會有0.5秒或更多秒的區塊間隔。
使用EOS.IO軟體,區塊以126個區塊為一輪(每個生產者可以生產6個,有21個生產者,二者相乘)。在每一輪的開始,21個區塊生產者通過token持有者的投票被選中。選中的生產者依據商定好的順序生產區塊,這個順序由15個或者更多的生產者商定。
如果一個生產者錯過了一個區塊,並且在24小時內沒有生產任何區塊,他們將會被移除。直到這些“當機”的生產者們及時通知區塊鏈,他們將打算再次生產區塊才被重新加入。通過不安排那些不夠可靠的節點,儘可能的減少錯過區塊建立,來讓整個網路執行得更平穩。
DPOS的特殊性,也是奠定拜占庭容錯能力的基礎框架,是它的算力節點是固定21個人,並且由大型的機構運營節點,其資訊也相對透明,例如運營節點的地點、運營的情況等等。並且DPOS的算力節點是固定出塊順序的,固定地從A到B到C······。
傳統DPOS中加入了拜占庭容錯演算法(BFT),只要沒有生產者蓋上相同的時間戳或相同區塊高度的兩個區塊,便允許所有生產者簽署所有區塊。一旦15個生產者簽署了一個區塊,該區塊就被認為是不可逆轉的。在這種模式下,不可逆轉的共識應該在1秒內完成。
在這種情況下,其實DPOS是拜占庭容錯的特殊解,如何理解特殊解?原來的拜占庭容錯(POW工作量證明),解決的是不限數量、隨機廣播同步的算力節點的容錯能力,DPOS解決的拜占庭容錯從兩個維度降低了難度:
1、節點數量固定只有21個。並且節點資訊透明。
2、固定出塊順序。每個節點跟接力棒一樣,一個個往下接力出塊。每個節點不能還沒輪到它出塊的時候,就出塊。都是必須輪到再出塊。如果出現出塊故障,會跳過這個節點。
在POW或者其他的POS共識裡,節點不限、隨機出塊順序的問題,就變成只要解決「固定數量和固定出塊順序情況下的拜占庭問題」,其難度就大大降低。
一直以來以太坊的創始人Vitalik和EOS創始人BM關於POW和DPOS誰更中心化進行互懟。Vitalik認為EOS的21個超級節點違反了區塊鏈的去中心化原則,有失公平。而BM則認為幾個幾大礦池控制了比特幣和以太坊的絕大部分算力,這相當於以太坊只有幾個超級節點,比21個節點還要少,對手裡拿著BTC和ETH的人他們對社群和整個生態,他們是沒有確定的發言權的,在比特幣的世界裡算力就是王道,面對算力大量集中在部分礦場的現在,它真的實現了中本聰的本心了嗎?同樣需要挖礦POS也是一樣,需要看概率來決定你能否發聲,但是DPOS是有發言權的,不管持有多少,我都有發言權。這種看似由“直接民主”轉為“間接民主”的機制,或許才是真正體現了去中心化精神。
以下是最新的比特幣算力分佈和以太坊的算力分佈:
其他改進共識
以上介紹到的PBFT、POW、POS和DPOS各有各的優缺點:
- POW的能耗問題
- POS/DPOS的中心化問題
- PBFT的節點數問題
- IP投票制幣不夠安全
有人仿照CAP不可能三角,也提出了區塊鏈共識的不可能三角:環保節能、安全、去中心化,三者不可能同時滿足,必有一方的弱化。設計一個既環保又安全的密碼學貨幣,它必然是中心化的,比如PPcoin、Nextcoin、Ripple,它們要麼本身就是中心化的架構,要麼其去中心化的架構不可維持,它們本質上仍是PayPal、網銀一樣的中心化驗證機制;設計一個既環保又去中心化的密碼學貨幣,它必然是不安全的,比如IP投票制的P2P貨幣,中本聰起初就已排除了這種可能,他認為“如果決定大多數的方式是基於IP地址的,一IP地址一票,那麼如果有人擁有分配大量IP地址的權力,比如殭屍網路,就有可能主宰比特幣網路”[vi]。設計一個安全的去中心化貨幣,它必然是以付出能源與計算力為代價。
有時,我們可能需要根據區塊鏈的場景,對原有共識演算法進行改進。
NEO的dBFT
NEO採用的是 Delegated Byzantine Fault Tolerance (dBFT) 共識演算法,由於它目前只有 7 個 代理節點,而代表節點則是通過使用者投票選出。dBFT參與記賬的是超級節點,普通節點可以看到共識過程,並同步賬本資訊,但不參與記賬。總共n個超級節點分為一個議長和n-1個議員,議長會輪流當選。每次記賬時,先有議長髮起區塊提案(擬記賬的區塊內容),一旦有至少(2n+1)/3個記賬節點(議長加議員)同意了這個提案,那麼這個提案就成為最終釋出的區塊,並且該區塊是不可逆的,所有裡面的交易都是百分之百確認的。
以太坊的下一代POS共識:Casper
Casper(投注共識)是一種以太坊下一代的共識機制,屬於PoS。Casper的共識是按塊達成的而不是像PoS那樣按鏈達成的。
為了防止驗證人在不同的世界中提供不同的投注,我們還有一個簡單嚴格的條款:如果你有兩次投注序號一樣,或者說你提交了一個無法讓Casper合約處理的投注,你將失去所有保證金。從這一點我們可以看出,Casper與傳統的PoS不同的是Casper有懲罰機制,這樣非法節點通過惡意攻擊網路不僅得不到交易費,而且還面臨著保證金被沒收的風險。
Casper協議下的驗證人需要完成出塊和投注兩個活動。具體如下:
出塊是一個獨立於其它所有事件而發生的過程:驗證人收集交易,當輪到他們的出塊時間時,他們就製造一個區塊,簽名,然後傳送到網路上。投注的過程更為複雜一些。目前Casper預設的驗證人策略被設計為模仿傳統的拜占庭容錯共識:觀察其他的驗證人如何投注,取33%處的值,向0或者1進一步移動。
而客戶端的確認當前狀態的過程如下所示:
一開始先下載所有的區塊和投注,然後用上面的演算法來形成自己的意見,但是不公佈意見。它只要簡單的按順序在每個高度進行觀察,如果一個塊的概率高於0.5就處理它,否則就跳過它。在處理所有的區塊之後得到的狀態就可以顯示為區塊鏈的“當前狀態”。客戶端還可以給出對於“最終確定”的主觀看法:當高度k之前的每個塊,意見要麼高於99.999%或者低於0.001%,那麼客戶端就可以認為前k個塊已經最終確定。
IOTA和Byteball的DAG和相關共識
IOTA和Byteball這種基於DAG結構的分散式賬本技術,從概念上講已經不能算是區塊鏈了,因為在底層結構上,DAG中既沒有區塊也不是鏈。IOTA中使用Tangle(纏結)這種技術,使得每個交易在發出時也見證另外兩個交易。Byteball採用的是11個見證人的方式,由見證人蔘與共識。
HyperLedger Fabric下一代共識:SBFT
PBFT在Fabric0.6的時候被採用,但是由於一些說不清的原因,在Fabric1.0中並沒有採用PBFT,而是使用Kafka進行排序,作為共識節點。在Fabric的提案中,打算會採用SBFT(Simple BFT),這種BFT演算法會對PBFT進行簡化,具體什麼時候實現還沒準呢。
PalletOne的陪審團共識
在英美,陪審團制度是一個使用了幾百年的共識制度,關於一個案件中嫌疑人是否有罪,是由隨機抽選的陪審員組成陪審團共同決定的。提到陪審團,就不得不提一部非常經典的電影《十二怒漢》:
《十二怒漢》講述的是一個在貧民窟長大的18歲少年因為涉嫌殺害自己的父親被告上法庭,證人言之鑿鑿,各方面的證據都對他極為不利。十二個不同職業的人組成了這個案件的陪審團,他們要在休息室達成一致的意見,裁定少年是否有罪,如果罪名成立,少年將會被判處死刑。
《十二怒漢》通過一場陪審團審判,生動演繹了美國的法律制度與文化,是美國宣傳法律和法律制度的“銀法槌獎”的首部獲獎作品。同名電影在IMDB上排名第五,高於《阿甘正傳》《辛德勒的名單》等,是一部超越時代的經典之作!其中的一段臺詞也很能體現陪審團制度的特點:
“我們都肩負責任。我一直認為,這正是民主社會了不起的地方。我們接到郵件通知,大老遠跑到這裡,決定一個跟我們素昧平生的人到底有沒有罪。不論作出什麼樣的裁決,我們都拿不到任何好處,也不會有任何損失。這正是我們國家強大的原因之一。我們不能把它當成個人的事”
PalletOne提供了對各個底層鏈的抽象,使用者使用常用的開發語言,基於對底層鏈的抽象介面進行操作。而合約的執行就是靠一個個的陪審團來完成的。
除了陪審團這個角色,在PalletOne中還有一個叫仲裁中介(Mediator)的角色,該角色是基於DPOS選舉的,相當於現實生活中的法官的角色,在接到一個新的智慧合約後,Mediator會隨機選擇陪審員組成陪審團,由該陪審團負責該智慧合約的執行和共識。
陪審團共識與傳統POW、POS等共識的不同之處在於,陪審團共識是一個並行的共識機制,在同一個時刻,有多個陪審團同時在執行不同的合約。為了配合陪審團的並行共識,PalletOne採用了DAG作為分散式儲存,合約的狀態資料可以並行寫入DAG中。所以PalletOne使用陪審團並行共識+DAG的並行寫入,可以實現極高的TPS。
總結
現在區塊鏈上數字資產的應用越來越多來源於真實世界或金融資產,對交易的最終確認有很高的要求,需要有不同的共識機制。
共識機制是區塊鏈的核心技術,現在各種區塊鏈共識機制的選擇是認為至今為止的相對的最優選擇;當未來區塊鏈技術越來越多應用於現實,未來將會不斷有所改進,以切合實際的需要。
共識演算法的選擇與應用場景高度相關,可信環境使用Paxos或者Raft,帶許可的聯盟可使用PBFT,非許可鏈可以是POW、POS、DPOS共識等。