三难问题
如前篇所述,区块链可扩展性问题与所谓三难(trilemma)问题有关,即区块链最多拥有如下三点中的两点:
如果选择拥有可扩展性和安全性(如同支付宝),这往往意味着具有较大吞吐量的中心化,而以太坊选择的是去中心化和安全。为了获得可扩展性,一种比起增加区块大小更为合适的方法是使用分片技术,即把整个网络划分为多个片(shard),每个片具有独立的状态(当前的)和历史(过去的)。
分片技术
在Decon上,Vitalik Buterin通过小岛的比喻来解释分片:
Imagine that ETHereum has been split into thousands of islands. Each island can do its own thing. Each of the island has its own unique features and eeryone belonging on that island i.e. the accounts, can interact with each other AND they can free indulge in all its features. If they want to contact with other islands, they will hae to use some sort of protocol.
划分
分片是来自数据系统的词。假设你的网站拥有一个巨大的数据库,这不只让搜索速度下降,同时也影响到扩展性。常见方法是对数据库进行水平划分(horizontal partition)并将其存放在不同的服务器上。数据库的结构并没有发生变化,但其内容减小了。
在控制所有的机器的情况下这种方式是很容易实现的,但在去中心化的情况下总会出现恶意节点,所以需要开发一套共识算法来处理这个问题。一个难点是分片基本上是随机的,这意味着多数节点将频繁地和对方进行通信,而且节点还分布在世界各个地方,所以当前分片技术必须在存储数据量和节点间通信频率达到平衡。
结构
我们把区块链上某个时刻的状态称为全局状态,这对所有人是可见的。为了分片,我们采用哈希树(Hash tree/Merkle tree)对这个状态进行树状的划分,如下图所示。
分片后发生什么
- 区块链的状态将被分片
- 账户将处于某个分片中
- 账户只能与同个分片中的账户进行通信
分片的技术挑战
- 在确保安全和高效的前提下,需要有机制知道哪个节点实现了哪个分片
- 在实现分片前,以太坊需首先实现Casper,即以太坊上的PoS(权益证明)
- 需要开发相应的证明机制以应对片间通信
分片的应用
2018年区块链世界的一个趋势就是可扩展性问题的重视和解决。截至目前,Zilliqa和QuarkChain是仅有的两个在其测试网络(testnet)上实现分片技术的区块链项目。
Zilliqa
Zilliqa是一个高吞吐量的公链平台,已经在AWS EC2服务器上证明了2488tps的运行能力(6个分片,3600个节点),同时它也证明:链上节点越多,将具备越高的tps值。
Zilliqa清楚区分了状态(state)和交易历史(transaction history)。状态是指当前的情况,比起存储交易历史,其存储空间占用较小,但使用频率较高。Zilliqa采用的方式是:每个节点拥有当前状态的拷贝,但交易历史将被分片。因为交易历史使用频率比起当前状态要低,所以这将很大程度上减少分片引起的频繁通信问题。
因为证明了分片技术的可行性,Zilliqa被CrushCrypto选为三月份的”Crusher of the month”项目。
QuarkChain
QuarkChain基于分片技术实现了高性能点对点交易系统。在系统结构上分为两层:分片层(sharding layer)和用于验证前者的底层(root layer)。
QuarkChain在测试网络上也达到了几千tps。其即将开始的ICO在CrushCrypto上获得了两个Good(Flipping和Long-term holding)。
其在分片实现上与Zilliqa**的区别:
- Zilliqa只支持交易历史的分片,但QuarkChain声称支持状态和交易历史分片
- 片间交易(cross-sharding)能力比起Zilliqa更强
总结
- 分片技术已被证明能提高网络的tps
- 以太坊上实现分片,首先需要实现Casper。Casper和分片的实现将很大程度上改善以太坊的短板
- Zilliqa和Quarkchain已在测试网络上成功运行了分片技术,但两者的实现是有区别的