bench.md 3.2 KB

测试内容

本次测试是针对isearch的index_read进行的压力测试,只对查询接口进行压力测试,单机压力测试通过tcp进行请求。

测试方法

本次采用自己编译的测试工具isearchbench,原理是开启多个线程,每个线程依次与index_read建立tcp连接,发送检索请求,并等待结果返回。测试数据来源于discovery_release_article表,事先已经将索引导入到机器中。

测试目标

获取在单机部署情况下查询接口最大QPS值

测试环境

机器 机器编号 操作系统 CPU 内存
isearch机器 A CentOS Linux release 7.2.1511 4核 8G
压测脚本机器 B CentOS Linux release 7.2.1511 4核 8G
压测脚本机器 C CentOS Linux release 7.2.1511 4核 8G

机器的详细配置如下:

CPU:Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz 4核
内存大小:8G
内存规格:DDR4
内存速度:2400 MHz
操作系统:CentOS Linux release 7.2.1511 (Core)
内核版本:Linux version 3.10.0-693.5.2.el7.jd_3313.x86_64

性能测试结果

以下为压测的详细数据:

检索词 机器数 每台机器进程数 总进程数 每个进程开启线程数 每个线程请求数 总请求数 总耗时(平均) index_read进程cpu cache进程cpu qps
京东 2 2 4 200 500 400000 37s 98% 35% 10272
京东 2 2 4 200 1000 800000 84s 98% 35% 9574

以下为压测时通过top查看index_read进程所在机器的信息:

bench-top

以下为请求曲线:

bench-curve

可以得出index_read进程的qps最高为10272。

与ES性能对比

在A机器上安装elasticsearch-7.12.0,在导入相同数据的场景下,针对相同的查询条件进行压测,以下为QPS结果对比:

查询场景 isearch es
导入3个文档,其中两个包含查询词 8297 6108
导入100个文档,其中20个包含查询词 3862 1718
范围查询,其中两个文档在查询范围内 3282 1528
多字段组合查询,其中10个文档符合查询条件 3671 1117

其中es查询语句为:

curl 'http://127.0.0.1:9200/article/_search?pretty&q=content:京东'
curl 'http://127.0.0.1:9200/article/_search?pretty&q=weight:[50 TO 60]'
curl 'http://127.0.0.1:9200/article/_search?pretty&q=title:宝宝%20AND%20content:宝宝'

isearch查询语句为:

curl 'http://127.0.0.1/index/search?appid=10001&key=content:京东'
curl 'http://127.0.0.1/index/search?appid=10001&key=weight:[50,60]'
curl 'http://127.0.0.1/index/search?appid=10001&key_and=title:宝宝 content:宝宝'

注:查询语句中特殊字符和中文均需要进行url编码。