在性能测试中,能够灵活地模拟不同的应用场景是至关重要的。

Loadgen 提供了多种高级用法,帮助用户更好地评估系统在不同负载下的表现。

c92a4e1ec5b0bf7276ea99071779527e.jpeg

本文将介绍如何使用 Loadgen 模拟批量摄取、限制客户端负载以及限制总请求数。

一、模拟批量摄取

在实际应用中,系统常常需要处理大量数据的批量摄取操作。Loadgen 可以轻松模拟这一过程,以评估系统在批量处理时的性能。示例配置 以下是一个批量摄取的请求配置示例:

- request:
    method: POST
    basic_auth:
      username: test
      password: testtest
    url: http://localhost:9200/_bulk
    body_repeat_times: 1000
    body: |
     {"index": {"_index": "medcl","_id": "$[[uuid]]"}}
      { "id" : "$[[id]]","field1" : "$[[user]]","ip" : "$[[ip]]","now_local" : "$[[now_local]]","now_unix" : "$[[now_unix]]" }

在这个配置中,我们向 http://localhost:9200/_bulk 发送 POST 请求,并使用 basic_auth 进行认证。

body_repeat_times: 1000 表示请求体中的内容会重复 1000 次,从而模拟批量插入数据的操作。

请求体中的数据使用了之前定义的变量,如 uuid、id、user 等,使每次插入的数据具有一定的随机性。

下面是 kibana 端统计索引文档数截图。特别说明:medcl 是索引名称,需要提前创建索引,否则会报错。

be9daad40f11e6f56feec78b8275739f.png

二、限制客户端负载

为了更好地评估应用程序在固定压力下的性能表现,Loadgen 提供了限制客户端负载的功能。通过设置 -r 参数,可以控制客户端每秒发送的请求数。

以下是一个限制客户端负载的命令示例:

➜  loadgen git:(master) ✗ ./bin/loadgen -d 30 -c 100 -r 100

这条命令表示在 30 秒内,使用 100 个并发线程进行测试,并且限制客户端每秒最多发送 100 个请求。这样可以模拟在高并发且有限制的请求速率下,应用程序的性能表现。

实测结果如下图所示:

fdaf5517781a7cadbf6e86d011b8c328.png

三、限制总请求数

使用 -l 参数可以控制客户端发送的总请求数,这在需要生成固定数量测试数据时非常有用。

以下是一个限制总请求数的命令示例:

./bin/loadgen -config loadgen-gw.yml -d 600 -c 100 -l 50000

这个命令表示使用 loadgen-gw.yml 配置文件,进行 600 秒的测试,并发线程数为 100,同时限制总请求数为 50000。这种方式适合需要生成特定数量数据场景的测试。

实测结果如下图所示:

2f01b79a4dfbbfe9731d1ea4eda0a55b.png

四、执行出错了怎么办?

本质上是 Http 请求,所以状态码是咱们检验的标准。

以下是 HTTP 响应状态码的核心解读,以 Markdown 表格形式呈现:

以下是 HTTP 响应状态码的核心解读,已转换为 Markdown 格式:

状态码 状态码英文名称 中文描述 分类
100 Continue 客户端应继续其请求 信息响应
200 OK 请求成功 成功响应
201 Created 已创建。成功请求并创建了新的资源 成功响应
204 No Content 请求成功,服务器处理成功但未返回内容 成功响应
301 Moved Permanently 永久移动。资源已被永久移动到新URI 重定向
302 Found 临时移动。资源暂时被移动 重定向
304 Not Modified 未修改。资源未被修改 重定向
400 Bad Request 请求包含语法错误,服务器无法理解 客户端错误
401 Unauthorized 认证失败,要求用户身份认证 客户端错误
403 Forbidden 权限受限,服务器拒绝执行请求 客户端错误
404 Not Found 请求的资源不存在 客户端错误
500 Internal Server Error 服务器内部错误 服务器错误
502 Bad Gateway 错误网关,接收到无效响应 服务器错误
503 Service Unavailable 服务不可用,服务器无法处理请求 服务器错误

这些状态码是我们检验 HTTP 请求结果的重要标准,通过理解这些状态码,可以更有效地调试和优化应用程序。分类说明

  • 1xx: 信息响应 - 表示临时响应。

  • 2xx: 成功响应 - 表明请求成功。

  • 3xx: 重定向 - 表示需要进一步的操作以完成请求。

  • 4xx: 客户端错误 - 请求包含语法错误或无法完成请求。

  • 5xx: 服务器错误 - 服务器在处理请求时发生了错误。

还记得咱们之前介绍命令行参数的含义码?出问题可以走调试模式,以便于发现问题所在。如下截图就是参数配置错误导致响应状态码 400、404。

解决方案:加上 -debug 参数,看报错信息,一般精确到配置文件的行号,然后有针对的进行修改即可。

46a0ce552e61dc19c5efe1478741dd4a.png

五、小结

INFINI Loadgen 是一款功能全面、强大且易于使用的性能测试工具,适用于 Elasticsearch 和 EasySearch 等场景。通过简单的安装和灵活配置,我们可以轻松对各种应用程序进行性能测试。

无论是在开发阶段进行单元测试,还是在上线前进行全面性能评估,INFINI Loadgen 都能提供准确、可靠的测试结果,帮助我们发现并解决潜在性能问题,确保应用程序在实际运行中能够稳定、高效地提供服务。

希望本系列文章能帮助大家更好地了解和使用 INFINI Loadgen,让大家在性能测试工作中更加得心应手。如果大家在使用过程中有任何问题或心得,欢迎留言分享。


【实践好文】提升 Elasticsearch 性能的关键优化技巧,50ms提升到1ms!!

提升 Elasticsearch 索引性能 TOP 10 小技巧,你用到几个?

esrally 如何进行简单的自定义性能测试?

JMeter 如何实现 Elasticsearch 8.X 性能测试?

探索 INFINI Console:提升 Elasticsearch 管理效率的新利器

读者留言:有 Elasticsearch 国产化替代品吗?现在国产化不让用 ES 了......

Elasticsearch 国产化替代方案之一 Easysearch 的介绍与部署指南

d30a5b8adbdeee24212c7e5b280df510.png

更短时间更快习得更多干货!

和全球2000+ Elastic 爱好者一起精进!

elastic6.cn——ElasticStack进阶助手

32040350fa599b35257444b8211760e8.gif

抢先一步学习进阶干货!

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