Skip to content

Latest commit

 

History

History
244 lines (161 loc) · 14.2 KB

vdl_test.md

File metadata and controls

244 lines (161 loc) · 14.2 KB

VDL端对端性能测试

1. 测试背景

本测试主要是为了测试VDL端对端的性能指标:

  • 单独写入性能参数
  • 单独读取性能参数
  • 读写混合情况下,读写的性能参数
  • 批量写入条数和接收缓存大小,对读写性能的影响

性能参数分为以下几个维度:

  • TPS
  • Latency:延迟,分为四个维度,Avg,95th表示第95个百分位数,99th表示第99个百分位数,max表示最大值,Avg表示平均延迟。批量请求中单条延迟计算方式如下:img ,Tn表示一次批量写入/读取N条消息消耗的时间,rtt表示写入端或读取端到VDL server之间的网络rtt。
  • Throughput:吞吐量

测试工具:

  • produce:通过编写性能测试程序(代码位于VDL的tools/vdl_perf/produce_perf/produce_perf.go)测试。
  • consume:VDL由于没有实现组消费协议,不能兼容kafka官方消费性能测试脚本:kafka-consumer-perf-test.sh。通过编写性能测试程序(代码位于VDL的tools/vdl_perf/consume_perf/consume_perf.go)测试。

2. 测试环境

2.1 服务器配置说明

VDL集群服务器配置

a) Leader:

  • IP:192.168.0.1
  • CPU:32核 Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
  • Mem:32GB
  • 磁盘:SATA 512GB
  • 网卡:1000Mb

b) Follower1:

  • IP:192.168.0.2
  • CPU:32核 Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
  • Mem:32GB
  • 磁盘:SATA 512GB
  • 网卡:1000Mb

c) Follower2:

  • IP:192.168.0.3
  • CPU:32核 Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
  • Mem:32GB
  • 磁盘:SATA 512GB
  • 网卡:1000Mb

读写Client服务器配置

a) 读Client所在服务器配置:

  • IP:192.168.0.2
  • CPU:32核 Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
  • Mem:32GB
  • 磁盘:SATA 512GB
  • 网卡:1000Mb

b) 写Client所在服务器配置:

  • IP:192.168.0.3
  • CPU:32核 Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
  • Mem:32GB
  • 磁盘:SATA 512GB
  • 网卡:1000Mb

2.2 网络拓扑图

由于只有三台机器,读和写部署在Follower机器上

3. 测试用例与结果

3.1 单独写入测试

只写的情况下,写入消息大小分为四种类型:100Byte、500Bytes、1024Byte和4096Byte,通过调整每一次写入的批量消息条数,来测试VDL写入性能指标。消息总条数为1000000,同步发送模式。批量条数分为:1条、10条、25条和50条。测试数据如下表所示:

单个消息100Byte,发送性能数据如下表所示:

性能指标 批量条数 TPS Latency Throughput
1 2467.52 Avg: 041 ms 95th: 0.46 ms 99th: 0.57ms max: 3.64ms 0.25 MB/sec
10 7481.23 Avg: 0.16 ms 95th: 0.17 ms 99th: 0.18ms max: 1.34ms 0.75 MB/sec
25 13759.55 Avg: 0.10 ms 95th: 0.11 ms 99th: 0.12ms max: 0.73ms 1.38 MB/sec
50 18524.29 Avg: 0.08 ms 95th: 0.09 ms 99th: 0.10ms max: 0.76 ms 1.85 MB/sec

​ 表1:写入Message size为100Byte的性能数据

单个消息500Byte,写入性能数据如下表所示:

性能指标 批量条数 TPS Latency Throughput
1 2272.75 Avg: 0.44 ms 95th: 0.49 ms 99th: 0.61ms max: 3.20 ms 1.14 MB/sec
10 6779.02 Avg: 0.17 ms 95th: 0.18 ms 99th: 0.21ms max: 1.25 ms 3.40MB/sec
25 11662.81 Avg: 0.11 ms 95th: 0.12 ms 99th: 0.25ms max: 0.80 ms 5.83 MB/sec
50 16377.21 Avg: 0.09 ms 95th: 0.10 ms 99th: 0.22ms max: 0.83 ms 8.19 MB/sec

​ 表2:写入Message size为500Byte的性能数据

单个消息1024Byte,写入性能数据如下表所示:

