zoukankan      html  css  js  c++  java
  • YCSB压测elasticsearch

    YCSB是Yahoo开源的用于测试数据库(主要是nosql)的性能框架,可以测试Hbase, mongo, redis,elasticSearch等,本文主要介绍压测elasticsearch的流程。

    1.安装下载YCSB

    git clone https://github.com/brianfrankcooper/YCSB.git

    clone完成后,看项目目录结构能发现,有两个elasticsearch相关的项目

    其中elasticsearch支持的版本是2.x, elasticsearch5支持的版本是5.x, 而目前公司的es版本已经升级至7.x,在YCSB中提交记录中发现了一个版本,https://github.com/brianfrankcooper/YCSB/pull/1469 虽还未合并到主分支,但我们可以下下来,试一下。

    重新拉取新分支代码 :

    git clone https://github.com/xosk31/YCSB.git

    成功获取到elasticsearch7的版本

    2. 编译打包

    mvn -pl elasticsearch7 -am clean package

    打包成功后:

    在YCSB/elasticsearch7/target目录下生成一个YCSB的启动包:ycsb-elasticsearch7-binding-0.18.0-SNAPSHOT.tar.gz

    解压:tar -xzvf ycsb-elasticsearch7-binding-0.18.0-SNAPSHOT.tar.gz

    进入ycsb-elasticsearch7-binding-0.18.0-SNAPSHOT目录,可看到目录结构如下:

    LICENSE.txt	
    NOTICE.txt
    README.md
    bin
    lib
    workloads
    

    workloads目录里有预设的workloada/b/c/d/e/f几个文件,打开后,结构类似,都有如下参数,唯一不同是的是几个 *proportion的值不一样

    recordcount=1000    //测试数据集的总数
    operationcount=1000  //测试中执行的操作总数
    workload=site.ycsb.workloads.CoreWorkload
    
    readallfields=true
    
    readproportion=0.5   //读数据占操作总数的比例
    updateproportion=0.5 //更新数据占操作总数的比例
    scanproportion=0     //扫描数据占操作总数的比例
    insertproportion=0   //写数据占操作总数的比例
    
    requestdistribution=zipfian

     

     测试过程中,我们可以根据自己的实际情况,随意的设置这几个*proportion的值

    3.压测流程

    1.在待压测集群上新建测试索引

    YCSB不负责表的创建,所以需要自己手动创建用于测试的索引。例如在elasticsearch中,需要手动在待测集群上创建测试索引test

    2.选择合适的 workload

    本次主要做读和写,所以只需要准备两个workload,  一个insertproportion值为1, 其余均为0; 另一个readproportion值为1,其余均为0

    3.选择合适的运行时参数

    在当前目录新增配置文件myproperties.data,  内容如下:可根据自己的实际情况配置

    es.cluster.name=tj-es-staging    //es集群名
    es.index.name= middle_review_test
    es.index.key=middle_review_test  //es索引名,提前已经建好的测试索引
    es.number_of_shards=1       //es的分片数
    es.number_of_replicas=1    //分片的副本数
    es.remote=true    //是否是远程测试
    es.newdb=false
    es.hosts.list=tjstaging.api.es.srv:80   //es集群的ip或者域名:port, 多个用逗号隔开
    es.security.ssl=false            //是否需要进行SSL证书验证
    es.security.ssl.path=changeme    //SSL证书目录
    es.authentication=true           //是否需要身份验证
    es.credentials.user=changeme     //用户名
    es.credentials.password=changeme //密码

    本次qps预设为30, 100, 200 ,所以将 -threads分别设置为30, 100, 200即可。除了在 workload 中配置参数外,YCSB 还支持其他运行时参数,比较有用的是-threads,用于设置客户端线程数,默认为 1

    4.装载数据(loading phase)

    ./bin/ycsb load elasticsearch7 -P workloads/workloada -P myproperties.data -s 

    装载数据的主要作用是,为测试做数据准备,比如需要压测更新操作,若没有load操作,则会提示待更新的数据不存在。

    可以观察下装在数据的输出日志,无论配置的workloada是什么样的,都只执行insert操作。

    [OVERALL], RunTime(ms), 16220
    [OVERALL], Throughput(ops/sec), 61.652281134401974
    [TOTAL_GCS_PS_Scavenge], Count, 2
    [TOTAL_GC_TIME_PS_Scavenge], Time(ms), 23
    [TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.14180024660912455
    [TOTAL_GCS_PS_MarkSweep], Count, 0
    [TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
    [TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
    [TOTAL_GCs], Count, 2
    [TOTAL_GC_TIME], Time(ms), 23
    [TOTAL_GC_TIME_%], Time(%), 0.14180024660912455
    [CLEANUP], Operations, 1
    [CLEANUP], AverageLatency(us), 2133.0
    [CLEANUP], MinLatency(us), 2132
    [CLEANUP], MaxLatency(us), 2133
    [CLEANUP], 95thPercentileLatency(us), 2133
    [CLEANUP], 99thPercentileLatency(us), 2133
    
    
    [INSERT], Operations, 1000
    [INSERT], AverageLatency(us), 14927.496
    [INSERT], MinLatency(us), 9568
    [INSERT], MaxLatency(us), 76351
    [INSERT], 95thPercentileLatency(us), 23343
    [INSERT], 99thPercentileLatency(us), 44575
    [INSERT], Return=OK, 1000

    5.运行测试(transaction phase)

    压测qps 30:

    ./bin/ycsb run elasticsearch7 -P workloads/workloada -P myproperties.data -s -threads 30

    压测qps 100:

    ./bin/ycsb run elasticsearch7 -P workloads/workloada -P myproperties.data -s -threads 100

    压测qps 200:

    ./bin/ycsb run elasticsearch7 -P workloads/workloada -P myproperties.data -s -threads 200

    6.结果解析

    Operations                   执行的操作数
    AverageLatency            平均响应时间
    MinLatency                  最小响应时间
    MaxLatency                 最大响应时间
    95thPercentileLatency   p95
    99thPercentileLatency   p99

    根据最终的结果,用excel绘制柱状图,效果如下:

    写AverageLatency                                                                     写p99

     

    读AverageLatency                                                                  读p99

     

  • 相关阅读:
    jQuery中jsonp的跨域处理,no access-control-allow-origin,unexpected token
    doT中嵌套for循环的使用
    c++ new带括号和不带括号
    python装饰器之使用情景分析
    Python中classmethod与staticmethod区别
    python作用域 scope
    duck type鸭子类型
    EAFP和LBYL 两种防御性编程风格
    c++重载、覆盖和隐藏
    c++ 名字粉碎(name mangling)
  • 原文地址:https://www.cnblogs.com/happySmily/p/13815889.html
Copyright © 2011-2022 走看看