TL;DR
Manticore Load Emulator 是一个开源基准测试工具,帮助您验证和优化您的 Manticore Search 部署。无论您是计划生产部署、调试性能问题,还是微调配置,这个工具都提供全面的测试能力,配备实时监控和详细分析。它兼具简单性和强大功能,支持从基本查询测试到复杂的多进程工作负载模拟。
Introduction
这里有一个有趣的事实:当人们问 Manticore 是否能处理他们的工作负载时,我们将其视为一种挑战。当性能对我们来说如此重要时,您需要做好准备。进入 Manticore Load Emulator——一个旨在让 Manticore(和您的硬件)接受考验的开源工具。
无论您是在想 Manticore 是否能处理您的独特设置,还是只是想从中榨取每一滴性能,这个工具都能满足您的需求。
您可以在 GitHub 上获取它,或通过从我们的仓库安装作为一个包(Manticore 版本 > 6.3.8)。
Why We Built It
我们经常被问到:“Manticore 能处理我的工作负载吗?”好吧,简短的回答通常是“可以”。但我们不想让您仅仅相信我们的说法,因此我们构建了一个工具,让您可以自己测试。Manticore Load Emulator 旨在提供透明性和赋权——而且,推动您的硬件到极限也是非常有趣的。
Use Cases
1. 新部署的性能验证
在 Manticore Search 上线之前,使用 Load Emulator 模拟您预期的工作负载。这确保您的基础设施在峰值性能时得到适当的扩展和配置。
2. 调试和故障排除
通过运行受控测试来识别瓶颈或性能下降。例如,分析特定查询模式或大型数据集如何影响查询延迟和吞吐量。
3. 现有设置的优化
微调配置,例如批量大小、线程数或查询缓存,以实现最佳性能。使用超参数测试功能来自动化比较。
4. 评估基础设施变更
计划升级您的硬件、调整数据库分片或迁移到不同的云提供商?Load Emulator 允许您基准测试并比较不同设置的性能。
5. 可扩展性的压力测试
模拟极端工作负载,以评估您的部署在高流量下的扩展能力。这对于准备产品发布或季节性高峰等事件尤其有用。
Key Features
以下是 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>随机真或假<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

示例 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

好的,现在我们在 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

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

示例 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"

我们可以看到,随着加载更多数据,读取性能下降。
示例 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"

我们可以看到,在当前架构和表中 100 万个文档的情况下,吞吐量可以达到每秒 9858 次选择,平均延迟为 4.3 毫秒,p95 延迟为 6.5 毫秒。
难道不是很棒吗,您可以在短短几分钟内得出这样的结论?
结论
Manticore 负载模拟器不仅仅是一个基准测试工具——它是您确保搜索部署最佳性能的合作伙伴。无论您是在运行小型概念验证还是扩展以处理数百万个查询,该工具都提供了您需要的洞察,以便对基础设施和配置做出明智的决策。
请记住:最佳性能测试是迭代的。先从小开始,收集数据,进行调整,然后再测试。使用 Manticore 负载模拟器,您拥有构建和验证高性能搜索解决方案所需的所有工具。
