Elasticsearch 性能测试工具 Loadgen 之 001——部署及应用详解

在现代软件开发中,性能测试是确保应用程序稳定性和响应速度的关键环节。

今天,我们就来深入了解一款国产化功能强大的 Elasticsearch 负载测试工具——INFINI Loadgen。

40a84b36b203cf27bcab9f53527d95d7.jpeg

一、INFINI Loadgen 简介

Github地址:https://github.com/infinilabs/loadgen

Release 版本下载地址:https://release.infinilabs.com/loadgen/stable/

INFINI Loadgen 是一款专为 Elasticsearch 、EasySearch 设计的轻量级性能测试工具,旨在对 Easysearch 、Elasticsearch 进行压力测试。其主要功能包括支持多种请求类型、动态变量注册、以及对请求返回结果的断言等。——官方描述

二、安装 INFINI Loadgen

INFINI Loadgen的安装方式非常简单,为用户提供了多种选择,方便不同需求的用户进行安装。

2.1 通过脚本安装

使用以下命令,即可一键完成安装:

curl -sSL http://get.infini.cloud | bash -s -- -p loadgen

这条命令的作用是,通过curl工具从指定的URL下载安装脚本,并使用bash执行该脚本,同时传递参数-p loadgen,指定安装的软件包为loadgen

2.2 手动下载安装

如果不想使用脚本安装,也可以从官方提供的下载地址获取安装包:http://release.infinilabs.com/loadgen/。下载完成后,通过以下命令进行安装:

➜  /tmp mkdir loadgen
➜  /tmp curl -sSL http://get.infini.cloud | bash -s -- -p loadgen -d /tmp/loadgen

或者直接本地下载,拷贝到云服务器也可以。上述命令首先在/tmp目录下创建了一个名为loadgen的文件夹,然后通过curlbash命令,将安装包下载并解压到该文件夹中。在安装过程中,我们可以看到有趣的字符画和安装进度提示,最后会提示安装完成,表明loadgen已经准备就绪,可以使用了。

安装完成后,进入安装目录,执行可执行文件,即可启动INFINI Loadgen:

cd /tmp/loadgen &&./loadgen-mac-arm64

这里的loadgen-mac-arm64是根据不同系统和架构生成的可执行文件名,在实际使用中,需要根据自己的环境进行调整。

f8713511f8169fff4f5d916b264b847a.png

温馨提示:下文中的 loadgen 本质上就是现在的 loadgen-mac-arm64 重命名后的结果。

7a8d0c7d57a10b7611564eb37f76ce41.png

三、Loadgen 核心配置参数解读

站在咱们开发者角度理解,如果对 Elasticsearch 或 EasySearch 做性能测试,必须先得配置上 ES 的地址、用户名和密码,否则一切无从谈起。因此,如下的配置 loadgen.yml 非常重要。

1f11041b7176b447551104374c9513a8.png

3.1 宏观看配置文件

我第一眼看有点懵逼,感觉配置都好复杂。实际拆分成树形结构“定睛一看”,实际并不复杂。

loadgen.yml

├── env
│   ├── ES_USERNAME
│   ├── ES_PASSWORD
│   └── ES_ENDPOINT
├── runner
│   ├── no_warm
│   ├── valid_status_codes_during_warmup
│   ├── log_requests
│   ├── log_status_codes
│   ├── assert_invalid
│   ├── assert_error
│   ├── reset_context
│   ├── default_endpoint
│   └── default_basic_auth
├── variables
│   ├── id
│   ├── id64
│   ├── uuid
│   ├── now_local
│   ├── now_utc
│   ├── now_utc_lite
│   ├── now_unix
│   ├── now_with_format
│   ├── suffix
│   ├── bool
│   ├── list
│   ├── id_list
│   └── str_list
└── requests
├── request 1 (POST /_bulk)
│   ├── method
│   ├── runtime_variables
│   ├── runtime_body_line_variables
│   ├── url
│   └── body
└── request 2 (POST /medcl/_search)
├── method
├── runtime_variables
├── runtime_body_line_variables
├── basic_auth
├── url
└── body

3.2 配置文件参数详解(微观看)

在使用Loadgen进行测试之前,我们需要了解其配置文件的结构和用法。Loadgen的配置文件主要由envrunnervariablesrequests等部分组成。

2ca9e3256004fdc72f3c76163903dc2c.png

