Elasticsearch5.2性能测试
背景描述
测试Elasticsearch存储8亿文档(约350G)的情况下,Es的使用docId,routing和term search的性能。
硬件资源:
节点序号 | CPU核心数据 | 内存 | 磁盘 |
---|---|---|---|
0 | 16 | 48G | SSD 500G |
1 | 16 | 48G | SSD 500G |
2 | 16 | 48G | SSD 500G |
*注意: 同一个IDC内部, 1Gbps网络以上
软件版本:
x | 版本 | 备注 |
---|---|---|
centos | 7.0 | 操作系统 |
Elasticsearch | 5.2.2 | |
java | bit64 1.8.111 | jdk |
Es数据存储设计
考虑到存储的数据不需要进行分词和评分查询,所以在Es数据结构和存储上设计了以下几点:
- 为充分利用Es的查询性能,在存储上将字段设计为
keyword
类型。同时禁用了_all
(请查阅_all字段的用途和原理),设置了"dynamic": strict
; - 在数据写入阶段不设置分片的副本,提升写入性能
索引的结构如下:
1 | 查询时 |
基准测试工具
Elsticesearch使用了netty作为通信框架,很好的支持了非阻塞异步通信,所以我们选择vertx-java参阅资料作为异步框架,设计基准测试工具
测试结果
接入promethesu监控请求耗时和QPS
- 1000 QPS 5min,50ms内完成的保证率99.76%
#原始记录 |
- 5000 QPS 5min,50ms内完成的保证率99.76%
#原始数据 |
- 10000QPS 压测5min,50ms内完成的保证率97.0307%
micro_service_latency_seconds_bucket{api="get_doc_id",le="0.001",} 634865.0 |
使用docId,routing,filed查询不同QPS下的测试结果汇总
通用的基准测试
根据业务定义的基准测试
1.根据业务设定索引
ES 基准测试