isearch/docs/bench.md
2021-04-09 17:55:31 +08:00

74 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### 测试内容
本次测试是针对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 |
机器的详细配置如下:
CPUIntel(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](http://storage.jd.com/search-index/image/bench-top.png)
以下为请求曲线:
![bench-curve](http://storage.jd.com/search-index/image/bench-curve.png)
可以得出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编码。