示例原因,没有涵盖全部变量。

  1. env:用于定义环境变量, 例如:

env:ES_USERNAME: elasticES_PASSWORD: elastic

这里定义了ES_USERNAMEES_PASSWORD两个环境变量,分别赋值为elastic。咱们在使用的时候要换成自己 Elasticsearch 集群的账号和密码。这些环境变量可以在后续的请求中通过$[[env.ENV_KEY]]的方式进行引用,例如在请求的认证信息中使用。

  1. runner:用于配置测试运行的相关参数,如:

runner:# total_rounds: 1no_warm: falselog_requests: falseassert_invalid: falseassert_error: false

其中,

  • total_rounds用于指定测试的总轮数,默认情况下注释掉,表示不使用该设置,Loadgen将在指定的持续时间内循环执行测试。

  • no_warm表示是否跳过预热阶段,默认为false,即不跳过。预热阶段可以让系统在正式测试前达到稳定状态,使测试结果更准确。

  • log_requests用于控制是否记录每个请求的详细信息。

  • assert_invalidassert_error分别用于设置当断言无效或请求出错时的处理方式。

  1. variables:用于定义各种类型的变量,这些变量可以在请求中使用,为请求提供动态参数。Loadgen支持多种变量类型,每种类型都有其特定的用途和配置方式。

  • file:从文件加载变量,例如:

- name: iptype: filepath: test/ip.txt

这个配置表示定义了一个名为ip的变量,类型为file,其值从test/ip.txt文件中读取。在测试过程中,每次使用该变量时,会随机从文件中读取一行作为变量值。- sequence:自动递增的数值变量,例如:

- name: idtype: sequence

定义了一个名为id的变量,类型为sequence,它会在测试过程中自动递增,从默认的最小值开始,每次增加1。- uuid:生成UUID类型的变量,例如:

- name: uuidtype: uuid

定义了一个名为uuid的变量,每次使用时会生成一个唯一的UUID值。- now_localnow_utcnow_unix:分别表示获取当前本地时间、UTC时间和Unix时间戳,例如:

- name: now_localtype: now_local
- name: now_utctype: now_utc
- name: now_unixtype: now_unix

这些变量在需要记录时间信息的测试场景中非常有用。4. requests:用于定义要发送的请求,这是配置文件的核心部分。Loadgen支持固定参数请求和基于模板的变量参数请求。- 固定参数请求示例

- request:method: GETbasic_auth:username: elasticpassword: passurl: http://localhost:9200/medcl/_search

注意:medcl 是个索引名,实际使用环节,咱们需要自己创建一下。比如:put medcl 方式就可以创建。这个请求配置表示使用GET方法,通过基本认证(用户名elastic,密码pass),向http://localhost:9200/medcl/_search发送请求。- 基于变量参数的请求示例

- request:method: GETbasic_auth:username: $[[env.ES_USERNAME]]password: $[[env.ES_PASSWORD]]url: http://localhost:9200/medcl/_search?q=name:$[[user]]

在这个请求中,使用了之前定义的环境变量ES_USERNAMEES_PASSWORD进行认证,并且在请求URL中使用了变量user,使得每次请求的查询参数name的值都可以动态变化。最后,咱们通过截图说明一下,我改动的配置有哪些,以便大家进行参考:

15cb8c83430ccc98d04ce90e9cd1af96.png

3728ac31b633d450e6f1485265a6430a.png

除了上面标红之外,其他配置都没有动。这样我们可以达到 Loadgen 从0到1效果,先用起来再说。

四、Loadgen 基准测试,先用起来再说!

4.1 基准测试

基准测试:运行Loadgen进行基准测试非常简单,只需在命令行中执行以下命令:

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

这条命令中,-d 30表示测试持续时间为30秒,-c 100表示并发线程数为100,-compress表示对请求进行gzip压缩。测试过程中,Loadgen会先执行一次所有请求进行预热,预热结果会输出到终端。

预热完成后,开始正式的基准测试,测试结束后会输出详细的测试结果,包括请求的吞吐量、响应时间分布、流量统计等信息。

86006e314277e49fa4c760bf3a75964e.png

如下图所示,代表配置文件的写入 bulk 写入成功了。因为,最初,我们只是创建了索引名。

606ea000b50a856d5f7712f779bf2e9b.png

4.2 核心指标含义解读

最终指标是我们关注的重点,核心指标解读如下:

