1. 阿里雲Elasticsearch 日誌場景概況
阿里雲Elasticsearch(簡稱ES)在線上擁有1W+的集群和6W+節點,為用戶提供線上檢索和分析服務,在這些集群中,日誌集群占比35%,其平均CPU核數超過40個,數據量達到PB級別。日誌集群具有數量多、單集群規模大的特點,覆蓋包括遊戲、醫藥、汽車等領域。
2. 日誌場景集群特點
在進行引擎內核優化之前,首先需要了解日誌場景集群的共性特點:
寫入吞吐高:在線頭部用戶的單日寫入吞吐量可達數十TB級;
查詢秒級響應:日誌場景集群通常會作為微服務的問題排查,或監控數據的大盤展示,因此查詢端的響應是否及時,直接影響用戶端的體驗;
存儲數據量大:日誌場景集群的單日寫入量大,數據存儲周期長;
傾向訪問近期數據
3. 日誌場景自建集群的痛點:性價比低
貴:寫入吞吐高, 存儲時間長,導致計算資源和存儲資源成本高;
慢:數據量大,導致擴容/宕機恢復慢, 數據遷移慢;
差:冷/熱查詢沒有隔離機制,導致穩定性差;
難:索引多, 生命周期不同,導致冷/熱數據遷移難管理;
4. 日誌場景最佳實踐大圖
基於以上痛點,ES日誌場景進行了諸多優化,主要包含以下五個方面:
冷熱查詢共享計算資源:冷熱數據查詢隔離,在維持查詢穩定性的基礎上,將用戶計算成本降低50%;
低成本自研海量存儲引擎:存儲成本降低70%;
計算存儲分離:海量冷數據快速恢復、快速彈性;
冷/熱數據自動遷移:免運維;
託管寫入:引入 Indexing Service 寫入託管服務,用戶無需為索引構建消耗資源,寫入性能提升10倍以上;
5. 日誌場景最佳實踐成果
ES 日誌場景最佳實踐,為用戶提供了高性價比的服務,主要體現在四個方面:
高穩定:
通過 IndexingService 讓寫入性能提升10倍;
針對自研海量存儲引擎進行存儲優化使查詢秒級響應;
低成本:
自研海量存儲引擎讓存儲成本降低70%;
冷熱共享計算資源技術讓計算成本降低50%;
高易用:
冷熱數據自動遷移,高級監控功能實現免運維,全觀測;
高可用:
通過自研海量存儲引擎共享存儲,以及計算存儲分離技術,使用戶的海量冷數據可以做到快速彈性,快速恢復;
1. 共享冷/熱計算資源
計算成本降低50%:ES 提供冷熱共享計算規格組,用戶無需為冷數據單獨購買 ECS 資源;
AJDK 租戶隔離技術:將冷/熱查詢的線程池置於不同租戶中,當冷查詢的線程或 CPU 資源影響到熱查詢,會優先保證熱查詢返回;
查詢隔離等;
2. 查詢性能優化
冷存儲(Lucene查詢剖析)
自研海量存儲引擎的單次IO訪問延遲可達到100毫秒以上,使用Lucene原生查詢框架的端到端查詢,對於這種延遲是無法接受的。
Lucene查詢模型分為四個步驟(見下圖):
根據用戶的查詢語句進行倒排鏈求交,獲取文檔ID列表;
如用戶有排序或聚合的需求,根據文檔ID列表串行查詢 DocValue 索引,獲取文檔ID對應的指定字段值;
對指定字段值進行排序和聚合操作;
如客戶有召回原文的需求,則需要查詢原文索引並返回原文;
其中第二步訪問 DocValue 的隨機查詢,是導致查詢延遲高的重點。假設用戶召回100個文檔ID,單次IO查詢是100毫秒,那麼100個文檔的排序或聚合操作就有10秒的端到端查詢延遲。
冷存儲
針對上述查詢延遲問題,對Lucene的原生執行模式進行了如下改造:
按行查詢→按列查詢(見下圖):由多線程完成獲取 DocValue 文檔值;
AJDK 的 Wisp 協程技術:降低多線程間的切換開銷;
預讀:採用塊的預讀策略,以加速倒排鏈的訪問;
Codec 優化:採用大塊壓縮技術使單次IO可以返回多個文檔值,從而降低總體IO次數。
冷存儲(智能緩存)
在查詢模式基礎上提供智能緩存機制,在自研海量存儲引擎中加入 SmartCache,對多種不同類型的索引採用自適應的淘汰策略,可以適配多種查詢場景。比如針對 DocValue 索引採用了 N-LRU 的淘汰策略,防止一次對歷史數據的分析型查詢直接將 DocValue 的 Cache 刷滿,導致淘汰一些有效數據。
3. 寫入性能優化
使用 Indexing Service 中心化索引構建集群。
寫入性能提升10倍:用戶集群在收到寫入請求後,將寫入請求轉發至 Indexing Service 集群,整個索引構建過程是在中心化集群完成,因此用戶集群無需為索引構建消耗計算資源;
後端雙集群互備保障高可用;
寫入託管, 按量計費,進一步降低用戶的使用成本。
4. 計算存儲分離
冷數據採用自研海量存儲引擎的存儲介質,屬於共享存儲,用戶的寫入只在主分片進行構建,所有副本節點都是加載共享存儲中的數據,真正做到一寫多讀,以及計算和存儲解耦。由於數據只存儲一份,在節點擴容或節點宕機時,無需進行節點間的數據拷貝,徹底消除海量數據遷移的開銷。
1. 自研海量存儲引擎查詢性能評測
a.自研海量存儲引擎成本
自研海量存儲引擎的存儲單價是0.15元/GB/月,對比高效雲盤的0.35元/GB/月,降低了60%;對比SSD的1元/GB/月,降低80%以上;
b.自研海量存儲引擎查詢延遲
優化後的自研海量存儲引擎,對比高效雲盤在查詢延遲方面有顯著降低。
在自研海量存儲引擎與高效雲盤的查詢延遲對比圖中,查詢數據級是1.5TB索引,在24個16C64GB節點進行測試,單位是毫秒,針對兩種查詢語句分別進行測試,一種是只有對時間字段的簡單查詢,一種是對指定字段有AGG聚合分析的分析型查詢。測試結果表明,自研海量存儲引擎的查詢性能更好,查詢延遲降低了30%左右。
綜上對比高效雲盤,自研海量存儲引擎的成本降低了60%,而總體查詢性能提升了30%,自研海量存儲引擎為用戶提供了高性價比的存儲介質選擇。
2. IndexingService 寫入性能評測
針對開啟 Indexing Service 的集群和通用商業版集群進行寫入 TPS 對比,對三種不同規格組(2C8GB,4C16GB,8C32GB)進行對比。對比結果顯示:無論在哪個規格組,Indexing Service 的寫入性能比原生 ES 寫入性能提高了7-10倍。
1. 進入阿里雲Elasticsearch 產品控制台
https://elasticsearch.console.aliyun.com/
2. 創建 Elasticsearch 實例
3. 進入阿里雲Elasticsearch 購買頁面
其中有兩種類型的集群供選擇:通用商業版和日誌增強版。日誌增強版提供上面提到的針對日誌場景的內核優化,如果用戶需要存儲日誌數據,並希望享受阿里雲提供的自研能力,可以選擇日誌增強版進行創建。
4. 進行集群配置
用戶可以選擇實例所在區域和可用區。在實例規格欄可以看到提供的冷熱共享資源規格組和自研海量存儲引擎存儲。
5. 進入集群網絡資源配置,選擇專有網絡和虛擬交換機。
6. 設置集群實例名稱、登錄名稱及密碼。
7. 進入訂單確認頁面,注意要勾選服務協議。
8. 通過控制台的 Kibana 訪問 ES 實例。
9.Kibana 可視化控制默認公網無法訪問,因此需要先配置公網的白名單入口。
配置公網訪問的白名單IP:
10. 進入 Kibana 登錄頁面,輸入集群的用戶名和密碼後進入 Kibana 控制台。
11. 在 Kibana 開發工具中進行 ES 集群 API 訪問,如訪問集群元數據,創建索引,創建文檔並插入數據,搜索數據等。
訪問集群元數據:
創建索引:
創建文檔並插入數據:
搜索數據:
12.高級監控和報警功能。
用戶在高級監控頁面可以看到集群層面和節點層面的監控信息,同時可以根據集群或節點的使用水位,配置相應的報警規則。
13. 日誌數據查詢。
為方便集群問題排查,系統提供了集群的日誌展示,包括主日誌,Searching 慢日誌,Indexing 慢日誌,GC 日誌和 ES 訪問日誌。
用戶在搜索框輸入自定義查詢語句和指定時間範圍,即可進行日誌數據查詢。
以上是 Elasticsearch 控制台中的案例體驗 Demo。歡迎大家到阿里雲Elasticsearch 平台進行實例體驗。
阿里雲 ES 團隊積極參與社區建設,與 Elasticsearch 社區和國內團隊緊密合作,基於 Elasticsearch 在雲原生的實踐,推出了包括開發者報告、Elasticsearch 全觀測、技術解析等電子書,對 ES 感興趣的朋友可以多多關注。同時,在 ES 社區也會有豐富的線上線下活動,歡迎大家參與。