性能指标 批量条数 TPS Latency Throughput
1 2192.89 Avg: 0.46 ms 95th: 0.49 ms 99th: 0.63 ms max: 2.74 ms 2.25 MB/sec
10 5151.39 Avg: 0.22 ms 95th: 0.23 ms 99th: 0.37 ms max: 1.60 ms 5.28 MB/sec
25 10131.88 Avg: 0.13 ms 95th: 0.13 ms 99th: 0.32ms max: 1.11 ms 12.34 MB/sec
50 13989.55 Avg: 0.10 ms 95th: 0.11 ms 99th: 0.25ms max: 0.79 ms 14.33 MB/sec

​ 表3:写入Message size为1024Byte的性能数据

单个消息4096 Byte,发送性能数据如下表所示:

性能指标 批量条数 TPS Latency Throughput
1 1310.62 Avg: 0.76 ms 95th: 0.80 ms 99th: 1.09 ms max: 3.86 ms 5.37 MB/sec
10 3670.12 Avg: 0.30 ms 95th: 0.31 ms 99th: 0.82 ms max: 2.33 ms 15.03 MB/sec
25 5307.57 Avg: 0.22 ms 95th: 0.24 ms 99th: 0.57 ms max: 2.07 ms 21.74 MB/sec
50 6397.69 Avg: 0.19 ms 95th: 0.21 ms 99th: 0.52ms max: 0.93 ms 26.20 MB/sec

​ 表4:写入Message size为4096 Byte的性能数据

3.2 单独读取测试

只读的情况下,消息大小分为四种类型:100Byte、500Bytes、1024Byte和4096Byte,通过设置fetch.message.max.bytes参数来控制每次批量获取的数据大小,默认是1024KB。测试命令每次批量读取大小设置:32KB、64KB、256KB和1024KB,消息总条数为1000000。测试数据如下表所示:

单个消息100Byte,读取性能数据如下表所示:

性能指标 fetch size(KB) TPS Latency Throughput
32 141976.31 Avg: 0.04 ms 95th: 0.03 ms 99th: 0.17 ms max: 0.74 ms 13.54 MB/sec
64 148044.78 Avg: 0.04 ms 95th: 0.10 ms 99th: 0.11ms max: 0.30 ms 14.12 MB/sec
256 149981.98 Avg: 0.04 ms 95th: 0.05ms 99th: 0.05ms max: 0.10 ms 14.30 MB/sec
1024 146530.05 Avg: 0.04 ms 95th: 0.04 ms 99th: 0.05ms max: 0.05 ms 13.97 MB/sec

​ 表5:读取单条消息大小为100Byte的性能数据

单个消息500Byte,接收性能数据如下表所示:

性能指标 fetch size(KB) TPS Latency Throughput
32 95393.37 Avg: 0.04 ms 95th: 0.03 ms 99th: 0.31ms max: 0.57 ms 45.49MB/sec
64 89992.53 Avg: 0.04 ms 95th: 0.16 ms 99th: 0.18ms max: 0.64 ms 42.91MB/sec
256 93553.20 Avg: 0.04 ms 95th: 0.07 ms 99th: 0.08ms max: 0.21 ms 44.61 MB/sec
1024 92756.42 Avg: 0.04 ms 95th: 0.05 ms 99th: 0.06ms max: 0.08 ms 44.23 MB/sec

​ 表6:读取单条消息大小为500Byte的性能数据

单个消息1024Byte,接收性能数据如下表所示:

性能指标 fetch size(KB) TPS Latency Throughput
32 60351.86 Avg: 0.05 ms 95th: 0.03 ms 99th: 0.47ms max: 3.15 ms 58.94 MB/s
64 62317.28 Avg: 0.05 ms 95th: 0.24 ms 99th: 0.26ms max: 3.52 ms 60.86 MB/sec
256 61700.67 Avg: 0.05 ms 95th: 0.09 ms 99th: 0.13ms max: 0.20 ms 60.25 MB/sec
1024 61843.92 Avg: 0.05 ms 95th: 0.06 ms 99th: 0.06ms max: 0.07 ms 60.39 MB/sec

​ 表7:读取单条消息大小为1024Byte的性能数据

单个消息4096Byte,接收性能数据如下表所示:

性能指标 fetch size(KB) TPS Latency Throughput
32 20521.12 Avg: 0.08 ms 95th: 0.04 ms 99th: 1.49ms max: 13.18 ms 80.16 MB/s
64 20639.79 Avg: 0.08 ms 95th: 0.74 ms 99th: 0.77 ms max: 3.05 ms 80.62 MB/sec
256 20729.74 Avg: 0.08 ms 95th: 0.21 ms 99th: 0.29ms max: 2.31 ms 80.98 MB/sec
1024 20469.26 Avg: 0.08 ms 95th: 0.10 ms 99th: 0.12ms max: 0.27 ms 79.96 MB/sec

