天天看點

某物流客戶Elasticsearch叢集性能優化案例客戶背景Elasticsearch叢集優化叢集優化效果寫在最後

客戶背景

客戶使用ES來進行資料存儲、快速查詢業務訂單記錄,但是經常會出現業務高峰期ES叢集的cpu負載、記憶體使用均較高,查詢延遲大,導緻前端業務通路出現大量逾時的情況,極大影響其客戶使用體驗。

部分監控如下圖:

某物流客戶Elasticsearch叢集性能優化案例客戶背景Elasticsearch叢集優化叢集優化效果寫在最後

1) 叢集架構如下:

某物流客戶Elasticsearch叢集性能優化案例客戶背景Elasticsearch叢集優化叢集優化效果寫在最後

叢集節點配置:8資料節點(16C64G);3主節點(8C32G)

2) 叢集存在問題分析

  • 業務層面

與客戶業務人員溝通,業務進行中有幾個聚合查詢會占用較多的記憶體,且這類查詢對準确性要求較高,需精确統計所有比對結果。

  • 架構層面

存在4-5T的單個較大索引,該索引字段多達2000+,分片大小普遍60G+,最高達到130G+,是制約查詢性能的一個較大瓶頸,另外叢集在業務高峰期還會出現經常的fullgc,這是出現通路逾時的直接原因。如圖:

某物流客戶Elasticsearch叢集性能優化案例客戶背景Elasticsearch叢集優化叢集優化效果寫在最後

Elasticsearch叢集優化

與客戶開發人員溝通了解叢集在業務上存在的問題,結合我們在ES這塊的服務經驗,從語句參數、索引、架構等多個角度給客戶提出調優建議。

1) 語句、參數調優

客戶已提供4個慢查詢語句,語句中聚合查詢使用"execution_hint": "map",該執行政策會把命中的記錄都撈回記憶體中,一旦查詢結果較大就會占用大量記憶體。建議使用terminator_after,此方法可以控制查詢結果數量,另外将不參與聚合、排序的字段設定為doc_values:false, 節省磁盤空間提升索引速度。

2) 叢集架構優化:

某物流客戶Elasticsearch叢集性能優化案例客戶背景Elasticsearch叢集優化叢集優化效果寫在最後

在原有叢集基礎上添加協調節點或者擴容資料節點:

  • 添加協調節點:優點是可以減輕資料節點壓力,變更較為容易,緩解fullgc頻繁出現的問題;
  • 擴容資料節點:優點是可以減輕目前資料節點壓力,也可以減小分片大小;但是增加索引分片需要重新建立索引,重新導入資料,且目前節點存儲壓力不大,同時增加資料節點對存儲空間有一定的浪費。

結合客戶業務特性,我們推薦客戶使用添加協調節點的方式對叢集架構進行優化。

3) 叢集索引優化:

可以對叢集進行索引拆分和使用别名兩方面進行優化調整。

  • 拆分索引:對索引字段進行拆分并确認大小,可以解決目前索引分片過大的問題,提升查詢性能。
  • 使用别名:根據日期定期建立新的索引(建議按月建立索引),根據業務對統一查詢的索引建立統一别名,該方法可以徹底解決目前索引分片過大問題,優化查詢性能。

叢集優化效果

叢集優化後整體性能有明顯提升:

某物流客戶Elasticsearch叢集性能優化案例客戶背景Elasticsearch叢集優化叢集優化效果寫在最後
  1. ES叢集負載、記憶體較為平穩,業務高峰期不會有較大波動;
  2. ES叢集FullGC出現頻次極大降低,降低對業務的影響;
  3. ES聚合查詢延遲減小,業務資料查詢性能提升,速度達到百毫秒級别;

寫在最後

袋鼠雲通過資料內建優化、任務排程優化、代碼優化、全鍊路資料品質保障、故障緊急處理、大資料平台運維,為客戶提供大資料系統運維保障服務。

更多解決方案詳情檢視雲掣官網

https://www.dtstack.com/dtsmart/

繼續閱讀