1 需求分析
1.1 分析壓測對象
1)什么是 ClickHouse 和 Elasticsearch
ClickHouse 是一個真正的列式數據庫管理系統(MS)。在 ClickHouse 中,數據始終是列存儲的,包括向量(對或列塊)的執行過程。只要有可能,操作都是基于向量進行分派的,而不是實現的價值,這被稱為?它有查詢實際的數據處理?。
Elasticsearch 是一款開源的引擎可以使用、這樣的RESTful 風格的搜索分析,它的Apache 是開源的開源引擎。
- 一個索引的索引文檔存儲,字段可以被與搜索
- 一個實時分析搜索引擎
- 勝上百個服務節點的擴展支持PB人物的任性或非血數據
2)為什么要對他們進行壓測
是的劇集,非常多的點擊屋在場景中具有出色的性能,具有復雜性的基本業務查詢,但我們卻有一個非常重要的查詢業務場景,甚至是雙十一業務的真實情況,確保大型活動具有業務能力的持續性,ClickHouse 和 Elasticsearch 的性能業務場景中是否具備性能優良的性能,通過性能壓測,中壓我們的任務點,進行抗壓,優化設計性能。
1.2 定壓測目標
1)從復雜度來看,接口(queryOBBacklogData)查詢了5次,代碼如下:
/**
*切ck-queryOBBacklogData
*@paramqueryBO
*@return
*/
publicOutboundBacklogRespBOqueryOBBacklogDataCKNew(OutboundBacklogQueryBOqueryBO){
log.info(" queryOBBacklogDataCK入參:{}",JSON.toJSONString(queryBO));
//公共條件-卡最近十天時間
StringcommonStartTime=DateUtils.getTime(DateUtil.format(newDate(),DateUtil.FORMAT_DATE),DateUtils.ELEVEN_AM,1,-10);
StringcommonEndTime=DateUtils.getTime(DateUtil.format(newDate(),DateUtil.FORMAT_DATE),DateUtils.ELEVEN_AM,1,1);
//越庫信息-待越庫件數&待越庫任務數
WmsObCrossDockQueryBowmsObCrossDockQueryBo=wmsObCrossDockQueryBoBuilder(queryBO,commonStartTime,commonEndTime);
log.info("queryOBBacklogDataCK-wmsObCrossDockQueryBo:{}",JSON.toJSONString(wmsObCrossDockQueryBo));
CompletableFuturepreCrossDockInfoCF=CompletableFuture.supplyAsync(
()->wmsObCrossDockMapper.preCrossDockInfo(wmsObCrossDockQueryBo),executor);
//集合任務信息-待分配訂單
WmsObAssignOrderQueryBowmsObAssignOrderQueryBo=wmsObAssignOrderQueryBoBuilder(queryBO,commonStartTime,commonEndTime);
log.info("queryOBBacklogDataCK-wmsObAssignOrderQueryBo:{}",JSON.toJSONString(wmsObAssignOrderQueryBo));
CompletableFuturepreAssignOrderQtyCF=CompletableFuture.supplyAsync(
()->wmsObAssignOrderMapper.preAssignOrderInfo(wmsObAssignOrderQueryBo),executor);
//揀貨信息-待揀貨件數&待揀貨任務數
WmsPickTaskQueryBowmsPickTaskQueryBo=wmsPickTaskQueryBoBuilder(queryBO,commonStartTime,commonEndTime);
log.info("queryOBBacklogDataCK-wmsPickTaskQueryBo:{}",JSON.toJSONString(wmsPickTaskQueryBo));
CompletableFutureprePickingInfoCF=CompletableFuture.supplyAsync(
()->wmsPickTaskMapper.pickTaskInfo(wmsPickTaskQueryBo),executor);
//分播信息-待分播件數&待分播任務
WmsCheckTaskDetailQueryBowmsCheckTaskDetailQueryBo=wmsCheckTaskDetailQueryBoBuilder(queryBO,commonStartTime,commonEndTime);
log.info("queryOBBacklogDataCK-wmsCheckTaskDetailQueryBo:{}",JSON.toJSONString(wmsCheckTaskDetailQueryBo));
CompletableFuturepreSowInfoCF=CompletableFuture.supplyAsync(
()->wmsCheckTaskDetailMapper.checkTaskDetailInfo(wmsCheckTaskDetailQueryBo),executor);
//發貨信息-待發貨件數
WmsOrderSkuQueryBowmsOrderSkuQueryBo=wmsOrderSkuQueryBoBuilder(queryBO,commonStartTime,commonEndTime);
log.info("queryOBBacklogDataCK-wmsOrderSkuQueryBo:{}",JSON.toJSONString(wmsOrderSkuQueryBo));
CompletableFuturepreDispatchCF=CompletableFuture.supplyAsync(
()->wmsOrderSkuMapper.preDispatchInfo(wmsOrderSkuQueryBo),executor);
returnprocessResult(preCrossDockInfoCF,preAssignOrderQtyCF,prePickingInfoCF,preSowInfoCF,preDispatchCF);
}
2)查詢表(OBBacklogData),查詢了5個表:
wms.wms_ob_cross_dock
wms.wms_ob_assign_order
wms.wms_picking_task.
wms.wms_check_task_detail
wms.wms_order_sku
3)查詢的數據量,如下:
select
(ifnull(sum(m.shouldBeCrossedDockQty),
0)-
ifnull(sum(m.satisfiedCrossedDockQty),
0))aspreCrossStockSkuQty,
count(m.docId)aspreCrossStockTaskQty
from
wms.wms_ob_cross_dockmfinal
prewhere
m.createTime>='2021-12-031100'
andm.createTime<=?'2021-12-141100'
andm.warehouseNo='279_1'
andm.orderType='10'
andtenantCode='TC90230202'
where
m.deleted=0
andm.deliveryDestination='2'
andm.shipmentOrderDeleted=0
andm.status=0
可以從上面的SQL截圖中,查詢待越庫文件數&待越庫任務數共讀取720817行數據
selectcount(distinctm.orderNo)aspreAssignedOrderQty
fromwms.wms_ob_assign_ordermfinal
prewhere
m.createTime>='2021-12-031100'
andm.createTime<=?'2021-12-141100'
andm.warehouseNo='361_0'
andtenantCode='TC90230202'
wherem.taskassignStatus=0
andm.deliveryDestination=2
andm.stopProductionFlag=0
andm.deleted=0
andm.orderType=10
上面的 SQL 截圖共讀取了,可以從查詢任務信息 - 集合待分配訂單,153118 行數據
selectminus(toInt32(ifnull(sum(m.locateQty),toDecimal64(0,4))),
toInt32(ifnull(sum(m.pickedQty),toDecimal64(0,4))))asprePickingSkuQty,
count(distinctm.taskNo)asprePickingTaskQty
fromwms.wms_picking_taskmfinal
prewhere
m.shipmentOrderCreateTime>='2021-12-031100'
andm.shipmentOrderCreateTime<=?'2021-12-141100'
andm.warehouseNo='286_1'
andtenantCode='TC90230202'
wherem.pickingTaskDeleted=0
andm.deliveryDestination=2
andm.pickLocalDetailDeleted=0
andm.shipmentOrderDeleted=0
andm.orderType=10
and(m.operateStatus=0orm.operateStatus=1)
上面的SQL截圖&可以從查詢揀貨任務信息-待揀貨件數條,共讀到2673536個數據
selectminus(toInt32(ifnull(sum(m.locateQty),toDecimal64(0,4))),
toInt32(ifnull(sum(m.pickedQty),toDecimal64(0,4))))asprePickingSkuQty,
count(distinctm.taskNo)asprePickingTaskQty
fromwms.wms_picking_taskmfinal
prewhere
m.shipmentOrderCreateTime>='2021-12-031100'
andm.shipmentOrderCreateTime<=?'2021-12-141100'
andm.warehouseNo='279_1'
andtenantCode='TC90230202'
wherem.pickingTaskDeleted=0
andm.deliveryDestination=2
andm.pickLocalDetailDeleted=0
andm.shipmentOrderDeleted=0
andm.orderType=10
and(m.operateStatus=0orm.operateStatus=1)
以上SQL截圖-可以從分查詢分播信息行數待播播任務,共讀148149個數據
selectifnull(sum(m.unTrackQty),0)asunTrackQty
fromwms.wms_order_skumfinal
prewhere
m.shipmentOrderCreateTime>='2021-12-031100'
andm.shipmentOrderCreateTime<=?'2021-12-141100'
andm.warehouseNo='280_1'
andm.orderType='10'
andm.deliveryDestination='2'
andtenantCode='TC90230202'
wherem.shipmentOrderDeleted<>'1'
andm.ckDeliveryTaskDeleted<>'1'
andm.ckDeliveryTaskDetailDeleted<>'1'
andm.ckDeliveryTaskStatusin('1','0','2')
上面的 SQL 共讀取可以從查詢收到的信息 - 待件數,截圖 99591 行數據
基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
- 項目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
- 視頻教程:https://doc.iocoder.cn/video/
2 測試環境準備
為了發揮壓測作用,履行壓測環境,應該使用其他類似的環境一致,所以我們應該使用類似的環境一致了和類似的環境
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
3 采集工具準備
工具監控
- http://origin.jd.com/ :監控 JVM,方法等級監控(提供秒級支持)
- http ://console.jex.jd/ :提供異常監控,火焰圖監控、資源分析。
- http://x.devops.jdcloud.com/ :支持查看clickhouse/Elasticsearch 數據庫服務器每個節點的cpu使用率
- http://dashboard.fireeye.jdl.cn/ :應用服務器cpu使用率、內存使用率監控
4 壓測執行及結果分析
4.1 編寫壓測腳本工具
Forcebot(http://force.jd.com) 是一個為開發人員、測試人員提供的性能測試平臺,通過編寫、配置、場景任務、實時監控、日志定位、發布監控、設置報告操作的流程來完成測試,靈活的腳本配置滿足同步性能、異步、集合點等各種發壓模式。
幫助文檔(http://doc.jd.com/forcebot/helper/)
4.2 設計壓測數據
4.2.1 壓測中名詞解釋
- DBCP:數據庫連接,是apache的一個Java連接項目。DBCP通過連接池上的數據庫同建立一些連接內存中(即連接池中),應用程序需要建立數據庫時直接到從連接池中申請一個連接使用,使用后由回收該連接,從而達到連接復用完成,減少資源消耗的目的。
- maxTotal:是連接池中總連接的最大數量,默認值為8
- max_thread:clickhouse中配置,處理SQL請求時使用的最大線程數。數值是clickhouse服務器的核心數量。
- 協調:協調節點數,主要作用于請求,請求轉發請求響應處理等輕量級
- 數據節點:主要是存儲索引節點的節點,主要是對文檔進行刪除,聚合操作等。的時候,需要在群里添加新的節點
4.2.2 壓測數據
clickhouse數據服務:32C128G6節點2副本
應用服務器:4 核 8G 2maxTotal=16
注: 每次壓測前,一定要觀察每個數據節點的 cpu 使用率
注: 從上面的壓測過程中,序號-12,數據庫中的數據庫中的數據池中的數據可以在tps 6號,但沒有增加數據庫中的大數據,但沒有更多的變化,檢查數字未配置,默認的數字是連接的8個最大的地方用戶數增加至8以后,clickhouse cpu穩定在40%~50%之間不再增加,應用服務器CPU穩定在25%左右。
之后我們調整 max50,通過 max_thread 不同的值,節點 CPU 使用率保持在左右,來查看數據:服務器 CPU 使用率、TP、TP99、應用指標總比例 = 監控數。
clickhouse 數據節點,CPU 使用率:
Elasticsearch 數據服務:328G6 2 2 副本應用服務器:4 8G 2Elasticsearch 節點服務器保持數據庫服務器 CPU 使用率達到50%左右(50%左右),重新監控數據節點、tp99 指標:coating 節點協調數、數據節點大小
指標1:coordinating=2,數據偏差=4,poolSize=400
在測的過程中,CPU 的使用率達到 51.6%,注平均的發現率在 9% 的情況下,協調每個節點的負載率,所以需要協調每個節點
指標2:coordinating=4,數據偏差=5,poolSize=800
注: 在壓測的過程中,發現CPU使用率(數據庫)ES數據節點在40%左右的時候,發現一直上不去,查看日志activeCount已經達到797,需要增加poolSize值
指標3:coordinating=4,數據偏差=5,poolSize=1200
注: 壓測過程中,發現協調節點支持還是需要擴容,不能現在數據節點cpu使用率達到50%Elasticsearch數據節點及協調節點,CPU使用率:
我們在壓測的過程中發現一些在開發過程中沒有發現的問題,首先 bdcp 數大數據應用服務器,使用的線程池數線程數為 8 時,使需求,用戶增加至 8 以后,clickhouse 的 cpu CPU 20%~55%之間穩定左右穩定,CPU 40%左右穩定運行,CPU40服務器20左右,服務器使用率高,是clickhouse-jdbc解析sql效率低。
4.3 結果分析
4.3.1 測試結束
1)clickhouse對有一定的支持,通過不支持高線程,可以調整線程的增加
- 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
- 讀取配置文件工具類增加內存緩存
審核編輯:湯梓紅
-
cpu
+關注
關注
68文章
10855瀏覽量
211594 -
開源
+關注
關注
3文章
3320瀏覽量
42473 -
腳本
+關注
關注
1文章
389瀏覽量
14858 -
Elasticsearch
+關注
關注
0文章
28瀏覽量
2827
原文標題:ClickHouse和Elasticsearch壓測對比,誰是yyds?
文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論