Georgi Petrov
2024年7月31日
ArcticDB 致力于持续改进和严格测试的更新。本文介绍了我们采用的基准测试流程,这个流程对于确保每次变更不仅能无缝集成,还能提升 ArcticDB 的整体性能至关重要。我们将探讨我们的基准测试策略,推动我们做出选择的具体要求,并讨论这些基准测试在 ArcticDB 开发和维护中扮演的角色。
Air Speed Velocity (ASV) 是一款不可或缺的基准测试工具,在 Python 开发者中广泛使用,用于长期维持高性能标准。它被应用于 Numpy、Arrow 和 SciPy 等知名项目。ASV 自动化了对不同库版本进行基准测试的繁琐过程,使开发者能够系统地比较不同更新和发布版本之间的性能指标。在 ArcticDB,我们以两种方式运行 ASV 基准测试
主分支夜间运行:ASV 每晚在主分支上运行基准测试,更新性能图表,持续提供有关我们库效率和速度的见解。
拉取请求按需基准测试:ASV 主动将推送到包含未关闭 PR 的分支上的任何更改与主分支进行基准测试。如果检测到性能下降超过 15%,将触发基准测试失败。这种主动机制确保了性能下降能够被迅速发现和处理,这有助于我们在持续改进和可靠性之间取得平衡。
此外,ASV 允许创建和导出性能图表,我们将其公开托管在ArcticDB 的 GitHub Pages 上。这种设置使开发者和用户能够直观地、实时地了解任何性能变化。
在 ArcticDB 中,我们根据基准测试评估的功能类型进行了分类,确保该流程能评估数据库及其功能的各个方面。这些基准测试的结构如下
基本功能:此类别基准测试读、写、追加和更新等基本操作。我们针对本地存储对这些操作进行基准测试,以确保日常数据库交互的效率和可靠性。
列表功能:此类基准测试侧重于列表操作的性能,这对数据库管理任务至关重要,例如检索符号或浏览数据库中存储的不同版本。
本地查询构建器 (QB):这组基准测试有助于评估查询构建器操作的整体速度和资源管理。
持久化查询构建器:此类别旨在针对 AWS S3 等持久化存储解决方案评估查询构建器,对于测试 ArcticDB 处理大型数据集时的可扩展性和性能至关重要,这在生产环境中很常见。
通过保持清晰全面的基准测试策略,ArcticDB 确保每个组件在不同条件下都能达到最佳性能,从而维护数据库的完整性和性能。
ArcticDB 以其易用性和高性能而著称,但也需要应对不同存储性能的挑战,从低延迟的内存映射文件到高延迟的云存储(如 AWS S3)。云操作涉及额外成本,因此基准测试可能很昂贵。我们必须平衡本地环境和基于云的存储之间的基准测试策略。为了优化我们的方法,我们根据影响不同操作的主要瓶颈对基准测试进行了分类
CPU/内存密集型基准测试:这些测试通常使用 LMDB 在本地运行。这种设置使我们能够在不产生与云存储相关的成本的情况下,测试 ArcticDB 的处理能力和内存使用情况。
I/O 密集型基准测试:这些基准测试侧重于涉及大量输入/输出操作的场景,在使用 AWS S3 等网络存储解决方案时至关重要。这些测试确保 ArcticDB 能够高效处理高数据吞吐量,这在生产环境中是典型场景。
这种区分使我们能够在性能测试和成本管理之间取得平衡。通过有选择地决定何时以及如何部署这些基准测试,我们可以确保 ArcticDB 对用户来说既快速又经济。
使用 ASV 开发的基准测试帮助我们确保对 ArcticDB 的更改不会降低其性能。以下是几个示例
1. 识别和解决性能回退:基准测试在每个拉取请求上运行,这有助于我们防止性能回退进入主分支。但随着时间的推移,我们添加更多基准测试,也可以识别过去引入的性能回退。在一个案例中,我们在一个核心功能——迭代“版本链”并读取旧版本时,检测到了显著的性能回退。ASV 基准测试帮助凸显了这个问题,使我们能够及时解决它。这有助于我们改善用户体验。
2. 验证性能改进:在另一个案例中,我们实现了一个旨在提升性能的修复。使用我们的 ASV 基准测试,我们验证了该更改提高了方法的效率。这不仅证实了修复是有效的,也展示了基准测试的价值。
对 ArcticDB 进行仔细和策略性的基准测试不仅仅是为了保持其性能,更是为了理解和优化数据库与不同存储环境(特别是基于云的解决方案)的交互方式。通过实施平衡的基准测试策略,区分 CPU/内存密集型和 I/O 密集型操作,我们确保 ArcticDB 保持高效且经济。
这种方法使我们能够持续改进技术,进行更改而不降低性能。ArcticDB 演示了性能跟踪和优化如何显著改进软件开发。
最终,从基准测试中获得的洞察指导着我们的开发工作。