分片技术的由来
分片又称Sharding,它首先出现在数据库领域。起初,所有的数据都放在一台服务器上,如下图所示:
图片.png
虽然不同的用户访问的是不同的数据,但是只有一台服务器提供服务,随着用户访问的不断增加,即使这台服务器是超人,在客官的不断所求下,也会累趴下。
那么人们想到最容易的改进办法就是:将不同数据放在不同的服务器上,如下图所示:
image此时,访问不同的数据就会由不同的服务器提供服务,从而突破单节点数据服务器I/O能力限制,系统处理能力得到线性增长。
以上就是分片,它就是这么简单!!!
只不过此时是对数据进行分类,将不同类的数据放在不同的服务器,提供并行处理能力,这类分片的学术名称叫做“垂直分片”。
既然有垂直,那可能也有“水平分片”。
可以进一步想象,随着访问同一类数据的请求越来越多,单台服务器依然会成为瓶颈,那么可以进一步将数据分为多个部分,分布到多台服务器,这就是水平分片。
简而言之,分而治之就是分片的核心思想
例如1只大蚂蚁想要搬送一块大蛋糕可能一辈子都无法完成,但是如果有一百万只小蚂蚁并行工作,那在很短时间之后,就可以躺在蚁窝,吃着美味。
区块链扩展性问题
以上我们了解了分片技术在数据库领域的用法。我们不要忘了主题,我们是要讲区块链!!!那么分片和区块链有什么关系呢?
那不得不来唠唠现在区块链的处理能力(在这里主要指公有链),一句话,那就是比牛还慢!!!我们熟悉的比特币、以太坊每秒只能处理小于10笔交易。
这又有什么问题呢?
最近火热的以太坊虚拟猫游戏CryptoKitties以及6月中旬的Status的爱西欧,短时间内产生大量的交易,使以太网络极度拥塞,造成普通用户无法正常使用。
这就是说,现在区块链的吞吐能力还不能满足应用的需求。相比之下,像Paypal、VISA、MasterCard等这样的工业界产品的支付能力在1200-50000 Tx/s之间,这之间的巨大鸿沟不是简简单单靠调整参数就能解决(很多altCoin就是这么干的)。
区块链最核心的内容就是分布式共识算法。
那么什么是共识?
一句话讲,就是你干你的,我干我的,我们怎样才能保证我俩干的结果是一样的。接下来我们来讲讲专业知识。
目前在分布式领域主要存在两类共识,以比特币为代表的中本聪共识和经典拜占庭共识(BFT)算法。
如下图所示,中本聪共识虽然能够扩展到成千上万节点,但是其吞吐还不如一台笔记本电脑;
图片.png
拜占庭共识每秒能够处理上万笔交易,但是其性能随着节点的增加呈指数降低。
而我们想要的共识算法,是随着节点的增加,其处理能力也相应增加,就如数据库领域,当我们增加服务器后,就能响应更多的请求。
那这样一种理想的共识算法是否存在?答案是让人失望的,到目前为止,还没有任何一种成熟的共识算法能够实现上述需求。
但是,从历史经验出发,将分片技术用于区块链,也许会将这个伟大的梦想变为现实。
分片技术如何带来质的提升
目前的公有链大部分都是单链结构,所有矿工都在相互竞争去延伸下一个区块,如下图所示:
由于产生区块的平均时间是固定的,例如比特币平均每10分钟产生一个区块,随着越来越多的矿工加入挖矿行列,挖抗难度得到提升,以保证每10分钟产生一个区块。
这就造成,即使投入更多的计算机,整个系统的处理能力并没有得到提升。
将分片技术引入区块链,此时,系统处理如下图所示:
图片.png首先,将所有矿工节点进行随机分配,形成多个分片,并挑选一个Boss分片。各个分片可以并行处理不相关的交易,并产生子区块,然后将子区块发往Boss分片。
Boss分片负责处理子区块,检查是否有效,最终产生区块n+1。从而,随着投入节点的增加,可以划分出更多的分片,也就能处理更多的交易。
以上介绍的就是采用分片技术的ZILLQA项目的核心思想
此外,在以太坊发展规划中,将在2020年前开发以太坊2.0,其中将采用分片技术提升区块链的处理能力,但与ZILLQA项目有本质区别。
V神介绍到“笼统简单地来说,你可以把分片看成是,设置一个区块链,在其中有一百个各自不同的宇宙,每一个宇宙都是一个独立的账户空间。
所以你可以在某个宇宙中拥有一个账户,也可以在数个宇宙中持有一个合约,当然,你还可以在数个宇宙间发起一笔交易,而这笔交易仅仅会对涉及到的这几个宇宙产生影响。
但是,这一百个宇宙不仅仅是割裂分散的区块链,它们在内部相互联系并组成系统。特别值得注意的是,它们彼此间形成共识。
所以如果要打破其中一个宇宙,你就必须打破这一个整体”。
网友评论