1.Requests/sec: 29.43:

  • 含义:表示服务器每秒处理的请求数量,即服务器在测试期间平均每秒能够成功接收并处理的请求数为  29.43 个 。

  • 作用:该指标反映了服务器的处理能力和吞吐量。数值越高,说明服务器在单位时间内能够处理更多的请求,在高并发场景下表现可能更好。

  • 实际业务场景类比举例:对于一个基于 Elasticsearch 的电商网站搜索服务,较高的请求处理速率意味着在促销活动等流量高峰时,能够更快地响应用户的商品搜索和查询请求,从而提升用户体验。

2.Avg Req Time: 339.804597 ms:

  • 含义:指平均每个请求的处理时间,即从服务器接收到请求到返回响应所花费的平均时间为 339.804597ms 毫秒 。

  • 作用:它体现了服务器处理单个请求的效率。这个时间越短,表明服务器处理请求的速度越快,用户等待响应的时间也就越短,体验更好。

  • 实际业务场景类比举例:在一个使用 Elasticsearch 的实时日志分析系统中,较短的平均请求处理时间意味着用户能够更快地获取日志查询结果,从而及时发现和解决问题,提升系统监控的有效性。

3.Transfer/sec: 12.81 KB:

  • 含义:代表服务器每秒的数据传输量,即在测试过程中,服务器每秒传输的数据量平均为 12.81KB 。

  • 作用:该指标反映了服务器与客户端之间的数据交互量,对于评估服务器的网络带宽使用情况和数据传输能力很重要。

  • 实际业务场景类比举例:对于一个基于 Elasticsearch 的数据可视化平台,高的数据传输速率是保证用户能够流畅加载和查看大数据集的关键。如果这个值过低,可能导致数据加载缓慢,从而影响用户体验。

五、小结

通过使用 INFINI Loadgen 进行性能测试,开发者可以有效地评估 Elasticsearch 和 EasySearch 的处理能力和稳定性。该工具不仅支持高并发的请求处理,还能通过灵活的配置选项满足不同的测试需求。安装过程简单,配置文件结构清晰,使得用户能够快速上手并进行基准测试。


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

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

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

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

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

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

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

f69799f97e859f3871c87b5838178a42.png

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

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

elastic6.cn——ElasticStack进阶助手

9ea62954bb0f01b6b1b720b9abe44c10.gif

抢先一步学习进阶干货!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/8383.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python从0到100(八十五):神经网络-使用迁移学习完成猫狗分类

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能…

(1)SpringBoot入门+彩蛋

SpringBoot 官网(中文):Spring Boot 中文文档 Spring Boot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能…

C语言从入门到进阶

视频:https://www.bilibili.com/video/BV1Vm4y1r7jY?spm_id_from333.788.player.switch&vd_sourcec988f28ad9af37435316731758625407&p23 //枚举常量 enum Sex{MALE,FEMALE,SECRET };printf("%d\n", MALE);//0 printf("%d\n", FEMALE…

MacOS安装Docker battery-historian

文章目录 需求安装battery-historian实测配置国内源相关文章 需求 分析Android电池耗电情况、唤醒、doze状态等都要用battery-historian, 在 MacOS 上安装 battery-historian,可以使用 Docker 进行安装runcare/battery-historian:latest。装完不需要做任…

公式与函数的应用

一 相邻表格相乘 1 也可以复制 打印标题

DeepSeek学术写作测评第二弹:数据分析、图表解读,效果怎么样?

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 针对最近全球热议的DeepSeek开源大模型,娜姐昨天分析了关于论文润色、中译英的详细效果测评: DeepSeek学术写作测评第一弹:论文润色&#…

MongoDB平替数据库对比

背景 项目一直是与实时在线监测相关,特点数据量大,读写操作大,所以选用的是MongoDB。但按趋势来讲,需要有一款国产数据库可替代,实现信创要求。选型对比如下 1. IoTDB 这款是由清华大学主导的开源时序数据库&#x…

动手学深度学习-卷积神经网络-3填充和步幅

目录 填充 步幅 小结 在上一节的例子(下图) 中,输入的高度和宽度都为3,卷积核的高度和宽度都为2,生成的输出表征的维数为22。 正如我们在 上一节中所概括的那样,假设输入形状为nhnw,卷积核形…

简易CPU设计入门:控制总线的剩余信号(二)

项目代码下载 请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 CSDN文章:下载本项目代码 上述链接为本项目…

【MySQL】 数据类型

