Cloudbreak——Solana的水平扩展状态架构

本文详细介绍了Solana区块链的水平扩展状态架构Cloudbreak,通过利用内存映射文件和SSD的高并发读写能力,Solana实现了高效的账户状态管理,并支持大量并发事务处理。

Cloudbreak — Solana 的水平扩展状态架构

了解使 Solana 成为世界上性能最强的区块链的 8 项关键技术之一

Solana 是世界上性能最强的无许可区块链。在当前版本的 Solana 测试网中,200 个物理独立节点的网络在运行 GPU 时支持持续的每秒超过 50,000 笔交易的吞吐量。要实现这一点,需要实现若干优化和新技术,最终带来网络容量的突破,标志着区块链发展的新阶段。

有 8 项关键创新使 Solana 网络成为可能:

在这篇博客中,我们将讨论 Cloudbreak,Solana 的水平扩展状态架构。

概述:RAM、SSD 和线程

在不进行分片的情况下扩展区块链,仅仅扩展计算是不够的。用于跟踪账户的内存很快就会在大小和访问速度上成为瓶颈。例如:普遍理解是,许多现代区块链使用的本地数据库引擎 LevelDB 在单台机器上无法支持超过大约 5,000 TPS。这是因为虚拟机无法通过数据库抽象来充分利用对账户状态的并发读写访问。

一个简单的解决方案是将全局状态保存在 RAM 中。然而,期望消费级机器拥有足够的 RAM 来存储全局状态是不合理的。下一个选择是使用 SSD。虽然 SSD 的每字节成本降低了 30 倍或更多,但其速度比 RAM 慢 1000 倍。下面是最新三星 SSD 的 数据表,它是市场上最快的 SSD 之一。

一次单一消费的交易需要读取 2 个账户,并写入 1 个账户。账户密钥是加密公钥,完全是随机的且没有真实的数据局部性。用户的钱包将有许多账户地址,每个地址的位数与任何其他地址完全无关。由于账户之间没有局部性,我们无法将它们放置在内存中以使它们彼此靠近。

在最大 15,000 次独特读取每秒的情况下,使用单个 SSD 的天真单线程实现的账户数据库将支持最多 7,500 笔交易每秒。现代 SSD 支持 32 个并发线程,因此可以同时支持 370,000 次读取每秒,或大致 185,000 笔交易每秒。

Cloudbreak

Solana 的设计原则是设计出软件,使其能够充分利用硬件,实现 100% 的利用率。

将账户数据库组织到能让 32 个线程之间并行读写是一个挑战。普通的开源数据库如 LevelDB 会引起瓶颈,因为它们并没有为区块链环境中的这个特定挑战进行优化。Solana 并没有使用传统数据库来解决这些问题。相反,我们利用了一些操作系统中使用的机制。

首先,我们利用内存映射文件。内存映射文件是将其字节映射到进程的虚拟地址空间中的文件。一旦映射了文件,它的表现就和其他内存一样。内核可以将一些或全部内存缓存在 RAM 中,但物理内存的大小由磁盘的大小而不是 RAM 限制。读写操作仍然显然受到磁盘性能的限制。

第二个重要的设计考虑是顺序操作比随机操作要快得多。这不仅适用于 SSD,也适用于整个虚拟内存栈。CPU 擅长预取顺序访问的内存,而操作系统则擅长处理顺序页故障。为了利用这种行为,我们将账户数据结构大致分割如下:

  1. 账户和分叉的索引存储在 RAM 中。
  2. 账户存储在最大 4MB 大小的内存映射文件中。
  3. 每个内存映射只存储来自单个提议分叉的账户。
  4. 映射随机分布在可用的多个 SSD 上。
  5. 使用写时复制语义。
  6. 将写操作追加到同一分叉的随机内存映射中。
  7. 在每次写入完成后更新索引。

由于账户更新是写时复制,并且被追加到随机 SSD,从而使 Solana 受益于顺序写入以及在多个 SSD 上水平扩展写入以进行并发交易。读取仍然是随机访问,但由于任何给定分叉的状态更新分散在多个 SSD 上,所以读取最终也变得水平扩展。

Cloudbreak 还执行一种垃圾回收。随着分叉在回滚之外最终确定,并且账户得到更新,无效的旧账户会被垃圾回收并释放内存。

这种架构还有至少一个很大的好处:计算任何给定分叉状态更新的默克尔根可以通过在 SSD 上进行顺序读取来完成,且该读取是水平扩展的。这种方法的缺点是对数据的通用性较低。由于这是一个自定义的数据结构,具有自定义的布局,我们无法使用通用数据库抽象来查询和操作数据。我们必须从头构建一切。幸运的是,这项工作现在已经完成。

基准测试 Cloudbreak

虽然账户数据库位于 RAM 中,我们可以观察到吞吐量与 RAM 访问时间相匹配,并随着可用内核数量的增加而扩大。至 10m 账户时,数据库不再适合 RAM。然而,我们在单个 SSD 上仍然看到每秒近 1m 的读取或写入性能。

了解有关 Tour de SOL 的更多信息——Solana 的激励测试网事件。

Solana 对 Cloudbreak 的利用,加上历史证明、海平面和 Tower BFT 等创新,结合创造了世界上第一个网络规模的区块链。Solana 测试网今天已上线。你可以在 testnet.solana.com 上查看。出于成本考虑,我们只运行少量节点。然而,我们已在许多实例上启动了超过 200 个物理独立节点(不在共享硬件上),分布在 AWS、GCE 和 Azure 的 23 个数据中心进行基准测试。

运行时今天已在正常运行,开发者可以将代码部署为 testnow。开发者今天可以使用 C 构建智能合约,我们正在积极开发 Rust 工具链。Rust 将成为 Solana 智能合约开发的旗舰语言。Rust 工具链是公开可用的,作为 Solana Javascript SDK的一部分,我们还在进一步迭代软件开发工具包。

Solana 将很快推出一个公共测试版,通过 Tour de SOL 激励验证者运行节点——类似于 Cosmos 的 Game of Stakes——挑战广大公众测试 Solana 网络的极限并因此获得代币。

  • 原文链接: medium.com/solana-labs/c...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
anatolyyakovenko
anatolyyakovenko
江湖只有他的大名,没有他的介绍。