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 ( N 2 ) 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行为(也就是给不同的节点发不同的消息),就可以将容错能力提高到 n 1 2 \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 ( N 2 ) 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了。

发布了74 篇原创文章 · 获赞 11 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/yijiull/article/details/96749886