⚠️ 此页面为自动翻译,翻译可能不完美。
blog-post

Manticore Load Emulator

TL;DR

Manticore Load Emulator 是一个开源的基准测试工具,可帮助您验证和优化 Manticore Search 部署。无论您是在规划生产部署、调试性能问题,还是微调配置,此工具都提供全面的测试功能,包括实时监控和详细分析。它既注重简单性又具备强大功能,支持从基本查询测试到复杂多进程工作负载模拟的一切需求。

引言

这里有一个有趣的事实:当人们问 Manticore 是否能处理他们的工作负载时,我们将其视为一种挑战。而当性能对我们来说至关重要时,您需要做好准备。这就是 Manticore Load Emulator —— 一个开源工具,旨在对 Manticore(以及您的硬件)进行全面测试。

无论您是想知道 Manticore 是否能处理您的独特设置,还是只是想榨干它的每一分性能,这个工具都能为您提供帮助。

您可以在 GitHub 上获取它,或者从我们的仓库安装为软件包(Manticore 版本 > 6.3.8)。

为什么我们要开发它

我们经常被问到:“Manticore 能处理我的工作负载吗?”简短的回答通常是“可以”。但与其让我们来信服您,我们开发了这个工具,让您自己进行测试。Manticore Load Emulator 关注透明度和赋权,而且将您的硬件推向极限的过程非常有趣。

使用场景

1. 新部署的性能验证

在使用 Manticore Search 上线之前,使用 Load Emulator 模拟预期的工作负载。这确保您的基础设施已正确扩展并配置为实现最佳性能。

2. 调试和故障排除

通过运行受控测试来识别瓶颈或性能下降。例如,分析特定查询模式或大数据集如何影响查询延迟和吞吐量。

3. 现有设置的优化

微调配置,如批量大小、线程数或查询缓存,以实现最佳性能。使用超参数测试功能来自动化比较。

4. 评估基础设施变更

计划升级硬件、调整数据库分片或迁移到不同的云提供商?Load Emulator 允许您在不同设置之间进行基准测试和性能比较。

5. 可扩展性压力测试

模拟极端工作负载以评估部署在高流量下的扩展能力。这对于准备产品发布或季节性高峰尤其有用。

核心功能

这就是为什么 Manticore Load Emulator 是基准测试和测试的出色工具:

1. SQL 驱动的简洁性

该工具利用 Manticore 的 SQL 支持,使其易于模拟各种工作负载。编写负载或查询场景就像编写 SQL 命令一样简单。

2. 高并发支持

使用多个线程和进程模拟真实世界的高负载场景。如果您的服务器能处理,这个工具会将其推向极限。

3. 自定义查询生成

生成动态查询,支持灵活的模式,从随机文本到精确的整数、浮点数或数组范围:

  • value 使用的确切值
  • <increment> 从 1 开始的自动递增值
  • <increment/1000> 从 1000 开始的自动递增值
  • <string/3/10> 随机字符串,长度在 3 到 10 之间
  • <text/20/100> 20 到 100 个单词的随机文本
  • <text/{/path/to/file}/10/100> 使用文件中的单词生成的随机文本,10 到 100 个单词
  • <int/1/100> 1 到 100 之间的随机整数
  • <float/1/1000> 1 到 1000 之间的随机浮点数
  • <boolean> 随机的 true 或 false
  • <array/2/10/100/1000> 2-10 个元素的数组,值在 100-1000 之间
  • <array_float/256/512/0/1> 256-512 个随机浮点数的数组,值在 0 到 1 之间

4. 批量加载

通过可配置的批量大小一次性高效加载数百万条记录。

5. 实时监控与分析

通过全面的指标跟踪测试性能,包括:

  • 进度和吞吐量(QPS)
  • 详细的延迟百分位数
  • 识别性能瓶颈
  • 实时状态更新

6. 灵活的配置

命令行参数允许您调整工作负载的每个方面。需要模拟多种类型的查询?使用 --together 选项并行运行不同的工作负载。

7. 超参数测试

在单次运行中通过逗号分隔的值比较线程数或批量大小。例如:

--threads=1,2,4,8 --batch-size=100,1000,10000

8. 静默模式用于分析

--quiet 模式下,工具输出以分号分隔的结果,便于直接复制到 Google Sheets 或 Excel 中进行可视化。

9. 多进程支持

