如何无神论工程提高在 AWS 上运行

改进 Polygon 节点存储延迟的无偏工程方案

主要要点

本文介绍了 Agnostic 如何通过结合 AWS 的实例存储和弹性块存储(EBS)优点,成功降低 Polygon节点的存储延迟,实现了高效、低延迟的读取操作。该方法不仅提升了服务性能,还确保了数据的持久性和易于备份。


由 Arnaud Briche 和 Nikolay Vlasov 于2024年5月22日发布在[高级 (300)](https://aws.amazon.com/blogs/database/category/learning- levels/advanced-300/ "查看所有高级 (300) 的文章"), ,

这是一篇由 Agnostic 创始人 Arnaud Briche 合作撰写的客座文章。

在 中,我们的使命是使结构良好的区块链数据更加开放。我们致力于提供快速、用户友好、坚固的查询方法,以处理智能合约区块链生成的大量数据。出于性能原因,最初我们选择了无机房服务提供商,但随后决定利用 AWS 的全球覆盖来扩展业务并提高服务的可靠性。

我们支持的一个区块链网络是 ,该网络具有高吞吐量要求,需要在块存储卷上实现低毫秒级的读取操作延迟。这对于区块链客户端 保持网络最新状态至关重要。当我们测试 (Amazon EBS) 的 时,我们发现尾延迟无法始终满足预期目标,而 EBS 在成本效率方面对我们的设置存在挑战。尾延迟是指系统中少数响应时间较长的部分,与其他响应时间相比的持续时间。

在这篇文章中,我们展示了我们创造的另一种解决方案,以实现所需的超低延迟读取操作。

解决方案概述

我们实施的解决方案结合了 (Amazon EC2)

和通用持久 EBS gp3 块存储的优势。我们选择使用实例存储卷作为一种具有成本效益的低延迟存储选项。这些卷位于物理连接到主机计算机的磁盘上,可以在 中使用临时的低延迟块级存储。以下图表说明了整体解决方案的工作原理。

![低延迟存储设置的解决方案示意图](https://d2908q01vomqb2.cloudfront.net/887309d048beef83ad3eabf2a79a64a389ab1c9f/2024/05/08/Solution- 删除)

该解决方案包含以下关键组件:

  1. 我们选择了配备多个 SSD 驱动的 EC2 实例,并将其结合成一个使用 RAID 0 配置的 。
  2. 为了防止潜在的数据丢失,我们附加了一个 EBS gp3 卷,其总大小与新 RAID 0 数组相同,并设置了 配置的数据镜像。
  3. 我们还使 EBS gp3 卷在 RAID 1 配置中以写为主,确保读取操作由更快的 RAID 0 实例存储卷组合提供。

设置完 RAID 数组后,我们安装和配置了 ,以利用其内置的 进一步优化空间消耗。

此外,我们还创建了一个 模板,附带用户数据脚本,以简化部署和配置。要在您的 AWS 账户中尝试类似我们的预配置实例,可以使用以下堆栈:

请务必检查所有配置参数,并选择 我认可 AWS CloudFormation 可能会创建具有自定义名称的 IAM 资源 s

请注意,此模板将部署免费层以外的资源,并会产生额外费用。您可以根据以下部分讨论的基础设施考虑事项来 。

解决方案深入研究

我们选择了 实例模型,配备了两个每个大小为 7500 GB 的 NVMe SSD 实例存储卷。然后我们附加了一个 14000 GiB 的 EBS gp3卷,以匹配实例存储卷的总大小。为简单起见,我们还使用了 Ubuntu Linux 20.04 版本。然后我们通过以下步骤完成了设置:

  1. 配置实例存储卷的 RAID 0 数组:

bash mdadm --verbose --create /dev/md/0 --level=0 --raid-devices=2 /dev/nvme2n1 /dev/nvme3n1

  1. 配置 RAID 1 数组,将组合的实例存储卷与附加的 EBS 卷连接,设置为写为主:

bash mdadm --create --verbose --assume-clean --force /dev/md/1 --level=1 --name=1 --raid-devices=2 /dev/md/0 --write-mostly /dev/nvme1n1

  1. 在 Ubuntu Linux 20.04 上安装 OpenZFS 文件系统:

bash apt -yqq install zfsutils-linux

  1. 配置OpenZFS文件系统: ```bash # 为了确保 ZFS 能正确识别硬件块大小,我们通常将其显式设置为 4KiB(并将最大卷大小限制为 16 TiB)在 ZPOOL 创建时。 zpool create -o ashift=12 data /dev/md/1

检查我们新建的 zfs pool 状态 zpool status data

启用压缩 zfs set compression=lz4 data

默认 ZFS 的 recordsize 为 128K 并不适合我们的工作负载(区块链节点)。因此,我们将其设置为更小的值。 zfs setrecordsize=16K data

访问时间跟踪通常对我们的工作负载没有用处并且可能造成大量无意义的 IO,所以我们禁用它。 zfs set atime=off data

将扩展属性从隐藏子目录移动到系统属性上 zfs set xattr=sa data ```

新数据卷将挂载到文件系统的 /data 目录下,我们将继续 .

如果您使用我们的 CloudFormation 模板创建实例,则用户数据脚本会自动为您执行上述步骤。

部署完成后,您可以使用 连接到您的 EC2 实例,这是 的一个功能。更多细节,请参阅 。

您可以使用以下命令检查存储配置。

  1. 检查新的 /data 卷的大小:

bash df -h | grep /data

  1. 获取所有 RAID 配置的摘要:

bash mdadm --detail --scan --verbose

  1. 检查所有块设备的配置:

bash lsblk

  1. 获取新 /data 卷的 OpenZFS 配置:

bash zfs get all data

然后,您可以继续 。确保在 中配置 /data,并在与新 EC2 实例相关的安全组中 ,以 。

清理

要删除使用上述“ Launch Stack ”链接部署的所有资源, ,选择您部署的堆栈(默认名称为“ single-bc-node-with-RAID10 ”),然后在右上角点击“ Delete ”按钮。

删除)

结论

在这篇文章中,我们分享了 Agnostic如何成功创建一个与裸金属设置相匹配的节点,同时大幅提升耐用性,能够高效备份和复制数据,快速提供节点。这一成就体现了顶级性能与无与伦比的灵活性相结合的例子。了解更多关于 的信息,如果您有进一步的问题,请在 上提出,记得标注“区块链”。如果您在所提供的 CloudFormation 模板中遇到问题,请在 中打开一个问题。


关于作者

删除)ArnaudBriche 是 Agnostic 的创始人。他的专长是大规模构建和管理分布式系统。

![Nikolay删除)NikolayVlasov 是 AWS 全球专业解决方案架构师组织的高级解决方案架构师,专注于与区块链相关的工作负载。他帮助客户在 AWS上运行支持去中心化网络和账本技术的工作负载。

评论加载中...

Leave a Reply

Required fields are marked *