通常而言,區塊鏈是一個不可變的交易分類帳,維護在一個分佈式對等節點網絡中。這些節點經過應用已經由共識協議驗證的交易來維護分類賬的副本,該交易被分組爲包括將每一個塊綁定到前一個塊的散列的塊中。git
區塊鏈的第一個也是最廣爲人知的應用是比特幣加密貨幣,儘管其餘人也追隨了它的腳步。以太幣,另外一種加密貨幣,採起了不一樣的方法,集成了許多與比特幣相同的特性,但添加了智能合約爲分佈式應用程序建立了一個平臺。比特幣和以太幣屬於一類區塊鏈,咱們將其歸類爲公共無許可的區塊鏈技術。基本上,這些都是公共網絡,開放給任何人,參與者匿名互動。github
隨着比特幣,以太幣和其餘一些衍生技術的普及,對將區塊鏈、分佈式分類帳和分佈式應用平臺的底層技術應用於更具創新性的企業用例的興趣也在增加。然而,許多企業用例須要的性能特性是無許可的區塊鏈技術沒法(目前)交付的。此外,在許多使用案例中,參與者的身份是一項硬性要求,例如在必須遵循Know-Your-Customer(KYC)和 Anti-Money Laundering(AML)法規的金融交易中。apache
對於企業使用,咱們須要考慮如下要求:編程
雖然許多早期的區塊鏈平臺目前正在適應企業使用,Hyperledger Fabric從一開始就爲企業使用而設計。如下部分描述了Hyperledger Fabric(Fabric)如何與其餘區塊鏈平臺區分開來,並描述了其架構決策的一些動機。segmentfault
Hyperledger Fabric是一個開源的企業級許可分佈式分類帳技術(DLT)平臺,專爲在企業環境中使用而設計,與其餘流行的分佈式分類賬或區塊鏈平臺相比,可提供一些關鍵的差別化功能。安全
一個關鍵的區別是Hyperledger是在Linux基金會下創建的,該基金會自己在開放式治理下培育開源項目的歷史悠久且很是成功,使其成長爲強大的可持續社區和繁榮的生態系統。Hyperledger由多元化的技術指導委員會和Hyperledger Fabric項目管理,來自多個組織的各類維護人員。它擁有一個開發社區,自最先提交以來已經發展到超過35個組織和近200個開發人員。網絡
Fabric具備高度模塊化和可配置的體系結構,爲普遍的行業用例提供創新、多功能性和優化,包括銀行、金融、保險、醫療保健、人力資源、供應鏈,甚至數字音樂交付。架構
Fabric是第一個支持用通用編程語言(如Java,Go和Node.js)編寫智能合約的分佈式分類帳平臺,而不是受限制的特定於域的語言(DSL),這意味着大多數企業已經擁有開發智能合約所需的技能,而且不須要額外的培訓來學習新的語言或DSL。框架
Fabric平臺也是許可的,這意味着,不像公開無許可的網絡,參與者彼此瞭解,而不是匿名的而且所以徹底不可信。這意味着雖然參與者可能彼此不徹底信任(例如,他們多是同一行業中的競爭者),網絡能夠在基於參與者之間存在的信任的治理模型下運行,例如 處理糾紛的法律協議或框架。less
平臺最重要的區別之一是它支持可插拔的共識協議,這使得平臺可以更有效地定製以適應特定的用例和信任模型。例如,在單個企業中部署時,或由受信任的權威機構運做,徹底拜占庭容錯的共識可能被認爲是沒必要要的,而且對性能和吞吐量形成過分的拖累。在這種狀況下,崩潰容錯(CFT)共識協議可能就綽綽有餘了,而在多方、分散的用例中,可能須要更傳統的拜占庭容錯(BFT)共識協議。
Fabric能夠利用不須要原生加密貨幣的共識協議來刺激昂貴的挖掘或推進智能合約執行,避免加密貨幣會減小一些重要的風險/攻擊向量,而且無加密挖掘操做意味着可使用與任何其餘分佈式系統大體相同的運營成原本部署平臺。
這些差別化設計功能的結合使Fabric成爲目前性能更好的平臺之一,不管是在交易處理仍是交易確認延遲方面,而且它實現了交易以及實現它們的智能合約(Fabric稱之爲「鏈碼」)的隱私和機密性。
讓咱們更詳細地探索這些差別化的功能。
Hyperledger Fabric通過特別的設計以具備模塊化架構。不管是可插拔的共識,可插拔的身份管理協議(如LDAP或OpenID Connect),密鑰管理協議仍是加密庫,平臺的核心設計旨在知足企業用例需求的多樣性。
在高層次上,Fabric由如下模塊化組件組成:
業界公認沒有「一個區塊鏈能夠治理它們全部」,Hyperledger Fabric能夠經過多種方式進行配置,以知足多個行業用例的各類解決方案要求。
在一個無許可的區塊鏈中,幾乎任何人均可以參與,每一個參與者都是匿名的。在這種環境下,除了區塊鏈的狀態以外沒有任何信任,在必定深度以前,是不可改變的。爲了減輕這種信任的缺失,無許可的區塊鏈一般採用一種「挖掘」的原生加密貨幣或交易費用來提供經濟激勵,以抵消參與基於「proof of work」(PoW)的拜占庭容錯共識形式的特殊成本。
許可的區塊鏈,另外一方面,在一組已知的集合中操做區塊鏈,識別並常常審查在產生必定程度信任的治理模型下操做的參與者。許可的區塊鏈提供了一種方法來保護具備共同目標但可能沒法徹底相互信任的一組實體之間的交互。經過依賴參與者的身份,許可的區塊鏈可使用更傳統的崩潰容錯(CFT)或拜占庭容錯(BFT)共識協議,這些協議不須要昂貴的挖掘。
另外,在這種許可的狀況下,參與者經過智能合約故意引入惡意代碼的風險下降。首先,參與者彼此瞭解和全部行動,不管提交應用程序事務,修改網絡配置仍是部署智能合約,都會根據爲網絡和相關交易類型創建的承認策略記錄在區塊鏈中。而不是徹底匿名,能夠很容易地識別有罪方,並根據治理模式的條款處理事件。
智能合約或Fabric稱之爲「鏈碼」,功能做爲受信任的分佈式應用程序,從區塊鏈中得到安全性/信任以及對等點之間的基本共識。它是區塊鏈應用程序的業務邏輯。
有三個關鍵點應用於智能合約,尤爲是應用於平臺時:
大多數現有的具備智能合約能力的區塊鏈平臺遵循共識協議的排序-執行架構:
幾乎全部現有的區塊鏈系統均可以找到排序-執行架構,範圍從公共/無許可平臺,如以太幣(基於PoW的共識)到許可的平臺,如Tendermint、Chain和Quorum。
在使用排序-執行架構運行的區塊鏈中執行的智能合約必須是肯定性的;不然,可能永遠不會達成共識。爲解決非肯定性問題,許多平臺都要求智能合約使用非標準的或特定於領域的語言(如Solidity)編寫,以便消除非肯定性操做。這阻礙了普遍採用,由於它要求開發人員學習新語言來編寫智能合約並可能致使編程錯誤。
此外,因爲全部節點都順序執行全部交易,所以性能和規模有限。智能合約代碼在系統中的每一個節點上執行的事實要求採起復雜措施來保護整個系統免受潛在惡意合約的影響,以確保整個系統的彈性。
Fabric爲交易引入了一種新的體系結構,咱們稱之爲執行-排序-驗證。它經過將交易流分爲三個步驟來解決排序-執行模型所面臨的彈性、靈活性、可伸縮性、性能和機密性方面的挑戰:
這種設計與排序-執行範例徹底不一樣,由於Fabric在就排序達成最終協議以前執行交易。
在Fabric中,特定於應用程序的承認策略指定哪些對等節點,或它們中的多少,須要保證給定智能合約的正確執行。所以,每一個交易只須要由知足交易承認策略所需的對等節點的子集執行(承認),這容許並行執行,從而提升系統的總體性能和規模。第一階段也消除了任何非肯定性,由於在排序以前能夠過濾不一致的結果。
由於咱們已經消除了非肯定性,因此Fabric是第一個可以使用標準編程語言的區塊鏈技術,在1.1.0版本中,智能合約能夠用Go或Node.js編寫,而有計劃在後續版本中支持其餘流行語言,包括Java。
正如咱們所討論的那樣,在一個公共的,無許可的區塊鏈網絡中,利用PoW做爲其共識模型,交易被在每一個節點上執行。這意味着合約自己和他們處理的交易數據都不存在機密性,每一個交易以及實現它的代碼對於網絡中的每一個節點都是可見的。在這個案例中,咱們用合約和數據的機密性換取了PoW提供的拜占庭容錯共識。
對於許多商業/企業用例而言,這種缺少機密性可能會有問題。例如,在供應鏈合做夥伴網絡中,某些消費者可能會得到優惠利率,做爲鞏固關係或促進額外銷售的一種手段。若是每一個參與者均可以看到每一個合約和交易,那麼就沒法在徹底透明的網絡中維持這種業務關係 - 每一個人都但願得到優惠費率!
做爲第二個例子,考慮證券行業,一個交易員創建頭寸(或處理其中一個)不但願她的競爭對手知道這一點,不然他們將尋求進入遊戲,削弱交易員的策略。
爲了知足企業用例要求的目的,解決缺少隱私和機密性的問題,區塊鏈平臺採用了多種方法,全部的都有本身的權衡。
加密數據是提供機密性的一種方法;然而,在利用PoW達成共識的無許可網絡中,加密數據位於每一個節點上,若是有足夠的時間和計算資源,加密可能會被破解。對於許多企業用例,其信息可能被泄露的風險是不可接受的。
Zero knowledge proofs(ZKP)是另外一個正在研究解決這個問題的研究領域,這裏的權衡是,目前計算ZKP須要大量的時間和計算資源,所以,在這種狀況下的權衡是保密性的性能。
在許可的環境下,能夠利用其餘形式的共識,能夠探索將機密信息僅分發給受權節點的方法。
Hyperledger Fabric是一個通過許可的平臺,經過其通道架構實現機密性。基本上,Fabric網絡上的參與者能夠在參與者子集之間創建一個「通道」,該通道應該被授予對特定交易集合的可見性,將此視爲網絡覆蓋。所以,只有那些參與通道的節點才能訪問智能合約(鏈碼)和交易數據,從而保護二者的隱私和機密性。
爲了提升其隱私和機密性能力,Fabric增長了對私有數據的支持,而且正在研究將來可用的zero knowledge proofs(ZKP),更多關於這一點,由於它變得可用。
交易的排序委託給一個模塊化組件以達成共識,該組件在邏輯上與執行交易和維護分類帳的對等點分離。具體地說,排序服務。因爲共識是模塊化的,其實現能夠根據特定的部署或解決方案的信任假設進行定製,這種模塊化架構容許平臺依賴完善的工具包進行CFT(崩潰容錯)或BFT(拜占庭容錯)排序。
在目前可用的版本中,Fabric提供一個使用Kafka和Zookeeper實現的CFT排序服務,在隨後的版本中,Fabric將提供使用etcd/Raft實現的Raft共識排序服務以及徹底分散的BFT排序服務。
還要注意這些並不相互排斥,Fabric網絡能夠具備多個排序服務,支持不一樣的應用程序或應用程序需求。
區塊鏈平臺的性能可能會受到許多變量的影響,例如交易大小,區塊大小,網絡大小以及硬件限制等,Hyperledger社區目前正在開發性能和規模工做組中的一套度量草案,以及一個名爲Hyperledger Caliper的基準測試框架的相應實現。
雖然這項工做仍在繼續開發,應被視爲區塊鏈平臺性能和規模特徵的明確衡量標準,但IBM Research的一個團隊發表了一份對等點評審論文,評估了Hyperledger Fabric的架構和性能。此論文提供了對Fabric架構的深刻討論,而後使用Hyperledger Fabric v1.1的初步版本報告團隊對平臺的性能評估。
研究團隊所作的基準測試工做爲Fabric v1.1.0版本帶來了大量的性能改進,使v1.0.0版本的總體性能提升了一倍以上。
對區塊鏈平臺的任何認真評估都應該在其短名單中包含Hyperledger Fabric。
結合,Fabric的差別化功能使其成爲一個高度可擴展的系統,用於支持靈活的信任假設的許可區塊鏈,使該平臺可以支持從政府,金融,供應鏈物流到醫療保健等普遍的行業用例。
更重要的是,Hyperledger Fabric是(目前)十個Hyperledger項目中最活躍的,平臺周圍的社區建設正在穩步增加,每一個連續版本提供的創新遠遠超過任何其餘企業區塊鏈平臺。
前面的內容來自對等點評估的「Hyperledger Fabric:許可區塊鏈的分佈式操做系統」 - Elli Androulaki, Artem Barger, Vita Bortnikov, Christian Cachin, Konstantinos Christidis, Angelo De Caro, David Enyeart, Christopher Ferris, Gennady Laventman, Yacov Manevich, Srinivasan Muralidharan, Chet Murthy, Binh Nguyen, Manish Sethi, Gari Singh, Keith Smith, Alessandro Sorniotti, Chrysoula Stathakopoulou, Marko Vukolic, Sharon Weed Cocco, Jason Yellick