本文主要是介绍分片技术简介与Trias分片MVP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
区块链发展的关键因素有两个,一个是数据的隐私和确权,一个就是区块链的扩容,即区块链性能的提升。区块链数据的隐私和确权我们前面的文章已经提到过,今天我们主要讨论的是区块链的扩容方法。
区块链为什么要扩容?我们先来看看比特币和以太坊的吞吐量,比特币是7TPS左右,以太坊是20TPS左右,但是中心化的VISA的TPS大概在8000左右。所以如果一个支付系统放在区块链上,区块链的性能将远远不能满足支付系统的吞吐量要求,这就像一个高速公路收费站,我们只开了一个收费口,而且这个收费口的工作效率也很低,那么就会有大量的汽车被堵在收费口外,这会造成高速公路也就是网络的拥堵,一笔交易可能要等几天才能完成。但是如果我们开了10个收费口甚至更多,那交通状况将大大得到缓解直到畅通无阻。如果一个收费口可以比喻为一个分链的话,设置“多个”或“多种”收费口的技术来使区块链的吞吐量增加的技术就是分片技术。
分片技术最早源自数据库的扩容技术,是一种基于数据库分成若干片段的传统概念扩容技术,它将数据库分割成多个碎片并将这些碎片放置在不同的服务器上,在这些不同服务器上的数据就能同时并行处理,在同样的时间环境下,处理速度成倍增加。这种分片技术应用于区块链上就是将网络中的节点分成不同的分片,也可以说分在不同的分链上,各分片可以并行处理不同交易,以提高网络并发量,也就是我们常说的TPS。区块链分片的特点是具有动态扩容性,随着节点数量的增加,区块链的性能也随之增加。将网络分割为碎片会使得更多的交易同时被处理和验证。但是它仅仅可以并行处理相互之间未建立连接的交易,对于之间有关联的交易,分片对性能的提升将会受到影响。所以分片技术应用于区块链有其独有的优势和挑战,现在应用于区块链的分片技术主要有几种:网络分片、交易分片以及状态分片等。
网络分片
网络分片就是开发一种机制来确定哪些节点可以按照安全的方式保留在哪些碎片中。这样能避免那些控制大量特定碎片的人所发起的攻击。通常随机抽样的方式可以防止恶意节点过度填充单个碎片。
交易分片
交易分片就是通过用户交易的输入输出数据并根据一种算法(如哈希值)来确定交易数据的分片。但是这种方法不能有效避免双花攻击,除非数据跨碎片进行通信,但这又可能会破坏交易分片的目的——提升交易吞吐量。但根据交易者的地址信息来分片的话就可有效检测到双花攻击,而不需要进行任何跨碎片的通信。
状态分片
状态分片就是通过把区块链数据分成不同状态的数据来分片的一种技术。在状态分片的情况下,重新分配节点是非常棘手的。一个特定的碎片只会保留一部分状态,如果在一次重新调整网络的过程中,在同步完成前可能会出现导致整个系统失效的问题。
但是Trias探索了分片技术的新方向,通过把交易分片和状态分片技术组合,弥补了各自技术的缺点,使分片技术可以更好地应用于区块链。
Trias分片MVP在真实区块链基础上,加入主链用来协调处理各分片交易,另外又在此基础上加入负载均衡和数据库,分别用来分发交易请求和存储账号数据。
具体的架构请参照下图:
LoadBalance
LoadBalance是一个负载均衡层,所有的交易请求通过LoadBalance进行处理,当前分为两类请求,一类是查询请求,LoadBalance会直接请求Storage查询并返回,还有一类是交易请求,LoadBalance请求storage获取交易涉及的Chain,将请求转发给Root_Chain处理。当前LoadBalance通过Openresty实现。
Storage
Storage做为存储层保存交易账号数据,包括账号名,Chain ID,余额等,只有LoadBalance会直接与Storage交互,涉及到查询和更新。当前Storage通过etcd实现。
Root_Chain
Root_Chain作为一个主链在跨链交易时会生成交易凭据,各Child_Chain依据主链的凭据进行操作。当前版本Child_Chain要接收到Root_Chain请求就会操作,还未实现Root_Chain和Child_Chain的校验。当前Root_Chain通过python实现,开启一个rpc,api接受LoadBalance请求,判断是否跨链,产生交易生成凭据并将结果返回给LoadBalance。
Child_Chain
Child_Chain是独立的区块链,有单独的节点和数据,通过接受Root_Chain请求处理交易。当前通过Tendermint实现共识,Tendermint内account作为内建的app提供交易场景。
这篇关于分片技术简介与Trias分片MVP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!