Sharding(分片)技术的前世今生

为什么区块链被认为是安全的以太坊君士坦丁堡硬分叉按照预计时间将于2019年1月中旬进行,君士坦丁堡硬分叉是以太坊“大都会”(Metropolis)阶段三个硬分叉中的第二个,以太坊将进入2.0时代,在英文上被称为A ShardingPoS Ethereum 2.0。

Sharding(分片)技术的前世今生

这次分叉涉及两个概念,分别是“Sharding”和“PoS”。PoS相信大家已经非常熟悉,Sharding即以太坊分片技术,是主链扩容的一种方案,那么它到底有什么样的特点以及在实际应用中又有怎么的挑战呢?今天我们一起来探究“分片技术”的前世今生。
分片技术的优点
分片是一种基于数据库分成若干片段的传统概念扩容技术,它将数据库分割成多个碎片并将这些碎片放置在不同的服务器上。在底层公有链的系统内,网络上的交易将被分成不同的碎片,其由网络上的不同节点组成。因此,只需要处理一小部分输入的交易,并且通过与网络上的其他节点并行处理就能完成大量的验证工作。
将网络分割为碎片会使得更多的交易同时被处理和验证,随着网络的增长,区块链处理越来越多的交易将成为可能。
分片的分类
由于分片机制和对象不同,区块链的分片大致可以分为以下三大类:网络分片(network sharding)、交易分片(transaction sharding)、状态分片(state sharding)。
网络分片(network sharding)是一种最基础的分片技术,通过一种随机抽样的方式可以防止恶意节点过度填充单个分片,但缺点是由于碎片被“分门别类”一些分片中的结果可能造成恶意节点的控制,从而威胁到整个网络的安全性。
交易分片(transaction sharding)是在网络分片的基础之上,主要着重点是交易的区分,即哪些交易应该按照特定的属性被分配到哪些碎片当中。基于UTXO账本,一笔交易由多个输入和多个输出构成,就像我们在星巴克买咖啡一样,商家只关心的是这笔交易是否到账,因此我们只需要将交易按照发送者的地址进行分片,将两笔交易将同时在两个分片当中进行处理和验证,这样即可保证同一个账户发出的多笔交易将被在同一个分片当中被处理,又不需要考虑跨分片的复杂通信,从而解决了一笔双花交易。
状态分片(state sharding)是指每个节点只存储了一部分的区块链状态信息,亦需要类似的机制来维护状态信息,以知道哪个片存储了需要的状态。也就是说每个节点只负责托管自己的分片数据,而不是存储完整的区块链状态。废掉多余的数据,这就不得不面临以下三个问题,即频繁跨分片信息通信(信息共享)、数据的可用性和网络节点调整。
值得注意的是,一条公链可能会同时使用多种分片技术,它们之间并不互相矛盾。这就看他们怎么进行调整布局啦,这需要通过结合严谨的理论方案证明和大规模的网络中的长时间测试验证。
主流项目分片技术介绍
JURA:JURA采用的是动态监控和分布式分片(DMDS),多层DMDS设计无需通过集中分片及牺牲安全性即可实现性能的优化,将大型数据库分成更小、更快、更便于管理的数据碎片。对于空间存储问题,是将所有Fusus(一种灵活实用且有效的数据结构) 的账本,按照账户ID的hash值分成多个子集,每个碎片子集都可以并行处理,从而进一步的提高了平台的可扩展性。有弹性的分片技术一定程度上保证了权力和收益的分散,兼容智能合约、DAG和现有的应急方案极大的了系统整体的安全性。
Quarkchain:Quarkchain 主要是分为两个层面,第一层是分片进行交易的预处理。第二层是统一的底层连接去验证所有分片交易。传统的比特币和以太坊就像一个小卖铺,只有一个唯一的入口,一个结账的柜台和一个定向的出口,所以交易进来之后只能按照顺序一个个等待结算。Quarkchain 相当于是建了一个Costco,虽然同时设有10个结账的地方,但出口还是只有一个。归根到底Quarkchain的分片技术节省的只是预处理的时间,所有分片交易在出去之前仍需要排成一个队进行验证,这就不可避免的浪费了大量的验证时间。
Zilliqa:Zilliqa的分片设计过于简单,Zilliqa的很多设计是防范女巫攻击的,但是却忽略了penny attack的致命威胁。这是因为他们也是基于sender account的, 所以假如一个hacker写一个发送程序,比如每秒发送1000个交易,每个交易只有1个coin。然后把这个程序复制100份并且同时工作。这样的话很容易对该账户所在shard造成过大的负载,甚至可能让整个系统都完全瘫痪。
分片技术所面临的挑战
分片技术的关键在于由于每个片区里的数据是分开更新的,在设计应用逻辑时必须确保在平衡效率的前提下,对信息进行成功更新,同时也需要预留出一定的鲁棒性来应对一个达成最终一致性过程中可能出现的不一致性。这就无法保证完全的去中心化,所以高性能和去中心化必须找到一个平衡点,要牺牲哪一个部分,仍然是困扰分片技术的一个关键难题。
此外在区块链中应用分片技术,还需要考虑的问题是对各种攻击如女巫攻击,DDOS攻击、双花攻击的防御。需要在权衡效率的同时,保证每个分片内的总节点数目足够多,并且诚实的节点占大多数,分片技术对安全性要求极。同时,区块链系统中的节点数目比传统数据库中的可能要多,并且面临带宽的限制,和交易出现的跨片问题。需要充分考虑到延迟带来的不一致性导致的性能和安全性问题,所以发展到今日,区块链的分片技术鲜有大规模的落地应用。