1. 性能测试环境
在单机环境(一台dataserver)和分布式环境(多台dataserver)下分别进行测试,或只在分布式环境下进行测试。
2. 性能测试指标
主要考量两个指标
(1)服务端的极限QPS
(2)单个操作的响应时间rt
当然其实还有其它不少指标,例如服务端的资源消耗情况、并发数等等。
3. 性能测试方法
主要针对tair ldb存储引擎在缓存了不同级别数据的前提下,添加了范围Bloomfilter支持的前后对 get_range接口测试的性能对比情况。考虑到网络方面的负载,每次操作应该重复N次取个稳定值。具体流程初步设计如下:
(1)当dataserver数据库为空时,通过tair客户端向dataserver服务端put一定量的数据。
(2)在(1)完成后,以单线程通过tair客户端进行get_range调用向dataserver获取数据,记录N次操作所消耗的时间。
(3)并发多个线程通过tair客户端的get_range调用向dataserver获取数据,每个线程完成N次的操作,记录服务器的QPS大小、响应时间等。
(4)不断增大dataserver的存储数据量,重复进行(1)~(3)的测试,形成未添加范围Bloomfilter支持的性能测试报告。
(5)对tair ldb添加范围Bloomfilter支持后,再重复进行(1)~(4)的操作,最终形成两者的性能对比测试报告并做具体的分析。
4. 性能测试工具
单机下常用的性能测试工具有: GNU的gprof,IBM的PurifyPlus,Intel的VTune,AMD的CodeAnalyst,还有Linux下的OProfile/perf,对于这些工具是否能应用到分布式系统中还不甚了解。专门针对分布式环境的性能测试工具,相关资料较少,只看到一个基于Java的Jmeter,淘宝的DST。
我们的需求相对较简单,使用这些工具反而增加了其复杂性,因此我们决定自己写一个简单的性能测试工具,基本思路是调用tair client的api,启动多线程去压。然后记录一些压测结果。类似rocksdb/tools下面的db_stress.cc就是这种思路。还有leveldb下的各个test测试也是值得参考的资料,比如db_bench.cc基测程序。