Towards Scaling Blockchain Systems via Sharding

Abstract

作者將數據庫中成熟的sharding技術應用於區塊鏈,提高吞吐量。

  1. 改進了PBFT的性能,提高了單個shard的吞吐量
  2. 設計了一個高效的shard formation protocol
  3. 設計了存在惡意節點情況下通用的分佈式事務協議

作者的很多設計依賴於Intel的SGX。

Introduction

區塊鏈系統在分佈式的惡意環境中提供數據透明性、完整性、不可篡改性,爲了支持這些性質,區塊鏈難以擴展(節點數和TPS都比較低)。
目前有兩種擴展方式,一是使用可信任硬件,二是使用sharding技術。Elastico、OmniLedger、RapidChain都使用了sharding技術,不過侷限於加密貨幣,並不支持通用的交易。
作者將sharding應用於permissioned blockchain,使得區塊鏈網路支持更多的節點、支持更高的吞吐量(2000到4000每秒)。
並使區塊鏈應用不再侷限於加密貨幣。

sharding技術需要確保atomicity和isolation,也就是ACID中的原子性和獨立性。
由於傳統數據庫是crash-failure模型,而區塊鏈是Byzantine failure模型,因此不能直接應用,需要先解決三個問題:

  1. 擴展拜占庭共識算法
  2. 實現安全高效的shard formation(也就是將節點分到不同的shard的策略)
  3. 要處理coordinator是惡意節點的情況

第一個問題使用SGX消除拜占庭節點的equivocation行爲,將容錯率從(n-1)/3提高到(n-1)/2。除此之外還做了一些別的優化。
第二個問題,也是使用SGX產生隨機數,保證隨機分配。
第三個問題採用了兩段鎖和兩階段算法(BFT),支持惡意環境下的分佈式事務(cross-shard transacitons)。

Preliminaries

Sharding in Databases

數據庫中將數據庫分割成多個小數據庫,提高數據庫處理事務的能力。使用two-phase commit保證原子性,two-phase locking進行併發控制來隔離事務。

Blockchains Consensus Protocols

與傳統分佈式不同,網絡中可能存在拜佔停節點。
主要有兩種共識算法,一種是公鏈普遍採用的,比如PoW,另一種是PBFT的變體。
共識算法需要保證兩個重要的性質,一是liveness,也就是所有節點最終達成一致,二是safety,所有正常節點達成一致不產生分歧。
PoW共識算法在同步網絡中可以達到50%的容錯能力,而在部分同步網絡情況下迅速下降到33%的容錯能力。吞吐量低,但是很容易擴展到很多節點。
PBFT可以達到(n-1)/3的容錯率。共識速度塊,吞吐量高,但是較難擴展(因爲共識需要的消息是O(N2)O(N^2)

Trusted Execution Environment(TEE)

這裏不做介紹,稍後會寫一篇詳細介紹SGX。

Overview

Goals

  1. 支持大型網絡(像Bitcoin和Ethereum那麼大)
  2. 支持高吞吐量(像中心化的機構一樣,比如visa)
  3. 支持通用的應用(不只是加密貨幣的交易)

Challenges and Approach

要想支持高吞吐量,就得建立在permissioned blockchain基礎上,而permissioned blockchain需要BFT共識,無法擴展到大型網絡。
作者採用SGX提高了BFT共識的容錯能力(減小了shard的size),採用sharding技術支持大型網絡(在每一個小的shard內纔可以進行BFT共識),利用SGX將node分配到shard中。
作者通過使用2PC和2PL保證了cross-shard transaction的safety,在BFT shard上運行2PC保證了liveness。

System and Threat Model

Scaling Consensus Protocols

作者進行了一番比較之後決定擴展PBFT:

  • 改進communication overhead
  • 提高容錯能力

Reducing the number of nodes

如果能阻止拜占庭節點的equivocation行爲(也就是給不同的節點發不同的消息),就可以將容錯能力提高到n12\frac{n-1}{2}.

作者採用了Attested Append-Only Memory方法(需要SGX)消除equivocation行爲,基於此實現了AHL(Attested HyperLedger)。

Optimizing commications

實驗證明只進行上述優化還是無法進行理想的擴展。作者發現是由於很多共識消息被丟棄了(隊列滿了),又提出兩點優化:

  • 將Hyperledger Fabric原始的一個消息隊列分成兩個,一個用來處理交易請求,另一個用來處理共識消息,基於此實現了AHL+
  • 當節點收到request時,不再進行廣播,而是隻將request轉發給leader(因爲之後PBFT中leader會進行廣播)
  • 採用了Byzcoin中的優化,使用collector,將消息從O(N2)O(N^2)降到O(N)O(N),基於此實現了AHLR(Attested Hyperledger Relay)

Shard Formation

  1. 真正隨機分配
  2. 合理選擇shard的size
  3. 週期更新shard

Distributed Transactions

爲了safety,採用了2PC和2PL
爲了防止惡意的coordinator,使用了BFT reference committee®作爲coordinator,然後就是正常的2PC了。

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