云断-索拉纳

Cloudbreak – Solana的水平缩放状态架构

Solana是世界上性能最好的免证区块链。在Solana测试网络的当前迭代中,当使用GPU运行时,由200个不同的物理节点组成的网络支持每秒超过50,000个事务的持续吞吐量。要实现这一目标,需要实施一些优化和应用新的技术,实现网络容量的突破,标志着区块链开发进入了一个新阶段。
有7项关键创新使得Solana网络成为可能:
工作量证明(POH):达成共识前的时序;
Tower BFT:PBFT 的 PoH 优化版本;
Turbine :区块传播协议;
Gulf Stream :快速事务转发协议;
Sealevel:并行智能契约运行时;
Cloudbreak :水平缩放的帐户数据库;以及
复制器 (Replicators) :分布式账本存储
在这篇博客文章中,我们将讨论Cloudbreak—— Solana的水平伸缩状态架构。
概述:内存、SSD和线程
在没有分片的情况下缩放区块链时,仅缩放计算是不够的。用于跟踪帐户的内存很快成为大小和访问速度方面的瓶颈。例如:一般认为,许多现代连锁店使用的本地数据库引擎LevelDB在一台机器上不能支持超过5,000个TPS。这是因为虚拟机无法通过数据库抽象利用并发读写访问帐户状态。
一个简单的解决方案是在RAM中维持全局状态。然而,期望消费级机器拥有足够的RAM来存储全局状态是不合理的。下一个选项是使用SSD。虽然SSD将每个字节的成本降低了30倍或更多,但它们比RAM慢1000倍。下面是最新的三星SSD的数据表,这是市场上最快的SSD之一。
三星SSD的数据表
单次交易需要读取2个帐户并将写入1个账户。帐户密钥是加密的公钥,完全是随机的,没有实际的数据位置。一个用户的钱包将有许多帐户地址,每个地址的位与任何其他地址完全无关。由于帐户之间没有位置关系,我们不可能将它们放在内存中,这样它们就可能彼此很接近。
通过每秒最多15,000个惟一读取,简单单线程的账户数据库实现方式使用单个SSD将支持每秒至多7,500个交易。现代SSD支持32个并发线程,因此可以支持每秒37万次读取,或者大约每秒185,000个交易。
Cloudbreak
Solana的设计指导原则是设计软件,使硬件不受影响,使硬件100%的利用。
组织帐户数据库,以便在32个线程之间实现并发读写是一项挑战。像LevelDB这样的普通开源数据库会造成瓶颈,因为它们没有针对区块链设置中的这个特定挑战进行优化。Solana没有使用传统的数据库来解决这些问题。相反,我们使用一些操作系统中用到的机制。
首先,我们利用内存映射文件。内存映射文件是将字节映射到进程的虚拟地址空间的文件。一旦一个文件被映射,它的行为就像任何其他内存一样。内核可能会或不会在RAM中缓存一些数据,但是物理内存的数量受到磁盘大小的限制,而不是RAM。读写显然仍然受到磁盘性能的限制。
第二个重要的设计考虑是顺序操作比随机操作快得多。这不仅适用于SSD,而且适用于整个虚拟内存堆栈。CPU非常擅长预取按顺序访问的内存,而操作系统非常擅长处理顺序页面错误。为了利用这种行为,我们将账户数据结构大致分解如下:
1.账户和分支的索引存储在RAM中。
2.帐户存储在内存映射文件中,大小可达4MB。
3.每个内存映射只存储来自一个建议的分支的帐户。

  1. MAP图随机分布在尽可能多的SSD上。
  2. 使用的是“写时复制”语义。
  3. 写入被附加到同一个分支的随机内存映射中。
  4. 索引在每次写入完成后更新。
    由于帐户更新是写时复制的,并且附加到随机SSD中,所以Solana可以从多个SSD的顺序写入和横向扩展中获益,从而实现并发事务的写入操作。读取仍然是随机访问,但是由于任何给定的分支状态更新都分布在许多SSD上,因此读取也会横向扩展。
    Cloudbreak还执行一种垃圾回收。当分支在回滚之后完成时,账户便会完成更新,旧的无效帐户将被作为垃圾回收,内存将被释放。
    这种架构至少还有一个更大的好处:计算任何给定分支的状态更新的Merkle树的根都可以通过跨SSD水平伸缩的顺序读取来完成。这种方法的缺点是失去了数据的通用性。由于这是一个自定义数据结构,使用自定义布局,我们无法使用通用数据库抽象来查询和操作数据。我们必须从头开始建造一切。幸运的是,现在已经完成了。
    基准测试Cloudbreak
    虽然账户数据库位于RAM中,但我们看到吞吐量与RAM访问时间相匹配,同时随可用内核的数量进行伸缩。在有1000万个账户时,该数据库不再适合RAM。然而,我们仍然会看到在单个SSD上每秒的读写性能接近1m。
    了解更多关于Tour de SOL的激励测试网络活动。
    Solana利用Cloudbreak以及工作量证明(POH)、Sealevel和塔式BFT等创新,共同创造了世界上第一个网络扩展的区块链。Solana的测试网络如今是实时的。您可以在https://testnet.solana.com看到它。出于成本考虑,我们只运行少数几个节点。但是,我们已经在许多实例上将它扩展到超过200个物理节点(而不是在共享硬件上),这些节点跨越了AWS、GCE和Azure上的23个数据中心,用于基准测试。
    运行时如今运行正常,开发人员现在就可以在testnow上部署代码。开发人员现在可以在C语言中构建智能合约,同时我们正在积极地开发Rust工具链。Rust将成为Solana 智能合约开发的旗舰语言。Rust工具链作为Solana Javascript SDK的一部分公开可用,我们正在进一步迭代软件开发工具包。
    Solana将很快推出一个公开测试版,鼓励测试者通过Tour de SOL运行节点——类似于Cosmos的“赌注游戏”——这向公众提出了一个挑战,即在测试Solana网络的极限的同时,还要为此获得令牌。