Elasticsearch(ES)作為開源首選的分布式搜索分析引擎,通過一套系統輕松滿足用戶的日志實時分析、全文檢索、結構化數據分析等多種需求,大幅降低大數據時代挖掘數據價值的成本。騰訊在公司內部豐富的場景中大規模使用 ES,同時聯合 Elastic 公司在騰訊云上提供內核增強版的 ES 云服務,大規模、豐富多樣的的使用場景推動著騰訊對原生 ES 進行持續的高可用、高性能、低成本優化。
一、ES 在騰訊的應用場景
【ES 在騰訊的應用場景】
最初我們使用 ES 于日志實時分析場景,典型日志如下:
運營日志,比如慢日志、異常日志,用來定位業務問題;
業務日志,比如用戶的點擊、訪問日志,可以用來分析用戶行為;
審計日志,可以用于安全分析。ES 很完美的解決了日志實時分析的需求,它具有如下特點:
Elastic 生態提供了完整的日志解決方案,任何一個開發、運維同學使用成熟組件,通過簡單部署,即可搭建起一個完整的日志實時分析服務。
在 Elastic 生態中,日志從產生到可訪問一般在 10s 級。相比于傳統大數據解決方案的幾十分鐘、小時級,時效性非常高。
由于支持倒排索引、列存儲等數據結構,ES 提供非常靈活的搜索分析能力。
支持交互式分析,即使在萬億級日志的情況下,ES 搜索響應時間也是秒級。
日志是互聯網行業最基礎、最廣泛的數據形式,ES 非常完美的解決了日志實時分析場景,這也是近幾年 ES 快速發展的一個重要原因。
第二類使用場景是搜索服務,典型場景包含:商品搜索,類似京東、淘寶、拼多多中的商品搜索;APP 搜索,支持應用商店里的應用搜索;站內搜索,支持論壇、在線文檔等搜索功能。我們支持了大量搜索服務,它們主要有以下特點:
高性能:單個服務最大達到 10w+ QPS,平響 20ms~,P95 延時小于 100ms。
強相關:搜索體驗主要取決于搜索結果是否高度匹配用戶意圖,需要通過正確率、召回率等指標進行評估。
高可用:搜索場景通常要求 4 個 9 的可用性,支持單機房故障容災。任何一個電商服務,如淘寶、京東、拼多多,只要故障一個小時就可以上頭條。
第三類使用場景是時序數據分析,典型的時序數據包含:Metrics,即傳統的服務器監控;APM,應用性能監控;物聯網數據,智能硬件、工業物聯網等產生的傳感器數據。這類場景騰訊很早就開始探索,在這方面積累了非常豐富的經驗。這類場景具有以下特點:
高并發寫入:線上單集群最大規模達到 600+節點、1000w/s 的寫入吞吐。
高查詢性能:要求單條曲線 或者單個時間線的查詢延時在 10ms~。
多維分析:要求靈活、多維度的統計分析能力,比如我們在查看監控的時候,可以按照地域、業務模塊等靈活的進行統計分析。
二、遇到的挑戰
前面我們介紹了 ES 在騰訊內部的廣泛應用,在如此大規模、高壓力、豐富使用場景的背景下,我們遇到了很多挑戰,總體可以劃分為兩類:搜索類和時序類。
首先,我們一起看看搜索類業務的挑戰。以電商搜索、APP 搜索、站內搜索為代表,這類業務非常重視可用性,服務 SLA 達到 4 個 9 以上,需要容忍單機故障、單機房網絡故障等;同時要求高性能、低毛刺,例如 20w QPS、平響 20ms、P95 延時 100ms。總之,在搜索類業務場景下,核心挑戰點在于高可用、高性能。
另一類我們稱之為時序類業務挑戰,免備案服務器,包含日志、Metrics、APM 等場景。相比于搜索類業務重點關注高可用、高性能,時序類業務會更注重成本、性能。比如時序場景用戶通常要求高寫入吞吐,部分場景可達 1000w/s
WPS;在這樣寫入吞吐下,保留 30 天的數據,通常可達到 PB 級的存儲量。而現實是日志、監控等場景的收益相對較低,很可能用戶用于線上實際業務的機器數量才是 100 臺,而監控、日志等需要 50 臺,這對多數用戶來說,基本是不可接受的。所以在時序類業務中,主要的挑戰在于存儲成本、計算成本等方面。
前面我們介紹了在搜索類、時序類業務場景下遇到的高可用、低成本、高性能等挑戰,下面針對這些挑戰,我們重點分享騰訊在 ES 內核方面的深入實踐。
三、ES 優化實踐
首先,我們來看看高可用優化,我們把高可用劃分為三個維度: