Zilliqa是一个新的区块链平台,每秒可处理数千个交易, 因此Zilliqa有潜力与VISA和MasterCard等传统的支付方式相匹敌。 更重要的是,Zilliqa的交易吞吐量可以随网络规模增大而近似线性增长。
从这篇文章开始,我们将用一系列的文章逐步介绍Zilliqa的设计构思。此篇将介绍Zilliqa可扩展性的核心思想 — —分片(Sharding)。Zilliqa的分片含多个层面,包括网络分片、交易分片和计算分片(network sharding, transaction sharding, and computational sharding)。其中最重要的是网络分片,因为其他分片机制都建立在网络分片之上。
那么,到底什么是网络分片呢?实际上,网络分片(我们将在本文中将其简称为分片)是一种将Zilliqa网络划分成一系列包含更少节点的群组的机制,这样的每个群组被称为分片(shard)。
比如说,当一个网络由1000个节点构成时,我们可以将此网络划分为10个、每个由100个节点组成的分片。Zilliqa真正可扩展性的秘诀就在于网络分片。假设我们有一个包含1000个节点的网络,Zilliqa将自动地把该网络分成10个、每个包含100个节点的分片,且所有分片可并行地处理交易。
如果每个分片每秒能处理10个不同交易,则所有分片每秒可一并处理100个交易。由于分片架构能平行地处理交易,因此Zilliqa的吞吐量可随着网络规模增加而线性增长。
分片的想法当然不是新事物,事实上,它可以追溯到数据库领域,在数据库中它被用来提高性能、可扩展性和I/O带宽。然而,在区块链中分片的想法起初是由Zilliqa团队成员于2015年在合著的学术论文(最终以A Secure Sharding Protocol For Open Blockchains为题发表于CCS 2016)中提出的。就是这样吗?听起来很简单噢!虽然想法听着很简单,但在工作中实践起来却并非如此。为了理解面临的挑战,让我们首先从实现分片要解决的一些关键问题入手:
1、对女巫攻击的防御(Sybil Resistance)。由于Zilliqa是一个公有区块链平台,任何有连接因特网电脑的人都可以使用它。包括Zilliqa在内的任何公有区块链的运行都需要足够数量的节点,因此公有区块链难以避免恶意节点的进入。根据定义,恶意节点会试图通过操纵多个节点来破坏系统,并影响任何基于多数节点的决策过程。这就是通常所说的女巫攻击(Sybil Attacks)。
2、创建分片。让我们先假设女巫攻击的问题通过某种方式被解决了,并且假设网络中1000个节点被分为10个、每个包含100个节点的分片。那么哪个节点被分配到哪个分片是由谁决定的呢?这当然不能由Zilliqa团队成员所控制的一个节点或一组节点决定,因为如果Zilliqa团队变成恶意的(只是假设),那么他们可以将所有恶意节点集中在一个分片中来损害Zilliqa的安全性。顺便说一句,如果您不知道Zilliqa团队成员是谁。
3、分片大小。这个问题很简单,比如说我们可以拥有一个由10个节点组成的小分片吗?答案当然是不可以!事情当然没那么简单。事实上如果分片很小,那么攻击者就会更容易控制它,而且由于这些分片运行了Zilliqa协议的某些部分(如共识),我们当然不希望由一个很小的分片(很有可能只包含恶意节点)来决定接受哪些或拒绝哪些交易。Zilliqa如何解决这些问题呢?