ClickHouse与Elasticsearch压测实践
1 需求分析
http://origin.jd.com/ :监控JVM,方法级别监控(提供秒级支持)
http://forcebot.jd.com) 是专门为开发人员、测试人员提供的性能测试平台,通过编写脚本、配置监控、设置场景、启动任务、实时监控、日志定位、导出报告一系列操作流程来完成性能测试,灵活的脚本配置满足同步、异步、集合点等多种发压模式。
帮助文档(http://doc.jd.com/forcebot/helper/)
4.2 设计压测数据
4.2.1 前期压测中名词解释
- DBCP:数据库连接池,是 apache 上的一个Java连接池项目。DBCP通过连接池预先同数据库建立一些连接放在内存中(即连接池中),应用程序需要建立数据库连接时直接到从接池中申请一个连接使用,用完后由连接池回收该连接,从而达到连接复用,减少资源消耗的目的。
- maxTotal:是连接池中总连接的最大数量,默认值8
- max_thread:clickhouse中底层配置,处理SQL请求时使用的最大线程数。默认值是clickhouse服务器的核心数量。
- coordinating:协调节点数,主要作用于请求转发,请求响应处理等轻量级操作
- 数据节点:主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对cpu,内存,io要求较高, 在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点
4.2.2 压测数据
clickhouse数据服务:32C128G6节点2副本
应用服务器:4核8G2
maxTotal=16
注:每次压测前,一定要观察每个数据节点的cpu使用率
注:从上面压测过程中,序号6-12可以看出,并发用户数在增加,但tps没有幅度变化,检查发现bigdata dbcp数据库链接池最大线程数未配置,默认最大线程数是8,并发用户数增加至8以后,clickhouse cpu稳定在40%~50%之间不再增加,应用服务器CPU稳定在25%左右。
之后我们调整maxTotal=50,通过调整max_thread不同的值,数据库节点CPU使用率保持在50%左右,来查看相应的监测数据指标:应用服务CPU使用率、TPS、TP99、并发用户数。
clickhouse数据节点,CPU使用率:
Elasticsearch数据服务:32C128G6节点2副本
应用服务器:4核8G2
Elasticsearch同样保持数据库服务CPU使用率达到(50%左右),再监控数据指标tps、tp99
调整指标如下:coordinating协调节点数、 数据节点、poolSize
指标1:coordinating=2,数据节点=4,poolSize=400
注:在压测的过程中发现,coordinating节点的cpu使用率达到51.69%,负载均衡的作用受限,所以协调节点需扩容2个节点
指标2:coordinating=4,数据节点=5,poolSize=800
注:在压测的过程中,发现CPU使用率(数据库)ES数据节点在40%左右的时候,一直上不去,查看日志发现activeCount已经达到797,需要增加poolSize值
指标3:coordinating=4,数据节点=5,poolSize=1200
注:压测过程中,发现coordinating协调节点还是需要扩容,不能支持现在数据节点cpu使用率达到50%
Elasticsearch数据节点及协调节点,CPU使用率:
我们在压测的过程中发现一些之前在开发过程中没发现的问题,首先bdcp数bigdata应用服务器,使用的线程池最大线程数为8时,成为瓶颈,用户数增加至8以后, clickhouse的cpu稳定在40%~50%之间不在增加,应用服务器CPU稳定在25%左右,其次warehouse集群协调节点配置低,协调节点CPU使用率高,最后是clickhouse-jdbc JavaCC解析sql效率低。
4.3 结果分析
4.3.1 测试结论
1)clickhouse对并发有一定的支持,并不是不支持高并发,可以通过调整max_thread提高并发
- max_thread=32时,支持最大TPS 是37,相应TP99是122
- max_thread=2时,支持最大TPS 是66,相应TP99是155
- max_thread=1时,支持最大TPS 是86,相应TP99是206
2)在并发方面Elasticsearch比clickhouse支持的更好,但是相应的响应速度慢很多
- Elasticsearch:对应的TPS是192,TP99是3050
- clickhouse:对应的TPS 是86,TP99是206
综合考量,我们认为clickhouse足以支撑我们的业务诉求
4.3.2 优化建议
- 对ES协调节点进行扩容
- bigdata应用线程池最大线程数调高至200
- bigdata应用 dbcp线程池maxTotal设置成50
- 读取配置文件工具类增加内存缓存
作者:潘雪艳