被测环境:
虚拟机
CPU | 内存 | 带宽 | 版本号 |
4核 | 16G | 1Gbit/s | Ubuntu 4.8.4-2ubuntu1~14.04.3 |
被测程序:
Docker下安装的influxDB 端口8086
压测环境:
虚拟机
CPU | 内存 | 带宽 | 版本号 |
2核 | 8G | 1Gbit/s | Ubuntu 4.8.4-2ubuntu1~14.04.3 |
压测程序:
从github上找的influxdata公司提供的两款测试工具
influx-stress 用于写入测试
influxdb-comparisons用于查询测试
测试场景:
写入测试 | |
工具名称 | influx-stress |
工具github地址 | https://github.com/influxdata/influx-stress |
测试原理 | 该工具是通过go语言的fasthttp库编写的。 1. 会在服务器上创建一个数据库stress 2. 然后创建一个MEASUREMENT(类似关系数据库的表)名为ctr 该表有time,n.some三个字段 3. 不断的向stress数据库的ctr表插入数据,每次插入的数据都包含三个字段。每一条数据称为一个points。 插入数据的方法是通过influxDB的HTTP API 发送请求(POST /write?db=stress) |
测试命令 | influx-stress insert -r 60s --strict --pps 200000 --host http://10.XX.XX.XX:8086 |
测试程序运行结果 | ||
Points Per Second(发起请求) | Write Throughput(points/s) (数据库实际处理结果) |
CPU平均利用率 |
200000 | 199713 | 33% |
300000 | 299280 | 45% |
400000 | 392873 | 62% |
500000 | 491135 | 80% |
600000 | 593542 | 90% |
650000 | 606036 | 93% |
700000 | 613791 | 95% |
测试结论:最大的吞吐量为每秒写入60万条数据。这之后,每秒发送的points再多,吞吐量也不会增加,同时CPU利用率已达90%。
查询测试 | |
工具名称 | influxdb-comparisons |
工具github地址 | https://github.com/influxdata/influxdb-comparisons |
测试原理 | 该工具是通过go语言的fasthttp库编写的。 1. 会在服务器上创建一个数据库benchmark_db 2. 然后创建9个MEASUREMENT :cpu,disk,diskio,kernel,mem,net,nginx,postgresl 每个measurement 有2160行数据。 3. 通过http GET请求"GET /query?db=benchmark_db“查询cpu这张表。 查询语句为:SELECT max(usage_user) from cpu where (hostname = 'host_0') and time >= '2016-01-01T01:16:32Z' and time < '2016-01-01T02:16:32Z' group by time(1m) 可以取出61条数据。 |
测试命令 | ./bulk_query_gen -query-type "1-host-1-hr" | ./query_benchmarker_influxdb -urls http://10.XX.XX.XX:8086 -limit 1000 |
测试程序运行结果 | ||||
查询命令执行次数 (-limit) |
命令最短执行时间 | 每条命令平均执行时间 | 命令最大执行时间 | 总耗时 |
100 | 1.20ms | 1.69ms | 4.36ms | 0.2sec |
200 | 1.20ms | 1.71ms | 7.40ms | 0.3sec |
300 | 1.25ms | 1.73ms | 7.54ms | 0.5sec |
400 | 1.21ms | 1.71ms | 7.54ms | 0.7sec |
500 | 1.20ms | 1.70ms | 7.54ms | 0.8sec |
600 | 1.17ms | 1.67ms | 7.54ms | 1.0sec |
700 | 1.14ms | 1.66ms | 8.33ms | 1.2sec |
800 | 1.14ms | 1.65ms | 8.33ms | 1.3sec |
900 | 1.14ms | 1.63ms | 8.33ms | 1.5sec |
1000 | 1.14ms | 1.64ms | 8.33ms | 1.6sec |
测试结论:因为该工具最大只能测到读取1000条数据,所以没有继续加大压力测试。查询操作的消耗时间因为受到被查询表的数据量和查询语句的复杂性影响,所以在influxDate官方给出的被查表和查询语句下,算出来是平均每秒执行600次查询。