欢迎拜访:雾里看山-CSDN博客 本篇主题:【MySQL】 数据类型 发布时间:2025.1.27 隶属专栏:MySQL 目录 数据类型分类数值类型tinyint类型数值越界测试结果说明 bit类型基本语法使用注意事项 小数类型float语法使用注意事项 decimal语…

深度剖析C++17中的std::optional:处理可能缺失值的利器

文章目录 一、基本概念与设计理念二、构建与初始化(一)默认构造(二)值初始化(三)使用std::make_optional(四)使用std::nullopt 三、访问值(一)value()&#x…

云计算架构学习之LNMP架构部署、架构拆分、负载均衡-会话保持

一.LNMP架构部署 1.1. LNMP服务搭建 1.磁盘信息 2.内存 3.负载信息 4.Nginx你们公司都用来干嘛 5.文件句柄(文件描述符 打开文件最大数量) 6.你处理过系统中的漏洞吗 SSH漏洞 7.你写过什么shell脚本 8.监控通过什么告警 zabbix 具体监控哪些内容 9.mysql redis查询 你好H…

[BSidesCF 2020]Had a bad day1

题目 这里有传参 文件包含使用伪协议读取flag 先读取index.php查看 /index.php?categoryphp://filter/readconvert.base64-encode/resourceindex 解码 index.php源码 <?php$file $_GET[category];if(isset($file)){if( strpos( $file, "woofers" ) ! false …

12 款开源OCR发 PDF 识别框架

2024 年 12 款开源文档解析框架的选型对比评测&#xff1a;PDF解析、OCR识别功能解读、应用场景分析及优缺点比较 这是该系列的第二篇文章&#xff0c;聚焦于智能文档处理&#xff08;特别是 PDF 解析&#xff09;。无论是在模型预训练的数据收集阶段&#xff0c;还是基于 RAG…

银行卡三要素验证接口:方便快捷地实现银行卡核验功能

银行卡三要素验证API&#xff1a;防止欺诈交易的有力武器 随着互联网的发展&#xff0c;电子支付方式也越来越普及。在支付过程中&#xff0c;银行卡是最常用的支付工具之一。然而&#xff0c;在一些支付场景中&#xff0c;需要对用户的银行卡信息进行验证&#xff0c;以确保支…

Lite.Ai.ToolKit - 一个轻量级的 C++ 工具包

&#x1f6e0;**Lite.Ai.ToolKit**&#xff1a;一个轻量级的 C 工具包&#xff0c;包含 100 个很棒的 AI 模型&#xff0c;例如对象检测、人脸检测、人脸识别、分割、遮罩等。请参阅 Model Zoo 和 ONNX Hub、MNN Hub、TNN Hub、NCNN Hub。 3700 Stars 711 Forks 0 Issues 6 贡献…

node.js 07.npm下包慢的问题与nrm的使用

一.npm下包慢 因为npm i 默认从npm官网服务器进行下包,但是npm官网服务器是海外服务器所以响应很慢. 于是我们通过npm下包的时候通常用淘宝镜像进行下包,下面是切换到淘宝镜像地址下包的操作. 二.nrm的使用 nrm是一个管理切换npm下包地址的工具,可以快速切换下包的地址. 安…

读书笔记--分布式服务架构对比及优势

本篇是在上一篇的基础上&#xff0c;主要对共享服务平台建设所依赖的分布式服务架构进行学习&#xff0c;主要记录和思考如下&#xff0c;供大家学习参考。随着企业各业务数字化转型工作的推进&#xff0c;之前在传统的单一系统&#xff08;或单体应用&#xff09;模式中&#…

基于ADS的电感和变压器的建模过程

1. 电感二端口建模 对于固定尺寸单圈电感&#xff0c;从0.5G-200GHz的仿真&#xff0c;并提取其模型 如果想要在50GHz前把模型建准&#xff0c;仿真可能要建到200G&#xff0c;因为需要高频的数据&#xff0c;频率越高信息也越多。首先要调用文件由于数据是存在一个文件夹里面的…

使用Maxscript定义纹理贴图的方法

在3ds Max中,MaxScript 是一种用于插件编写和自动化任务的强大工具。通过MaxScript,你可以创建和操作对象、材质、灯光等等。要为材质分配纹理贴图,你可以按照以下方法来编写脚本。直接代码: myBmp = bitmaptexture filename:"D:\map001.tga" meditmaterials[1]…