需要测试分片设置或同时运行多个工作负载?这个强大的标志允许您在同一个测试会话中并行运行多个测试配置。与按顺序运行测试(可能耗时)相比,--together 将您的测试运行合并为一次高效执行。

例如,您可以:

  • 同时测试数据库的多个分片
  • 对不同数据库版本运行相同的测试套件
  • 在各种配置设置下验证您的应用程序
  • 比较不同设置之间的性能指标

只需在测试命令后附加 --together,并指定多个测试配置。工具将处理并行执行,同时保持结果的组织性和易于比较性。

10. 优雅关闭

如果需要在测试中途停止(或意外按下 Ctrl+C),该工具可确保干净的终止,而不会留下混乱。

11. 两种延迟跟踪模式

  • 基于直方图:内存效率高,适合观察整体趋势
  • 精确模式:用于精确的延迟百分位数,因为有时精度是关键

入门指南

以下是一个快速示例,帮助您入门:

示例 1:简单插入

以每批10K的批次插入100万整数:

manticore-load \
  --drop \
  --init="create table t(a int)" \
  --load="insert into t values(0, <int/1/1000000>)" \
  --batch-size=10000 \
  --total=1000000

example 1

示例 2:模拟并发

7-8% 的 CPU 负载和每秒160K文档似乎对您的工作负载来说太低?通过增加线程数来提高负载:

manticore-load \
  --drop \
  --init="create table t(a int)" \
  --load="insert into t values(0, <int/1/1000000>)" \
  --batch-size=10000 \
  --threads=16 \
  --total=10000000

example 2

好的,现在我们在25% CPU负载下达到了665K。看起来我们还能从实例中榨取更多性能,但这需要同时写入多个表。让我们这样做:

示例 3:分片工作负载

通过同时将数据加载到多个表中,测试分片环境:

manticore-load --quiet \
  --drop \
  --init="create table t(a int)" \
  --load="insert into t values(0, <int/1/1000000>)" \
  --batch-size=10000 \
  --threads=8 \
  --total=5000000 \
  --together \
  --drop \
  --init="create table t2(a int)" \
  --load="insert into t2 values(0, <int/1/1000000>)" \
  --batch-size=10000 \
  --threads=8 \
  --total=5000000 \
  --together \
  --drop \
  --init="create table t3(a int)" \
  --load="insert into t3 values(0, <int/1/1000000>)" \
  --batch-size=10000 \
  --threads=8 \
  --total=5000000 \
  --together \
  --drop \
  --init="create table t4(a int)" \
  --load="insert into t4 values(0, <int/1/1000000>)" \
  --batch-size=10000 \
  --threads=8 \
  --total=5000000

example 3

数据太多且您不需要进度?通过添加 --quiet 标志,工具将只输出最终结果:

example 3-2

示例 4:结合写入和读取

之前的示例专注于加载数据。如果您想测试写入/读取性能呢?让我们使用比仅整数更现实的工作负载。

manticore-load \
  --total=1000000 \
  --batch-size=10000 \
  --drop \
  --init="create table products(name text, price float, stock int)" \
  --load="insert into products(name, price, stock) values('<text/3/10>', <float/1/100>, <int/1/100>)" \
  --together \
  --total=10000 \
  --load="select * from products where match('<text/2/5>') and price < 10"

example 4

我们可以看到,随着更多数据被加载,读取性能如何下降。

示例 5:超参数测试

让我们测试不同线程数如何影响性能:

manticore-load \
  --total=10000 \
  --quiet \
  --threads=1,4,8,16,32,64 \
  --load="select * from products where match('<text/2/5>') and price < 10"

example 5

我们可以看到,使用当前模式和表中100万文档,吞吐量可达到每秒9858次选择,平均延迟4.3ms,p95延迟6.5ms。

难道不是在几分钟内就能得出这样的结论吗?

结论

Manticore Load Emulator 不仅仅是一个基准测试工具——它是确保您的搜索部署达到最佳性能的合作伙伴。无论您是在运行小型概念验证还是扩展以处理数百万个查询,此工具都能为您提供所需的见解,以做出有关基础设施和配置的明智决策。

记住:最佳性能测试是迭代的。从小规模开始,收集数据,进行调整,然后再次测试。使用 Manticore Load Emulator,您拥有构建和验证高性能搜索解决方案所需的所有工具。

安装Manticore Search

安装Manticore Search