OpenTSDB性能测试

1. 测试环境

1.1 HBase配置

  • 8核16G 100G本地SCSI盘
  • 三RegionServer,每个RegionServer分配10G堆内存,LruBlockCache和Memtore内存占比默认分别为0.4,未开启BucketCache

1.2 OpenTSDB配置

OpenTSDB性能测试_第1张图片
参考[5],opentsdb的HBase存储模式如上图所示。

tsd.storage.salt.buckets=200
tsd.storage.salt.width=8
tsd.storage.uid.width.metric=8
tsd.storage.uid.width.tagk=8
tsd.storage.uid.width.tagv=8
  • 维度数:2
  • 时间粒度:秒

因此,每个指标的HBase 存储模式:

  • RowKey大小:52B。计算方式,参考[4][salt][...]8 + 8 + 4 + 8*4
  • Column Qualifier大小:2B
  • Column数:3600
  • Column Value大小:1~8B
  • 机器配置:8核16G

2. 测试过程

2.1 HBase写入性能测试

采用ycsb-0.15.0[6]测试,在默认数据集workload_template上修改配置

recordcount=100000
operationcount=10000000
fieldcount=3600
fieldlength=8
readallfields=false
#fieldlengthdistribution=constant
fieldlengthdistribution=uniform
readproportion=0
updateproportion=1
#requestdistribution=zipfian
requestdistribution=uniform
columnfamily=t
zeropadding=48
fieldnameprefix=0
threadcount=60

注意:

  • load阶段使用的insert对一行的所有列都会插入数据,例如fieldcount=3600,那么一次会写入3600个数据点。

测试命令

# load阶段
python2 ./bin/ycsb load hbase14 \
-s \
-P workloads/workload_opentsdb \
-cp /usr/local/service/hbase/conf

# transaction阶段
python2 ./bin/ycsb run hbase14 \
-s \
-P workloads/workload_opentsdb \
-cp /usr/local/service/hbase/conf

性能,单机约1w/s的写入性能

指标
Throughput(ops/sec) 3.0w
AverageLatency(us) 2189
MinLatency(us), 335
MaxLatency(us) 555004
95thPercentileLatency(us), 4000
99thPercentileLatency(us) 12000

2.2 OpenTsdb写入性能测试

  • 指标数:10000000,随机写入
  • tagk数,tagv数,其值均固定,即只占用3个uid
  • HBase tsdb表预分裂,保证写入请求在三台机器以及Region上均衡分布,避免热点
  • 自研测试工具,测试时长大于2分钟,每次测试前重启opentsdb清空其缓存

2.2.1 uid实时分配场景

  • 批量写入,批量大小128

测试结果

指标
写入性能 2.5k/s
平均延迟 <1000ms
  • 写入速度高于2.5k/s,opentsdb进程出现大量与client之间的CLOSE_WAIT网络连接,client端出现i/o timeout错误

2.2.2 uid预先分配场景

  • 使用http接口/api/uid/assign预先分配metrics的uid
  • 写入性能约3w/s
  • 延迟分布如下图所示,批量写入大小在100~300之间比较合适。
    OpenTSDB性能测试_第2张图片

3. 总结

  • 合理配置后OpenTSDB的写入性能可充分利用后端HBase存储的写入能力。普通硬盘单盘机器写入性能约1w/s
  • uid预分配后的写入性能相比实时分配有一个数据级的提高
  • OpenTSDB批量写入大小影响响应延迟,100~300的批量大小比较合适。

4. 参考资料

  • [1]TS-Benchmark: a benchmark for time series databases
  • [2]OpenTSDB and HBase rough performance test
  • [3]OpenTSDB User Guide Tuning
  • [4]OpenTSDB User Guide HBase Schema
  • [5]OpenTSDB oscon
  • [6]YCSB github

你可能感兴趣的:(大数据)