TDengine压力测试之RESTful

Posted DBA大董

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TDengine压力测试之RESTful相关的知识,希望对你有一定的参考价值。


生产系统上线前都会进行压力测试,能承受多少并发,在大并发下性能如何,都是上线前必须要了解的。
TDengine 作为时序数据库(Time Series Database),提供了 RESTFul 接口,可以使用 HTTP 协议进行操作。这个接口在生产环境中性能如何,是否能够满足高并发要求,都需要压测后才能知道。
在此介绍 2 款实用的压测工具 ab 和 JMeter,这两者都是 Apache 开发的。ab 只能提供汇总后的结果,JMeter 可以提供每个请求的相应时间。因此 JMeter 更加复杂,占用资源更多。

1.ab

ab 是 Apachebench 命令的缩写,ab 是 Apache 自带的压力测试工具。ab 可以对不同类型服务器进行压力测试。比如nginx、tomcat、IIS等。

ab 能够创建多个并发线程,占用的资源非常少。

官网:​​https://httpd.apache.org/docs/2.4/programs/ab.html​

1.1.安装

ab 是 httpd 工具包里面的一个小工具,需要先安装 http 工具包。

#CentOS
yum install httpd-tools

#Ubuntu
apt install

1.2.测试

1.2.1.参数解读

-n requests
#执行的请求个数。

-c concurrency
#一次产生的请求个数。

-H custom-header
#对请求附加额外的头信息。

-p POST-file
#需要POST的数据的文件.

-k
#启用HTTP KeepAlive功能,在一个HTTP会话中执行多个请求。

1.2.2.测试命令

并发10个线程,共发送10000个请求,采用Keepalive方式。

#query.sql
select last_row(*) from db01.meters ;
ab -n 10000 -c 10 -k -H "Authorization: Basic cm9vdDp0YW9zZGF0YQ=="

1.2.3.测试结果:

Concurrency Level:      10
Time taken for tests: 46.756 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 3030000 bytes
Total body sent: 2140000
html transferred: 2000000 bytes
Requests per second: 213.88 [#/sec] (mean)
Time per request: 46.756 [ms] (mean)
Time per request: 4.676 [ms] (mean, across all concurrent requests)
Transfer rate: 63.29 [Kbytes/sec] received
44.70 kb/s sent
107.98 kb/s total

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 14.2 0 1002
Processing: 10 46 12.8 45 198
Waiting: 9 41 11.9 40 175
Total: 10 47 19.0 45 1048

Percentage of the requests served within a certain time (ms)
50% 45
66% 50
75% 53
80% 55
90% 61
95% 67
98% 77
99% 88
100% 1048 (longest request)

2.JMeter

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。

JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。

官网:​​https://jmeter.apache.org/usermanual/index.html​

2.1.安装

JMete 是基于 Java 开发的,使用前需求先安装 Java。

下载地址:https://jmeter.apache.org/download_jmeter.cgi

解压缩所安装包,执行运行可执行文件即可

tar xvzf apache-jmeter-5.4.3.tar.gz
cd apache-jmeter-5.4.3
sh

2.2.测试

2.2.1.创建测试任务

按照以下顺序创建一个测试任务

├── 1 测试计划
├── 2 线程组
│ └── 7 HTTP请求
├── 3 HTTP信息头管理
├── 4 汇总报告
├── 5 聚合报告
└── 6

TDengine压力测试之RESTful_压力测试

2.2.2.参数设置

线程组

线程数:10

Ramp-Up时间(秒):1

循环测试:1000

TDengine压力测试之RESTful_apache_02

HTTP信息头管理器

名称:Authorization

值:Basic cm9vdDp0YW9zZGF0YQ==

TDengine压力测试之RESTful_restful_03

HTTP请求

服务器或IP:192.168.0.11
端口:6041
HTTP请求:POST
路径:/rest/sql
消息体数据:select last_row(*) from db01.meters;

TDengine压力测试之RESTful_tdengine_04

2.2.3.测试结果

点击工具栏运行按钮即可开始测试

TDengine压力测试之RESTful_tdengine_05


测试结果可在汇总报告和聚合报告中查看。

TDengine压力测试之RESTful_tdengine_06


TDengine压力测试之RESTful_时序数据库_07

2.3 注意

执行 jemeter.sh 后就会提示

================================================================================
Dont use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================

真实的生产环境不要使用 GUI 进行测试,GUI 只是用来调试测试文件的。
如果要进行压力测试,需要使用命令行模式(CLI Mode)。

TDengine压力测试之RESTful_apache_08

3.ab 与 JMeter 对比

引用 ​​jmeter和ab的对比​​ 的结论

  • JMeter是一次完整的请求和返回;ab 只是发出去请求,并不对返回做处理。
  • JMeter可以提供更加详细的统计结果数据;ab 的结果为用数学方式统计平均值。
  • JMeter支持可变参数和 CSV 数据集的输入,能设定更加负责的测试样例;ab 不需要写配置文件。
  • JMeter不支持精确时间的压测;ab 支持。
  • JMeter GUI 比较重,并且统计了很多结果数据,比 ab 耗时耗费资源多;ab 属于轻量级。


以上是关于TDengine压力测试之RESTful的主要内容,如果未能解决你的问题,请参考以下文章

TDengine restful API 在不同的 SQL 中产生意外的结果

Redis+Restful 构造序列号和压力测试后续

如何使用 JMeter 调用你的 Restful Web Service?进行简单的压力测试和自动化测试

性能测试解惑之并发压力

测试韩国超热门压力测试,一张图表现你的处境!

用InfluxDB开源的性能测试工具对比InfluxDB和TDengine