mt logoMyToken
Market cap:
0%
FGI:
0%
Cryptocurrencies:--
Exchanges --
ETH Gas:--
EN
USD
APP
Ap Store QR Code

Scan Download

QuarkChain技术揭秘: 分片技术在区块链应用中的挑战 | 第二话

Collect
Share

在现有的可扩展性解决方案中,分片技术可能是实现水平扩容的最常用解决方案。分片的基本思想是将全局系统状态分成多个子状态,即分片,每个分片相对独立地处理交易。因此通过合理的分片技术设计,系统的容量(吞吐量)能够随着分片数目和处理器(节点)数量的增加而增加。换句话说,系统的容量和分片数目、处理器数量成线性比例。

QuarkChain技术揭秘: 分片技术在区块链应用中的挑战 | 第二话

在使用分片技术前,我们需要先回答一些关键问题。

什么是全局系统状态以及如何更改系统状态?

例如,在分布式key-value(KV)存储系统(例如,BigTable,Cassandra)中,系统状态是从任意字节(键)到任意字节(值)的映射。改变系统状态的操作是:创建,读取,更新,和删除(CRUD)。

另一个例子是分布式附加文件系统(例如,谷歌文件系统(GFS),Hadoop分布式文件系统(HDFS))。 在这类系统中,系统状态是一组目录和文件,相对应的操作分为两组:对于目录有创建,删除,列出操作;而对于文件有打开,追加,读取和关闭操作。

如何将系统状态分片,以便正确有效地进行所有操作?

分片方式对系统性能起关键作用。如果分片不当,系统性能会大打折扣。我们在设计分片时有几个关键问题要考虑:

1.分区状态的选择:系统状态中的哪些部分需要被分片?为了简化系统模型,我们应该只分区系统状态中满足 1)数据量过大而不能在单个节点上运行; 或者 2)需要非常高速的操作。而对于那些大小足够小,操作不是很频繁,可以在单个机器中运行的部分,我们就不需要对系统状态的这个部分进行分片。比如,早期版本的 GFS / HDFS 仅对文件中的数据进行分区,而它们不对目录进行分区,因为目录的数据量与文件中的数据量相比相对较小,并且目录操作也不是很频繁。

2.确保操作(交易)语义:如何将系统状态分区以满足操作语义?一个关键语义是原子性。如果一个原子操作需要改变多个分片中的状态,则这些操作需要分片之间的适当协同(例如,通过分布式锁定),这样可能会付出很大的代价。因此,此类操作不仅很难从分片技术中受益, 还可能导致性能下降。为避免此类问题,大多数现代分片系统在一个分片中支持原子批处理操作,并把复杂的多分片原子性问题交给上层应用程序来处理。

3.负载/大小的均衡:如何对系统状态分区以满足 a)所有分片的负载在统计上均匀分布; 并且b)分区系统状态的大小在统计上也均匀地分布在所有分片上。实现这两点是线性扩容的关键条件 -- 只有在保证添加更多分片后,负载和状态大小能均匀分布,我们才可以通过添加更多节点来线性增加系统容量来处理新分片。这里请注意,如果状态系统分布与用户操作模式高度相关,而用户操作模式随时间发生很大变化,则可能导致临时的或永久的负载失衡

4.重新分片:重新分片包括如何添加更多分片,以及新节点如何能够为新分片提供服务。添加更多分片后,新分片将包含旧分片中的某些状态,也就是说这些状态将被迁移到新节点。重新分片期间的迁移可能需要一些时间并暂停现有的服务。此外,我们还需要确保支持的操作语义在重新设置之前和之后是相同的。

在QuarkChain回答上述问题前,让我们先介绍一下系统模型以及现有区块链所面对的分片技术难点。系统状态和现有区块链上交易让我们来考虑一个类似于以太坊的基于账户的区块链模型,其中系统状态其实就是从地址到其帐户数据的key-value映射。这里有两种类型的地址:

1.用户地址;

2.智能合约地址;

账户数据里包括:

1.余额;

2.一次性随机数;

3.代码;

4.存储;

其中代码和存储两项在用户地址里置空。

根据CRUD操作的各种组合可以支持两种类型的交易:

1.在两个用户地址之间转移交易,用来更新发件人的两个地址的余额和发送者的随机数;

2.智能合约的交易,包括:

1)更新发送者的随机数;

2)更新多个用户地址里的余额;

3)通过call和delegatecall更新智能合约的余额和存储;

4)创建多用户地址及相应的账户数据;

5)创建多个智能合约。

区块链分片面临的的挑战

与现有的扩容解决方案相比,值得庆幸的是区块链的系统状态与分布式KV存储(如BigTable和Cassandra)完全相同; 然而,不幸的是交易语义比简单的CRUD操作复杂得多 -- 智能合约交易可能会对系统状态的所有key-value映射执行任何CRUD操作。如果将状态划分为不同的子状态(分片),确保跨多个分片的操作的原子性将非常困难(大多数时候是不可能的)。因此如何划分区块链的账簿是区块链分片面临的根本问题。

此外,去中心化的系统将面临更多的挑战,因为我们需要建立适当的共识,以安全的方式处理所有分片中的交易。新的分片共识开启了新的攻击可能性,如果不对攻击模型进行全面深入分析,分片可能很容易受到损害,从而导致整个网络很容易被破坏。

除了分区和共识的挑战之外,分片的另一个常见问题是分片之间的互操作性,即跨片交易。这里的关键点是可用性,就是用户应该能够访问所有资源,包括所有分片上的智能合约和其他用户的帐户。如何开发高效安全的跨片交易是区块链最终实现扩容的一个关键问题。

在以后的文章中,我们将继续讨论QuarkChain解决区块链分片挑战的方法。此外,我们将对QuarkChain与现有的集中式系统(如Google的BigTable)进行比较,并说明其与集中式系统的异同。

文章声明:本文为火星财经专栏作者作品,版权归作者所有,不代表火星财经观点。


Disclaimer: The copyright of this article belongs to the original author and does not represent MyToken(www.mytokencap.com)Opinions and positions; please contact us if you have questions about content
Related Reading