墨客来了(三):分片您好,分叉,再见!-鲜说故事
在前面的《墨客来了(二):分层您好,混层,再见!》一文中,笔者提出逻辑子链在物理母链上的实现,必须通过分片(sharding)技术来建构。
那么,这个分片技术又是何方神圣呢?
分片是指将网络中的所有节点分成若干个子群体,这些子群体之间通过预定义的方法执行原来所有节点都要处理的工作,从而达到提高系统处理能力的结果。
如果没有分片,整个网络的处理速度,其实依赖于单一节点的处理速度。而越来越多的节点加入进来家有仙镯 ,并不是节点多力量大,而是节点多,导致网络拥堵,速度其实更慢了,撸猫游戏堵死以太坊就是活生生的例子。而采取了分片李江雁,平台参与的节点越多,表明可以分出的片越多,而片越多,整个网络同时处理智能合约的数量就越多,那么你的处理能力越强,速度越快了。
但分片有它特定的要求:
1.分片的子群大小有限制,一方面,希望能够分更多的片,但是,为了维持系统的容错性,分片的节点数有个下限,一般不能低于50个。
2.分片的共识机制有限制,由于节点数目较少叶家妤,POW可能不适合,一般采用POS,或PBFT等。
3.分片之间的必须保证数据的一致性。
以太坊目前的分片策略是在一个周期内,将所有的节点分成若干份,然后将合约分配给每个分片,当周期结束时,会重新分片。这里会有几个问题:
1.需要一个全局的存储器来保存这个分片信息。
2.周期较长,如果节点数动态变化比较大,分片的信息很容易过时。
3.周期结束时,当前分片处理的合约必须重新分片到新的分片,造成不必要的切换资源操作。
4.分片的共识方式与底层的共识方式一样,这样分片的功能必须等到主网切换到POS才能采用。
而墨客独创分层架构,支持逻辑分片,可以化单一区块链而成为多种区块链如火如荼造句,而且这些逻辑子链可以要求不同的共识算法食人旅馆。
具体地说,墨客分片采用合约驱动的模式,一个合约对应于一个系统分片。合同创建时自动随机选择相应数量的节点,形成一个分片来处理这个合约,这个合约的生存周期都在这个分片中实现,从创建,天之翼到合约结束。当然,如果中间需要,可以重新洗牌来选择新的分片节点。
墨客分片节点SCS具有以下特点:
1.每个分片有自己的存储,就是分片的区块链。
2.SCS可以有不同于底层的共识方式,比如POS,PBFT。
3.SCS的区块生成时间可以与底层不一致,比如可以采用快速的区块周期来进一步提高处理速度。
4.SCS周期性地向底层Flush结果,从而获得阶段性的全局一致性。
墨客实现分片之后,智能合约的执行尽可能都在SCS端执行,底层验证节点V-node只处理支付交易和必要的全局合约调用。如果能够有100个分片的话,那么合约处理的速度将提高到100倍或更多,同时,底层将大部分处理支付交易,这部分逻辑比较简单,正适用大算力支撑的POW挖矿机制来保证系统的安全性拳王之王。
除了近乎无限提高系统的TPS之外,分片更为重要的作用则是保证了墨客主链永远不会分叉。没有对比就没有伤害!看看比特币和以太坊的分叉伤害有多深,就明白墨客分片不分叉有多么重要。
分叉链指是是基于同一个软件的金民国,增减一些功能后单独部署的一个区块链。区块链分叉又分为软分叉和硬分叉,软分叉尚可消除,而硬分叉一旦形成,基于区块链的社区便会分裂,对整个区块链生态造成无可弥补的伤害宫雍。
比特币和以太坊因为设计上的缺陷孙桃香,都先后进行了硬分叉。比特币分叉后的子孙众多,知名的就有五六个,以太坊在2017年8月1日也分成了ETH和ETC。分叉的影响极为恶劣:“以太坊硬分叉事件对比特币可能会造成一种非常负面的影响,因为其开创了先例,提供了一种选项来处理失败的事情,此举重置了区块链,向着相反的方向发展。这就使所有的区块链系统的永久性受到质疑。”
一句话总结:分叉会让区块链失去公信力!而墨客创造性分层分片架构子链的设计,让墨客公链从一开始就从根源上消除了分叉的风险。
平层设计的区块链不能实现逻辑分片,一旦被部署和进入生产模式,很难在功能上进行添加/修改/删除。这样的修改要么是软分叉或者硬分叉,处理分叉需要巨大的努力和承受由此带来的经济后果。
而墨客子链是在主链平台上通过逻辑分片派生出来的区块链,它们不能单独存在,必须通过主链提供的基础设施才能运行。墨客子链可以定义自己的共识方式和执行墨客,而且一旦部署,就能免费获得主链的全部用户。
可以说,张韶轩墨客子链既无分裂的实力,又无分裂的动机,从根源上杜绝了分叉的可能性。这大概算是“本来无一物,何处惹尘埃?”对“时时勤拂拭,莫使有尘埃。”的降维打击吧。
分产分片子链的出现,是一个革命性的变革。整个墨客生态好像一个开发用的GitHub,那么子链绝代智将,可以变成一个个功能库,让子链之间可以互相分享。而各种提供服务的子链,因为服务的不同,必须有角色细分,比如提供ipfs的子链,重点在存储,提供zksnarks的子链,重点在运算速度······
那么,新的问题又来了,怎么可能用同样配置的scs来做不同的子链支持基础呢?怎么可以用同样的共识算法,同样的区块速度等等,来做不同的事情呢?敬请期待下篇《墨客来了(四):异步调用您好,同步调用,再见!》
讲好中国故事,传播华夏文明!更多精彩内容,欢迎关注“鲜说故事”