1. 程式人生 > >區塊鏈深入理解---BLOCKBENCH:A Framework for Analyzing Blockchains

區塊鏈深入理解---BLOCKBENCH:A Framework for Analyzing Blockchains

論文發表在SIGMOD'2017 ,SIGMOD是資料庫頂級會議。可見論文作者基本是資料庫界的大牛,從論文中也可以看出這一點。這樣也好,站在不同視角理解區塊鏈。可能更開腦洞。本文的確是一篇分析私有(或許可型)區塊鏈的難得好文。

下面是筆者在讀這篇論文時做的一點筆記。

1、引言

區塊鏈,也稱分散式賬本,本質上是系統互不信任的節點維護了一種只可附加的資料結構。(系統所有節點對儲存在區塊鏈上的交易及其順序達成一致,基於此,區塊鏈經常被稱作分散式賬本)

在資料庫視角下,可以將區塊鏈視作對分散式事務管理問題的一種解決方案:所有的節點儲存資料副本並且事務的執行順序達成一致。但是傳統的資料庫運作在可信的環境中

,並且使用了眾所周知的併發控制技術對事務排序。(筆者注:因此比特幣在特殊的場景下解決了公開網路上的拜占庭共識問題,這是對電腦科學的一大貢獻。)

區塊鏈的關鍵優勢是其不假設節點之間互相信任,因此旨在實現拜占庭容錯。

在最初的設計中,比特幣區塊鏈儲存比特幣(bitcoin)作為所有參與者共享的系統狀態。對於這種簡單應用,比特幣節點實現了一種簡單的複製狀態機模型,將bitcoin從一個地址轉到另一個地址。此後,區塊鏈快速發展成支援使用者自定義的狀態和圖靈完備狀態機模型。以太坊是一個典型的例子。更重要的是,產業界開始推動開發新的區塊鏈平臺,這些平臺為私有環境所設計,其中參與者都是要經過認證的

。在這種環境下的區塊鏈系統被稱為私有(或許可型)區塊鏈。面向安全交易和清算,資產和金融管理,銀行和保險的應用正在建設和評估。這些應用目前都跑在企業級資料庫系統上,例如Oracle和MySQL。但是區塊鏈有潛力顛覆現狀,因為它可以帶來更低的基礎設施和人力成本。特別是,區塊鏈的不可篡改性和透明性減少人為錯誤和手動干預衝突資料的需要。區塊鏈可以通過消除重複工作簡化商業過程。

鑑於在這些傳統資料庫技術已經確定統治地位的應用場景中部署區塊鏈,我們不得不自問:區塊鏈能在多大程度上處理資料工作量?此外,應該選哪一個平臺呢

作者開發了一個基準測試框架BLOCKBENCH來解決這兩個問題。該框架是首個研究和比較許可型區塊鏈的效能的benchmark。儘管在許可型環境下,節點仍然可以是互不信任的,但是節點身份是已知的,比起公開環境(使用PoW),系統可以使用更高效的協議容忍拜占庭故障。

公有區塊鏈的效能有了相當細緻的研究。本文聚焦許可型區塊鏈。

ps:當然在許可型下,仍然可以使用PoW,但是在節點身份已知的情況下有更高效且確定性的方法

本文結論:

1、區塊鏈系統的效能有限,遠遠低於最先進的資料庫系統(例如H-Store)的預期。

2、在七個基準測試指標下,Hyperledger相較於以太坊和Parity都是一騎絕塵。但是其節點數超過16個,就不具備可擴充套件性。

2、私有區塊鏈

Blockchain transactions:區塊鏈中的一次transaction(交易)與傳統的資料庫中的transaction(事務)是一樣的,即對某些狀態進行實施的操作序列(a sequence of operations applied on some states)。就這一點而論,一次區塊鏈transaction需具備相同的ACID(即原子性、一致性、隔離性和永續性)語義。關鍵的區別是考慮的failure模型。目前的事務性分散式資料庫使用了經典的併發控制技術來確保ACID,例如兩階段提交。他們可以實現高效能,因為簡單的failure模型,例如:crash failure(宕機故障)。但是,最初的區塊鏈設計考慮了一種更加不利的環境,即節點是拜占庭節點並且可以自由加入和離開。此模型下,併發控制的開銷更高(ps:O(N2))。

