性能测试

压测工具esrally实践和思考(未完待续)

2018-04-10  本文已影响4708人  十五倍压枪

esrally elasticsearch专用压测工具

什么是压力测试

首先引用一段网络上关于压力测试的说明

压测,即压力测试,是确立系统稳定性的一种测试方法,通常在系统正常运作范围之外进行,以考察其功能极限和隐患.

我不是专业的测试人员,以下只是简单的分享下自己对压力测试的理解:
首先,通常上线的应用中会面临着来自各种用户(包括恶意与非恶意)的请求,服务接口时刻可能经受非常密集频繁的访问请求,压力测试就是用来模拟在这种情况下应用的响应速度以及程序存活情况等等;其次,也为了做扩容(申请服务器)做充足的数据依据。

什么是esrally

在搜索组中面对最多的就是索引集群,即elasticsearch集群。在对接口部分程序做压力测试的同时,同时也需要关心集群的情况,比如在做参数调优过后的索引速度,吞吐量,服务器的IO和内存消耗情况,总结下来就是保证稳定并高速的提供索引数据和查询数据的功能。
esrally 是 elastic 官方开源的一款基于 python3 实现的针对 es 的压测工具,源码地址为点我跳转.esrally的功能如下

通俗的看,esrally是一套专门针对于elasticsearch各个版本进行非常完整详细的一键式测试套件,它可以提供从源码打包下载,自动提供测试数据,灵活定义测试环节等各种一键式服务。完全省去了这部分测试开发的工作。

安装环境部署

esrally 对于软件环境的要求如下:

准备好上述环境后可以很简单的通过pip3来安装esrally。执行pip3 install esrally静等几分钟就可以完成安装,输入esrally -h或者esrally --version来判断是否已经安装完成。如果在命令中没有显示请修改path变量等。esrally并不需要本地或者网络中已经存在elasticsearch集群,它甚至可以自己去github上下载源代码后本地编译安装然后测试。

术语概念

rally 是汽车拉力赛的意思,也就是说 esrally 是将压测比作了汽车拉力赛,因此其中的很多术语都是从汽车拉力赛中借鉴来的

track

track 是赛道的意思,在这里是指压测用的数据和测试策略。track就好像过去在玩极品飞车游戏时,你可以选择的车的种类以及地图赛道一般,track提供了多种多样的测试数据比如http_logs的测试数据供你秀选择。比如选择geonames这个track(路径.rally/benchmarks/tracks/default/geonames)在目录下我们可以看到一个track.json文件,这个文件定义了整个测试过程要使用的数据类型和测试策略。track.json文件中有几个关键的参数。

car

car 是赛车的意思,这里是指不同配置的 es 实例。通过下面的命令可以查看 esrally 当前可用的 car。其实这里的car意思是脚本中为我们配置的不同配置的es实例,当你选择哪个car后他会为你下载下来再配置。大部分情况下我们是测试本地集群,所以这个参数其实不太有用。

race

race 是一次比赛的意思,这里是指某一次压测。要比赛,就要有赛道和赛车,如果不指定赛车,就用 default 配置,如果不指定赛道,则默认使用 geonames track。

tournament

tournament 是锦标赛的意思,是由多个 race 组成的。通过下面的命令可以查看所有的 race。

pipeline

Pipeline 在这里是指压测的一个流程。

一般我们会选择最后一项

实际操作命令

以下是一次实际操作压测的例子

  1. esrally configure 配置测试程序的基本信息,包括JAVA_HOME等,大部分情况下它会自动获取
  2. esrally race --pipeline=benchmark-only --target-hosts=127.0.0.1:9200 --track=nyc_taxis --challenge=append-no-conflicts 这个命令用来完整的做完一次压力测试,pipeline指定压测的模式是测试自己搭建的集群 target-host指定集群端口,track指定本次要用nyc_taxis数据集做测试,challenge指定使用append-no-conflicts策略
  3. esrally list tracks | races | cas | pipelines…… 显示可用的tracks | races | cars等等

以下是一些常用参数的释义,更多信息请参考文档点我跳转

解读测试报告的结果

一般要关注的数据有:

可以观察到的是整个测试结果包括一些索引创建以及合并的基本信息比如Indexing time Merge time,以及整个过程中JVM的GC情况比如Total Young Gen gcTotal Old Gen GC来判断整个过程中JVM的gc情况。
另外的在operation列中有值的行对应的是具体challenge中指定的操作中对应的结果,每个操作所给出的结果都是同一套指标。空白的数字指标是比较苍白无力,一般情况下很难直接看出问题所在,这时可以通过compare参数来和其他测试结果比较,发现自己集群中的问题。

自定义自己的测试数据集和操作

未完待续

上一篇下一篇

猜你喜欢

热点阅读