數(shù)棧優(yōu)化案例:物流客戶Elasticsearch集群性能優(yōu)化
本文整理自:袋鼠云技術(shù)薈 | 某物流客戶Elasticsearch集群性能優(yōu)化案例
數(shù)棧是云原生—站式數(shù)據(jù)中臺(tái)PaaS,我們?cè)趃ithub和gitee上有一個(gè)有趣的開源項(xiàng)目:FlinkX,F(xiàn)linkX是一個(gè)基于Flink的批流統(tǒng)一的數(shù)據(jù)同步工具,既可以采集靜態(tài)的數(shù)據(jù),也可以采集實(shí)時(shí)變化的數(shù)據(jù),是全域、異構(gòu)、批流一體的數(shù)據(jù)同步引擎。大家喜歡的話請(qǐng)給我們點(diǎn)個(gè)star!star!star!
github開源項(xiàng)目:https://github.com/DTStack/flinkx
gitee開源項(xiàng)目:https://gitee.com/dtstack_dev_0/flinkx
一、客戶背景
客戶使用ES來進(jìn)行數(shù)據(jù)存儲(chǔ)、快速查詢業(yè)務(wù)訂單記錄,但是經(jīng)常會(huì)出現(xiàn)業(yè)務(wù)高峰期ES集群的cpu負(fù)載、內(nèi)存使用均較高,查詢延遲大,導(dǎo)致前端業(yè)務(wù)訪問出現(xiàn)大量超時(shí)的情況,極大影響其客戶使用體驗(yàn)。
部分監(jiān)控如下圖:

1、 集群架構(gòu)如下:

集群節(jié)點(diǎn)配置:8數(shù)據(jù)節(jié)點(diǎn)(16C64G);3主節(jié)點(diǎn)(8C32G)
2、 集群存在問題分析
業(yè)務(wù)層面
??? 與客戶業(yè)務(wù)人員溝通,業(yè)務(wù)處理中有幾個(gè)聚合查詢會(huì)占用較多的內(nèi)存,且這類查詢對(duì)準(zhǔn)確性要求較高,需精確統(tǒng)計(jì)所有匹配結(jié)果。
架構(gòu)層面
????? 存在4-5T的單個(gè)較大索引,該索引字段多達(dá)2000+,分片大小普遍60G+,最高達(dá)到130G+,是制約查詢性能的一個(gè)較大瓶頸,另外集群在業(yè)務(wù)高峰期還會(huì)出現(xiàn)經(jīng)常的fullGC,這是出現(xiàn)訪問超時(shí)的直接原因。?
?如圖:

二、Elasticsearch集群優(yōu)化
與客戶開發(fā)人員溝通了解集群在業(yè)務(wù)上存在的問題,結(jié)合我們?cè)贓S這塊的服務(wù)經(jīng)驗(yàn),從語句參數(shù)、索引、架構(gòu)等多個(gè)角度給客戶提出調(diào)優(yōu)建議。
1、語句、參數(shù)調(diào)優(yōu)
客戶已提供4個(gè)慢查詢語句,語句中聚合查詢使用"execution_hint": "map",該執(zhí)行策略會(huì)把命中的記錄都撈回內(nèi)存中,一旦查詢結(jié)果較大就會(huì)占用大量內(nèi)存。建議使用terminator_after,此方法可以控制查詢結(jié)果數(shù)量,另外將不參與聚合、排序的字段設(shè)置為doc_values:false, 節(jié)省磁盤空間提升索引速度。
2、 集群架構(gòu)優(yōu)化:

在原有集群基礎(chǔ)上添加協(xié)調(diào)節(jié)點(diǎn)或者擴(kuò)容數(shù)據(jù)節(jié)點(diǎn):
添加協(xié)調(diào)節(jié)點(diǎn):優(yōu)點(diǎn)是可以減輕數(shù)據(jù)節(jié)點(diǎn)壓力,變更較為容易,緩解fullGC頻繁出現(xiàn)的問題;
擴(kuò)容數(shù)據(jù)節(jié)點(diǎn):優(yōu)點(diǎn)是可以減輕當(dāng)前數(shù)據(jù)節(jié)點(diǎn)壓力,也可以減小分片大小;但是增加索引分片需要重新創(chuàng)建索引,重新導(dǎo)入數(shù)據(jù),且當(dāng)前節(jié)點(diǎn)存儲(chǔ)壓力不大,同時(shí)增加數(shù)據(jù)節(jié)點(diǎn)對(duì)存儲(chǔ)空間有一定的浪費(fèi)。
結(jié)合客戶業(yè)務(wù)特性,我們推薦客戶使用添加協(xié)調(diào)節(jié)點(diǎn)的方式對(duì)集群架構(gòu)進(jìn)行優(yōu)化。
3、 集群索引優(yōu)化:
可以對(duì)集群進(jìn)行索引拆分和使用別名兩方面進(jìn)行優(yōu)化調(diào)整。
拆分索引:對(duì)索引字段進(jìn)行拆分并確認(rèn)大小,可以解決當(dāng)前索引分片過大的問題,提升查詢性能。
使用別名:根據(jù)日期定期創(chuàng)建新的索引(建議按月創(chuàng)建索引),根據(jù)業(yè)務(wù)對(duì)統(tǒng)一查詢的索引創(chuàng)建統(tǒng)一別名,該方法可以徹底解決當(dāng)前索引分片過大問題,優(yōu)化查詢性能。
三、集群優(yōu)化效果
集群優(yōu)化后整體性能有明顯提升:

a. ES集群負(fù)載、內(nèi)存較為平穩(wěn),業(yè)務(wù)高峰期不會(huì)有較大波動(dòng);
b. ES集群FullGC出現(xiàn)頻次極大降低,降低對(duì)業(yè)務(wù)的影響;
c. ES聚合查詢延遲減小,業(yè)務(wù)數(shù)據(jù)查詢性能提升,速度達(dá)到百毫秒級(jí)別
四、寫在最后
袋鼠云通過數(shù)據(jù)集成優(yōu)化、任務(wù)調(diào)度優(yōu)化、代碼優(yōu)化、全鏈路數(shù)據(jù)質(zhì)量保障、故障緊急處理、大數(shù)據(jù)平臺(tái)運(yùn)維,為客戶提供大數(shù)據(jù)系統(tǒng)運(yùn)維保障服務(wù)。