​ 表8:读取单条消息大小为4096 Byte的性能数据

3.3 读写并发测试

在读写并发的情况下,我们来测试VDL的端对端读写性能参数。在一台服务器上同步写入消息到VDL,同时在另一台服务器上读取数据。写入消息大小分为四种类型:100Byte、500Bytes、1024Byte和4096Byte,消息总条数为1000000。我们测试两组数据:

  • 读写并发场景1:写入端的batch为25,读取端的fetch.message.max.bytes为32KB。与写入和读取client默认配置基本相同。

  • 读写并发场景2: 写入的batch条数为50,读取端fetch.message.max.bytes都为256KB,可以保证一次批量写入50条大小为4096Byte的消息。对应着logstore性能测试的最大写入和读取情况(写入和读取50条4096Byte消息)。

默认情况下写入和读取性能数据如下表所示:

性能指标 message size(B) TPS Latency Throughput
100 13960.63 Avg: 0.10 ms 95th: 0.11 ms 99th: 0.14ms max: 1.51 ms 1.40 MB/sec
500 11716.19 Avg: 0.11 ms 95th: 0.13 ms 99th: 0.25ms max: 1.35 ms 5.86 MB/sec
1024 9651.97 Avg: 0.13 ms 95th: 0.15 ms 99th: 0.33ms max: 1.60 ms 9.88 MB/sec
4096 4468.15 Avg: 0.25 ms 95th: 0.58 ms 99th: 0.69ms max: 2.16 ms 18.30 MB/sec

​ 表8:读写并发场景1写入不同消息大小的性能数据

性能指标 message size(B) TPS Latency Throughput
100 135105.50 Avg: 0.04 ms 95th: 0.03 ms 99th: 0.20ms max: 0.25 ms 12.88 MB/sec
500 79935.00 Avg: 0.04 ms 95th: 0.03 ms 99th: 0.36ms max: 2.24 ms 38.12 MB/sec
1024 53170.41 Avg: 0.05 ms 95th: 0.03 ms 99th: 0.55ms max: 4.84 ms 38.73 MB/sec
4096 16442.51 Avg: 0.09 ms 95th: 0.04 ms 99th: 1.75ms max: 26.31 ms 64.23 MB/sec

​ 表9:读写并发场景1读取不同消息大小的性能数据

写入batch条数为50和读取缓存是256KB情况下,发送和接收性能数据如下表所示:

性能指标 message size(B) TPS Latency Throughput
100 18552.64 Avg: 0.08ms 95th: 0.09 ms 99th: 0.15 ms max: 0.82 ms 1.86 MB/sec
500 15744.89 Avg: 0.09ms 95th: 0.10 ms 99th: 0.23 ms max: 1.36 ms 7.87 MB/sec
1024 11877.23 Avg: 0.05 ms 95th: 0.10 ms 99th: 0.15 ms max: 0.52 ms 12.16 MB/sec
4096 4939.73 Avg: 0.23ms 95th: 0.30 ms 99th: 0.63ms max: 1.55 ms 20.23 MB/sec

​ 表10:读写并发场景2写入不同消息大小的性能数据

性能指标 message size(B) TPS Latency Throughput
100 126745.48 Avg: 0.04 ms 95th: 0.05 ms 99th: 0.06ms max: 0.06 ms 12.09MB/sec
500 77246.05 Avg: 0.04 ms 95th: 0.08 ms 99th: 0.11ms max: 0.29 ms 36.83 MB/sec
1024 49514.51 Avg: 0.05 ms 95th: 0.10 ms 99th: 0.15ms max: 0.52 ms 48.35 MB/sec
4096 13774.08 Avg: 0.10 ms 95th: 0.30 ms 99th: 0.48ms max: 2.01 ms 53.80 MB/sec

​ 表11:读写并发场景2读取不同消息大小的性能数据

4. 总结

通过对比测试,可以发现:

  • 总体上,VDL读写性能较为稳定。

  • 在单独写的情况下,随着批量条数不断增加,TPS不断提高,并且延时不断下降。

  • 在单独读取的情况下,fetch.message.max.bytes对读取TPS和延迟,基本没有影响,也就是说32KB的默认大小,足够了。

  • 在读写并发的情况下,写入TPS和延迟并未受到影响,因为写操作都是在尾部追加,和catch up读不冲突。读取TPS相当于单独读的90%左右,延迟基本相同。

  • 在读写并发的情况下,随着批量写入条数增大,写TPS会提高,同时写延迟也略有增加。读取的话默认情况下的fetch.message.max.bytes反而比缓存是256KB的TPS稍高。所以建议默认设置即可。