介绍 flood:一个用于基准测试 EVM 节点的负载测试工具

  • Paradigm
  • 发布于 2023-06-07 14:31
  • 阅读 38

本文介绍了一款名为 flood 的负载测试工具,旨在优化区块链节点的性能分析,尤其是其 RPC 接口。文章详细阐述了负载测试的概念及其重要性,工具的实现原理以及如何使用 flood 进行多种类型的负载测试,将对高性能区块链基础设施的开发产生积极影响。

Outline

介绍

负载测试是开发具有弹性和高性能数据系统的重要步骤。然而,负载测试在加密货币基础设施的开发中并未得到广泛应用。我们很高兴能够通过引入 flood 来填补这一空白,这是一款专门设计用于 RPC 端点性能分析的基准工具。

我们最初构建 flood 是为了优化 Reth 并了解其在不同负载下的延迟和吞吐量 权衡。然而,我们相信 flood 在优化多种加密基础设施性能方面具有重要的实用性。

我们很高兴将 flood 以 Apache/MIT 许可证开源,作为免费、开源软件发布。其代码和安装说明可以在 Github 存储库 中找到。可以通过命令行或作为 Python 库使用 flood。此外,还有 floodDocker 镜像,方便集成到 CI/CD 和其他类型的管道中。

让我们深入了解。

什么是负载测试,为什么它很重要?

负载测试 是指测量系统性能特征如何受到不同类型工作负载影响的过程。这个方法背后的主要见解是,当系统处于持续增加的负载状态时,吞吐量、延迟和错误率等性能指标通常会下降。因此,观察系统在不同控制负载下的表现可以揭示系统的瓶颈、故障模式及最终性能能力的洞察

通过负载测试获得的信息可以以多种方式加以利用。当系统处于积极开发中时,负载测试会高亮显示系统中最需要改善的瓶颈。当比较两个系统时,负载测试能够揭示哪个系统的性能更好或更可靠。作为此情况的特殊案例,负载测试可比较单一系统的两种不同硬件或软件配置。在每种情况下,负载测试使得开发高度优化的系统成为可能。

如何对区块链节点进行负载测试?

我们的重点是 RPC,这是通常用于从区块链节点提取数据的通信协议。

目前,测量 RPC 性能的最常见方法并不是负载测试,而是 延迟测试:你向一个 RPC 节点发送请求,测量获得响应所需的时间。可以在 各种 网站 上找到多种 RPC 提供者的延迟测试。不幸的是,这种类型的测试对节点性能提供的视图十分有限,因为它几乎无法反映系统在负载下的表现(有关详细信息,请参见我们关于测量 延迟和吞吐量 的帖子)。

在区块链的上下文中,工作负载可以以两种重要方式变化。经典变数是大小。每秒10000个请求的负载会对系统施加比每秒100个请求更大的压力。另一个负载变量是 RPC 方法。每种从区块链节点提取的数据都有不同的 RPC 方法。例如,块与交易与日志与追踪。每种 RPC 方法对系统施加的负载类型不同。有些 RPC 方法受限于存储 IO,而有些则受限于 CPU。

什么是 flood?

考虑到这些原则,我们开发了一款名为 flood 的负载测试工具。flood 通过 1) 采用负载测试而非延迟测试,并且 2) 扩大测试范围至所有相关的 RPC 方法,从而提供了前所未有的 RPC 端点性能特征视图。

flood 由三个基本组件构成:

  1. 调用生成引擎:flood 生成大规模的参数化 RPC 调用集,以随机采样的方式,使用与不同类型区块链工作负载相似的分布。flood 利用 Paradigm 数据门户 数据集以确保全面覆盖区块链历史。
  2. 负载测试引擎:flood 然后协调 Vegeta(由 @tsenart 用 Go 语言编写的一款高性能负载测试工具),将这些调用用于对 RPC 端点的负载测试。
  3. 报告引擎:在执行测试后,flood 用各种图表、表格和报告总结测试结果。这些总结易于集成到脚本和数据管道中。

每个组件都是高度可配置的,使 flood 能够覆盖广泛的测试场景和环境。

flood 可以做什么?

flood 的典型操作中,用户指定他们希望测试的 RPC 方法以及一组 RPC 端点。例如,你可能想测试 eth_getLogs 在两个版本的 Reth 上的性能。flood 将针对这些 RPC 端点运行不同控制的负载。例如,它可能会在每秒 1000、2000、4000 和 8000 个请求下运行 eth_getLogsflood 然后将展示表格和图表,总结性能指标如何随负载变化。输出结果可能如下所示:

有关真实 flood 报告的示例,请查看 这里

性能指标在负载下的降低特性提供了一系列丰富的洞察,揭示系统的瓶颈和最终性能能力。有关如何解释和利用负载测试数据的详细信息,我们建议查阅 Cesarini 的 Designing for Scalability with Erlang/OTP 第 15 章。

除了这种简单的操作模式,flood 还提供了高级功能以适应各种类型的高级用户:

  • flood 可以使用不同的负载测试计划,包括: "压力测试"(逐渐增加负载),"峰值测试"(大幅突然负载后跟随小负载),和 "浸泡测试"(长时间运行负载)。
  • flood 可以协调负载测试在每个 RPC 节点上以本地模式运行,从而消除网络瓶颈造成的噪声。
  • flood 具有 "相等" 测试模式,检查每个 RPC 端点是否返回相同的响应。

你为什么要构建 flood?

在 Paradigm,我们正在开发一种新的节点实现,名为 Reth,其性能是主要目标之一。我们开发 flood 是为了详细表征 Reth 的性能。我们已经使用 flood 发现了 Reth 在各种工作负载和系统配置下出现的多个性能瓶颈。这些瓶颈已经得到了解决。通过 flood,我们建立了紧密的反馈循环,使 Reth 开发者对任何代码库更改对端对端系统性能的影响有了更高的可见性。

除了 Reth,我们相信 flood 还将有助于解决许多与 RPC 节点相关的未解之谜:

  • 在运行节点时,哪些硬件规范最重要?存储 IO、RAM 速度、RAM 容量和 CPU 速度的相对重要性如何?RAID 是否值得?
  • 每个第三方 RPC 提供者对每种 RPC 方法的有效速率限制是什么?
  • 哪种节点客户端对不同类型的工作负载提供最佳性能?

结论

在这篇文章中,我们介绍了 flood,一种负载测试工具,能够提供对区块链节点性能特征的前所未有的视图。尽管我们最初构建 flood 是为了优化 Reth 的开发,但我们相信它将为其他类型的高性能加密基础设施的开发带来巨大的突破。我们期待看到其他人如何使用 flood 来构建自己的高性能和可靠系统。

如果你有兴趣使用 flood,或者想要为 flood 作出贡献,请查看 Github 上的问题跟踪器,或者联系 storm@paradigm.xyzgeorgios@paradigm.xyz

感谢 Achal Srinivasan 提供图形设计.

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

0 条评论

请先 登录 后评论
Paradigm
Paradigm
Paradigm 是一家研究驱动型技术投资公司 https://www.paradigm.xyz/