比特幣PoW是容忍拜占庭故障的,但實際上是一個概率演算法,即相同時刻有兩個塊被追加到區塊鏈上是可能的,這樣就產生了分叉。比特幣解決分叉僅僅是通過一個塊後面連線的塊的個數來定的(一般為六個)。這種概率性保證導致安全和效能問題。已經有證明一個敵手只要控制25%的節點就可以發起攻擊。

以太坊:由於(比特幣)簡單的交易語義,比特幣節點實現了一個非常簡單的狀態機,該狀態機提前預置在協議中。以太坊區塊鏈擴充套件了比特幣的功能,支援使用者自定義和圖靈完備的狀態機。尤其是以太坊區塊鏈允許使用者以智慧合約的形式定義任何複雜的計算。一旦部署,該智慧合約就在所有的以太坊節點上執行。

以太坊與比特幣相比一個關鍵區別是以太坊維護了智慧合約狀態以及正常交易。實際上,一段智慧合約是被唯一的(合約)地址所標識,該地址有自己的資金餘額(以太幣),並且一經檢索到有一筆交易傳送至該(合約)地址,以太坊網路節點就會執行合約邏輯。以太坊自帶執行引擎,即以太坊虛擬機器(EVM)來執行智慧合約。

私有區塊鏈:事實上,90%的公有區塊鏈系統使用了PoW的變種。PoW是非確定性的並且計算代價高。這兩者導致其不適合諸如銀行和金融應用,這些應用必須以一種確定性方式處理大量交易。最近的區塊鏈系統,例如Hyperledger,考慮了受限制的環境,其中所有的節點均要經過認證。儘管PoW仍然適用於這種許可型環境,但是在節點身份已知的情況下有更高效且確定性的解決方案。在這種封閉的(closed)環境中,分散式容錯共識在分散式系統中已經是一個深入研究過的話題。Zab,Raft,Paxos和PBFT都是今天積極使用流行協議。最近的許可型區塊鏈要麼使用已有的PBFT(Hypeledger),要麼開發自己的變體(例如Parity、Ripple和ErisDB)。大多數支援智慧合約,儘管程式語言不同、API不同、執行引擎不同。相交基於PoW的區塊鏈,許可型區塊鏈可以更高效地執行復雜應用,同時是拜占庭容錯的。這些屬性(支援智慧合約、拜占庭容錯)和來自主流銀行和金融機構的商業利益紛紛押寶在私有區塊鏈(顛覆資料管理的當前實踐)。

3 區塊鏈設計

作者將區塊鏈抽象為4層,如圖所示。

應用層包括各種各樣的區塊鏈應用;

執行層包括支援區塊鏈操作的執行環境細節;

資料層包括對區塊鏈資料的結構、內容和操作;

共識層包括共識協議;

SIGMOD'2017學術論文筆記:BLOCKBENCH——私有區塊鏈量化框架
 

資料模型

在比特幣中,交易是一等公民,它們是比特幣網路中代表數字貨幣的系統狀態。私有區塊鏈藉助賬戶背離這一模型。這樣一個直接利好是簡單性,尤其是對相關密碼貨幣應用。例如:在比特幣中轉一筆錢是這樣的:尋找屬於傳送者的交易,標記其中的一些交易為已花費。但是在以太坊中就比較簡單,通過更新交易雙方的賬戶就可以搞定。以太坊中還有一類特殊的賬戶,稱為合約賬戶,包括可執行程式碼和私有狀態。

5.討論

區塊鏈仍未做好大規模使用的準備,目前除了密碼貨幣應用,沒有其他已建立的應用。

將資料庫設計引入到區塊鏈,作者提出了四種方法改進區塊鏈。

(1)首先將儲存、執行引擎和共識層彼此解耦,然後獨立優化和擴充套件;

(2)接納新的硬體:多核CPUs和大記憶體、可信硬體

(3)分片分割槽:區塊鏈本質上是一種複製狀態機系統,系統內每一個節點維護了相同的資料。

(4)support declarative language

區塊鏈平臺綜述

SIGMOD'2017學術論文筆記:BLOCKBENCH——私有區塊鏈量化框架