Blurring the Lines between Blockchains and Database Systems: the Case of Hyperledger Fabric

背景

分佈式數據庫與區塊鏈的最大不同之處:
傳統數據庫要求可信節點,區塊鏈技術支持拜占庭節點。

兩種模型

order-execute

先通過共識算法排序,然後各節點本地再執行。代表有比特幣、以太坊等。

該模型存在兩點不足:

  1. 無法並行執行

  2. 每個節點都要執行

導致無法擴展、性能低。

而分佈式數據庫很多年前就解決了這些問題。

simulate-order-validata-commit

並行模擬、後驗證。代表有Hyperledger Fabric.

支持了併發執行,但是Hyperledger Fabric實現的不夠好:大量的transaction被abort,導致tps低。

優化

作者採用了兩種併發控制的優化手段對Hyperledger Fabric進行優化:

  • transaction recordering
  • early transaction abort(需要細粒度併發的支持)

爲什麼採用了這兩種併發控制優化措施?

  1. 以區塊的形式commit transactions,有些優化是針對單獨的transactions
  2. 區塊鏈是分佈式、replicate,傳統數據庫可能是單機、partition,
  3. 區塊鏈的transaction在多個節點模擬,節點狀態可能不一致,而數據庫狀態一定一致
  4. 區塊鏈的性能瓶頸在加密簽名、網絡通信、信任驗證。傳統數據庫的瓶頸在低級的組件,比如鎖機制的使用。有的優化是針對低級的級別

併發控制技術分爲兩類:一是提高吞吐量的,二是將aborted transactions變爲successful transactions的

作者經過分析只能採用第二種。

實現

transaction recordering

#1 強連通分量
#2 simple 環
#3 統計各點的環數
#4 去點,同時更新環數
#5 拓撲排序,逆序

early transaction abort

在模擬階段或者排序階段提前終止。

模擬階段

並行進行模擬和驗證,模擬的時候讀數據的時候要檢查version,如果version大於last-version,說明在驗證階段數據被修改了,終止模擬,提前結束交易。

排序階段

如果同一個 block中的不同交易讀取同一個數據的不同版本,那麼說明兩者模擬之間其他事務修改了數據,後者交易變爲無效,不再對其進行排序,提前結束交易。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章