继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

『学概念找员外』分片技术(四)

刘员外_
关注TA
已关注
手记 66
粉丝 8381
获赞 109

【本文由“币嗨Bihi内容合伙人计划赞助”】

这个应该是分片技术的最后一篇了吧,所以这一篇是一篇压轴的文章,千万不要错过。这篇我们来说说最最最难、最最最麻烦的 状态分片的复杂性和解决办法。

状态分片

为了让大家能感受到状态分片的复杂性,员外依旧举个栗子来给大家讲解一下。

我们还是使用比特币的账户模型,而且没有智能合约,在一个使用了状态分片的区块链中,一个特定的碎片只会保存一部分的交易状态。假如现在有两个碎片、还有天宇和死柯侠两个用户,那么一个碎片将只会保留一个用户的余额。

现在死柯侠创建了一笔交易,他会转给天宇10个YWC,那么这笔交易会由第一个碎片来处理,如果这笔交易被验证成功了,那么天宇账户中的余额信息就一定是会变化的,也就是说给天宇记账的那个碎片里面的信息会发生对应的同步。看出来了吗?分别为天宇和死柯侠记账的这两个碎片之间是需要通信和状态交换的,不然负责天宇的那个碎片是无法得知天宇账户中增加了 10 个 YWC 的。这显然没有解决了什么问题,碎片之间的互相通信是一笔巨大的开销,跟比特币系统是一样的原理。

那么接下来只能在考虑减少跨碎片的问题上面想办法了,那就是限制用户跨链交易,限制了死柯侠和天宇之间的直接交易。如果这样的话,天宇和死柯侠都必须在对方的碎片中创建一个属于各自的账户,但是新的问题又来了,这会限制平台的可用性。

700

image.png

状态分片的下一个挑战是数据的可用性。如果有一种突发事件,导致一些特定的碎片的数据丢失。由于碎片上并没有整个系统的全部交易数据状态,所以这势必会影响到依赖于上面那些丢失碎片的交易,这些交易将不会被验证通过。

这种问题的唯一解决办法就是碎片上的数据存档或备份了,这样就能帮助系统的故障维护以及恢复那些不可用的数据了。但是这样就会使得节点必须存储该系统的整个状态了,还有可能引发一些中心化的风险。

感受到状态分片的难度了吗?其实不仅仅是状态分片,就是在其他的分片方式中,我们都需要同时考虑到这两点的情况:

  • 确保碎片有很强的抗攻击性;

  • 网络必须接受新的节点并以随机的方式将这些分配给不同的碎片,也就是说网络必须在一段时间内进行节点的重新分配。

然而在状态分片的机制下,重新分配节点是非常困难的。因为每一个碎片都只保留了状态中的一部分,所以在下一次重新分配节点的时候,会有在数据同步的过程中出现导致整个系统失效的问题,就无法保证信息的连贯性了。所以就必须对网络进行逐步调整,以确保每个碎片在所有节点被清空前仍有足够多的旧节点。

类似地,一旦一个新节点加入了一个碎片中,系统就必须确保该节点有足够的时间与碎片状态进行同步;否则,传入节点将完全拒绝每一笔交易。

总结

分片技术信息量巨大,到今天写了四篇了,是时候做个总结了。分片技术无疑是区块链中解决扩容问题的一个绝佳方案,他同时还可以保证了去中心化和透明度的情况。但是分片技术,尤其是状态分片,在设计和实现层面都是困难重重的,挑战还有很多,这才只是个开始。




打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP