0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

可觀測平臺如何存儲時序曲線?滴滴實踐全歷程分享

Linux閱碼場 ? 來源:Linux閱碼場 ? 2023-10-13 16:04 ? 次閱讀

滴滴的時序曲線量從 2017 年 到 2023 年增長了幾十倍。整個過程中我們不斷地調(diào)整和改進以應對這樣的增長。例如時序數(shù)據(jù)庫的選型從最初的 InfluxDB,到 RRDtool,又開發(fā)了內(nèi)存 TSDB 分擔查詢壓力,再到 2020 年開始使用 VictoriaMetrics。載體也從全公司最高配的物理機型到現(xiàn)在的全容器部署。其中經(jīng)歷了很多的思考和取舍,下文將按時間順序,為大家講述這一系列的故事。

2017年 InfluxDB 時代

時序數(shù)據(jù)庫的一哥 InfluxDB,是我們最初選擇的時序數(shù)據(jù)庫。但隨著時序曲線的規(guī)模變大,InfluxDB 的局限性也開始暴露了出來。同時社區(qū)中關(guān)于 InfluxDB OOM 的討論也日益增多,其根本原因就在于熱點寫入和查詢,想象一個命中幾百萬曲線的查詢落在了一個 InfluxDB 實例上,OOM 幾乎是必然的。大家也可以在 InfluxDB 社區(qū)中搜索 OOM,有 400 多個結(jié)果“InfluxDB OOM”。

由于這些問題日益突出,我們不得不重新思考時序數(shù)據(jù)庫的選型。下圖為當時的可觀測系統(tǒng)在 Influxdb 掛掉后,看圖功能的表現(xiàn):

9462bef8-699d-11ee-939d-92fbcf53809c.png

InfluxDBOOM,看圖功能的表現(xiàn)

2017~2018 Open-Falcon 時代

InfluxDB 單機性能有限,集群方案又不開放。盡管我們對 InfluxDB 按照業(yè)務線做了拆分,但仍面臨著單個服務節(jié)點曲線量巨大的情況,對于 InfluxDB 來說難以處理。

在經(jīng)過深入探索和多次試驗后,我們決定采用 Open-Falcon 使用的 RRDtool 存儲方案,在存儲和查詢鏈路,使用相同的一致性哈希算法,將曲線打散到不同的實例中,從而解決了在 InfluxDB 時代因為熱點過高而導致 OOM 的難題。

2018~2020 后 Open-Falcon 時代

直至 2018 年 4月,RRDtool 方案都一直在滴滴運行著。但隨著曲線量的迅速增長,我們又面臨新的問題——成本問題。成本幾乎是每家互聯(lián)網(wǎng)公司在發(fā)展到一定階段都難以回避的問題。特別是作為非贏利產(chǎn)品的可觀測平臺,成本問題尤為突出。甚至自 2017 年之后的三年里,盡管我們的存儲集群內(nèi)存使用率曾高達 90% 以上,仍無法獲取新機器的支援。其中一個原因是,我們需要的機器配置過高,甚至連當時配備的 NVMe 磁盤這種頂配機型的 IO 使用率也超過了 90%。預算委員會完全不相信會有一種服務同時對 CPU、內(nèi)存和 IO 都有如此高的需求。

面對這種困境,我們陷入了兩難境地。一方面是用戶源源不斷的壓力,另一方面是無法滿足存儲所需求機型的要求。

在經(jīng)過一段時間的思考與調(diào)研,我們發(fā)現(xiàn) 80% 以上的查詢請求都集中在最新的 2 個小時內(nèi)。因此,我們嘗試將存儲進行冷熱分層,建設(shè)一個新服務來分擔存儲的壓力,正好在這個時候,我們了解到了 Facebook Gorilla 的論文,于是一個名為 Cacheserver 服務應運而生。

Cacheserver 的設(shè)計靈感來源于 Facebook Gorilla 論文,旨在與原有存儲服務共同承擔請求,只針對最新 2 小時數(shù)據(jù)的查詢請求,大大減輕了 RRDtool 服務集群的壓力。這種冷熱分層的架構(gòu)不僅緩解了存儲成本問題,還提升了整體性能和查詢效率。

9467ca92-699d-11ee-939d-92fbcf53809c.png

Cacheserver 架構(gòu)

2020 ~ 今 VictoriaMetrics 時代

隨著滴滴容器時代的到來,我們面臨著更加艱巨的情況。

首先,隨著容器覆蓋率的不斷提高,時序曲線量瘋狂增長。而 2020 年隨著容器覆蓋率繼續(xù)提升,曲線增長預計會超過 100%。

此外,成本壓力繼續(xù)增大。盡管 RRDtool 架構(gòu)可以橫向擴展,但可觀測自身的成本無法再隨業(yè)務增長而線性增長。

當前 RRDtool 架構(gòu)高需低產(chǎn),必須使用 SSD/NVMe 機型,使用普通磁盤在落盤時會直接 hang 死。而且功能上也僅支持 sum、avg、max、min 等有限的幾個函數(shù),無法滿足用戶日趨豐富的需求。

為節(jié)省存儲空間,當時僅保留 2 小時原始數(shù)據(jù)。而用戶需要更長時間(例如 15天)的原始數(shù)據(jù)進行查看和分析,然而,更改降采策略會帶來 2 個問題:一是 RRDtool 的降采修改會導致所有數(shù)據(jù)丟失。二是存儲 15 天的原始點會使每條曲線存儲空間變?yōu)樵瓉淼?8.5 倍(120KB → 1MB)。

因此從 2020 年初開始,我們開始著手調(diào)研新的方案。需要更高效、靈活的存儲架構(gòu)以應對以上種種問題。

有哪些備選方案?

在選擇新的存儲方案時,我們考慮了多個備選方案,包括:

Druid

Prometheus

Thanos/Cortex

M3

VictoriaMetrics

Druid?

Druid 是滴滴另一套系統(tǒng) Woater 的時序存儲方案,由大數(shù)據(jù)團隊運維。然而,我們最終不考慮 Druid,主要原因如下:

模型不滿足:Woater 的存儲模型是預先定義好的 Schema(Dimensions),而我們需要的是動態(tài) Schema,這是 Druid 原生不支持的,雖然大數(shù)據(jù)團隊表示可以開發(fā)支持,但有著諸多條件限制。

成本問題:將現(xiàn)有數(shù)據(jù)存儲到 Druid 成本將增長 10 倍。

性能問題:Druid 寫入性能還不如 RRDtool,寫入能力較差,因為 Druid 要做 Rollup,而 RRDtool 是直接 Append 數(shù)據(jù)。

“無用”的 Rollup:Druid 的亮點功能 Rollup,對于我們的場景并不適用,因為絕大部分查詢都是針對原始值而非 Rollup 結(jié)果。

Prometheus?

Prometheus 是可觀測領(lǐng)域的事實標準,其存儲模型、DSL 以及生態(tài)都吸引著眾多用戶和企業(yè)的關(guān)注。但在滴滴的場景下,我們也沒有選擇 Prometheus,主要原因在于:

沒有長期存儲:Prometheus 主要專注于對短期數(shù)據(jù)的存儲和查詢,而我們需要長期保留。

沒有集群方案:Prometheus 無內(nèi)置的集群方案,要實現(xiàn)橫向擴展,需要依賴第三方架構(gòu)如 Thanos、Cortex 等,這無疑增加了復雜性。

沒有高可用能力。

盡管針對這些問題,社區(qū)提供了一些解決方案,但在滴滴的體量下,這些解決方案都無法滿足我們的生產(chǎn)化需求。

Thanos、Cortex?

Thanos 和 Cortex 可以說是 Prometheus 當時唯二的,集群化和長期存儲方案。它們的設(shè)計目標都是要解決如下問題:

Global View:可以跨多個 Prometheus 實例進行查詢以實現(xiàn)全局視圖。

Long Term Storage:實現(xiàn)長期存儲以滿足長期分析和回溯的需求。

High Availability。

這些特性使得 Thanos 和 Cortex 成為 Prometheus 生態(tài)中重要的補充。

946f5d16-699d-11ee-939d-92fbcf53809c.png

Thanos 架構(gòu)

947afe64-699d-11ee-939d-92fbcf53809c.png

Cortex 架構(gòu)

但 Thanos/Cortex 也存在一些問題:

Cortex 的存儲結(jié)構(gòu),其內(nèi)部仍在探索當中,還不夠穩(wěn)定,Blocks 在當時還處于 Experimental 狀態(tài)。

Thanos 和 Cortex 均需要引入對象存儲,可能帶來一些額外的管理成本,性能上也要畫一個問號。

Thanos Remote Read 內(nèi)存開銷太多,例如當時有人提出如下圖所示的問題:

9496bf14-699d-11ee-939d-92fbcf53809c.png

Thanos 內(nèi)存問題

缺乏大規(guī)模生產(chǎn)環(huán)境的洗禮:Thanos 和 Cortex,這兩個看似美好的解決方案,都有他們的硬傷。也缺乏大規(guī)模生產(chǎn)環(huán)境的實際驗證,可靠性和穩(wěn)定性可能還需更多的驗證和優(yōu)化。

Uber M3?

M3 是 Uber 開源的 TSDB 解決方案,盡管有一些優(yōu)勢,但也存在一些缺點,包括管理成本高(例如引入 etcd)和機器成本沒有優(yōu)勢(仍需要高配 SSD)。

94a7fcf2-699d-11ee-939d-92fbcf53809c.png

M3 架構(gòu)

VictoriaMetrics?

94b0e574-699d-11ee-939d-92fbcf53809c.png

Victoriametrics 架構(gòu)

VictoriaMetrics 是一個性能高、資源要求和運維成本都比較時序數(shù)據(jù)庫,其主要特色和原理包括:

要求資源低:VictoriaMetrics 可以在普通機型上運行,不需要使用 SSD/NVMe 等高性能硬件

核心存儲模型:基于 LSM,類似 Clickhouse。它將數(shù)據(jù)緩沖在內(nèi)存中,并每秒鐘將其刷寫到磁盤上的分區(qū)目錄中。較小的分區(qū)會在后臺逐漸合并成更大的分區(qū)。

列式存儲:VictoriaMetrics 采用列式存儲,使得讀寫性能非常高,1個CPU核心可以掃描 30M points/s。

寫入速度強:單實例 760K point/s 的寫能力(vs RRDtool 210~260K point/s)。

壓縮:采用改進版 Gorilla 結(jié)合通用壓縮算法(Facebook zstd),平均僅需 1.2~1.5 bytes/point,壓縮比達 13%。

集群容易擴展:采用 Share Nothing 設(shè)計。擴縮容機器方便。機器損壞時還可以自動 Rerouting。

無降采樣:不降采的設(shè)計,使得原始數(shù)據(jù)得以保留。

兼容 Prometheus:在寫入、寫入方式等都兼容 Prometheues。并針對 PromQL 做了增強(MetricsQL)

亂序時間戳的弱支持。

容量可計算:VictoriaMetrics 的容量是可計算的,我們可以更直觀和方便的預估存儲需求。

94bdc2e4-699d-11ee-939d-92fbcf53809c.png

VictoriaMetrics Capacity Planning

如上所述,因為 VictoriaMetrics 在性能、壓縮率、查詢速度和擴展性等方面表現(xiàn)出色。在綜合考慮了各個方面的需求和考慮后,我們認為 VictoriaMetrics 是適合我們的時序數(shù)據(jù)存儲方案,能夠滿足我們的需求。

VictoriaMetrics 的問題及解決方案

盡管 VictoriaMetrics 作為時序數(shù)據(jù)庫解決方案有許多優(yōu)勢,但也存在一些潛在問題,這里列舉幾點并簡要地給出了我們的解決方案:

資源占用問題:磁盤空間占用量與存儲點數(shù)成正比,存儲越多越長的數(shù)據(jù),磁盤空間需求越多。為解決這個問題,我們針對不同的業(yè)務線,設(shè)置了不同的保留時長。

無降采樣:VictoriaMetrics 不支持數(shù)據(jù)降采樣,即不會自動對數(shù)據(jù)進行聚合或丟棄,而是保留原始數(shù)據(jù)。這在某些場景下可能會導致數(shù)據(jù)存儲需求較高,特別是在存儲長期數(shù)據(jù)時。不過,由于 VictoriaMetrics 查詢速度快且壓縮率較高,這個問題并沒有對成本和系統(tǒng)性能造成顯著影響。

活躍度有限、不夠主流:相對于其他一些主流的時序存儲方案,當時 VictoriaMetrics 的活躍度可能還不夠高。然而,通過對代碼的深入了解和與作者的多次交流,我們對VictoriaMetrics 的質(zhì)量和性能表現(xiàn)逐漸建立信心。

多集群 VictoriaMetrics 設(shè)計

我們基于 VictoriaMetrics 設(shè)計并實現(xiàn)了一個多集群方案,旨在提高系統(tǒng)的可擴展性和可用性。例如下圖我們在 region 1 搭建了多套集群,分別處理不同業(yè)務線的數(shù)據(jù),隔離了各業(yè)務線的資源競爭和影響,也縮小了故障域。多個 region 之間也可以選擇 mixer 來實現(xiàn)跨區(qū)域的數(shù)據(jù)讀取和合并。

94d0376c-699d-11ee-939d-92fbcf53809c.png

VictoriaMetrics 多集群設(shè)計

結(jié)尾

以上介紹了滴滴可觀測的時序存儲解決方案的發(fā)展歷程。希望通過這個分享,能夠為其他團隊和開發(fā)者提供一些有益的經(jīng)驗和啟示,也歡迎一起交流和探討。

限于文章篇幅,無法在這里展開更多。例如 VictoriaMetrics 的容器化部署,故障管理,復制,數(shù)據(jù)遷移等。這些內(nèi)容將在后續(xù)的文章中為大家介紹,敬請期待!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3752

    瀏覽量

    64233
  • 架構(gòu)
    +關(guān)注

    關(guān)注

    1

    文章

    506

    瀏覽量

    25430

原文標題:可觀測平臺如何存儲時序曲線?滴滴實踐全歷程分享

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    關(guān)于 eBPF 安全可觀測性,你需要知道的那些事兒

    安全方面的一些思考和心得,本次分享將從監(jiān)控和可觀測性、eBPF 安全可觀測性分析、內(nèi)核安全可觀測性展望三個方面展開。一、eBPF 安全可觀測性的前景展望從下圖可以看到,監(jiān)控只是
    發(fā)表于 09-08 15:31

    基于拓撲分割的網(wǎng)絡(luò)可觀測性分析方法

    針對電力網(wǎng)絡(luò)可觀測性分析問題,對量測網(wǎng)絡(luò)建模、網(wǎng)絡(luò)拓撲可觀測性分析理論、不可觀測節(jié)點的影響范圍等方面進行了研究,提出了一種基于拓撲分割的網(wǎng)絡(luò)可觀測性分析方法,在某42節(jié)點系統(tǒng)上對該方法
    發(fā)表于 03-06 18:03 ?0次下載
    基于拓撲分割的網(wǎng)絡(luò)<b class='flag-5'>可觀測</b>性分析方法

    如何將可觀測性策略與APM工具結(jié)合起來

    獲悉IBM Instana被Gartner評選為2022年度應用性能監(jiān)控(APM)和可觀測性(Observbility)魔力象限的領(lǐng)導者,我與我身邊同事們都與有榮焉。不僅Instana實現(xiàn)了其領(lǐng)先級企業(yè)可觀測平臺的愿景,對我們
    的頭像 發(fā)表于 07-27 11:19 ?1201次閱讀

    介紹eBPF針對可觀測場景的應用

    隨著eBPF推出,由于具有高性能、高擴展、安全性等優(yōu)勢,目前已經(jīng)在網(wǎng)絡(luò)、安全、可觀察等領(lǐng)域廣泛應用,同時也誕生了許多優(yōu)秀的開源項目,如Cilium、Pixie等,而iLogtail 作為阿里內(nèi)外千萬實例可觀測數(shù)據(jù)的采集器,eBPF 網(wǎng)絡(luò)
    的頭像 發(fā)表于 08-11 09:10 ?1516次閱讀

    eBPF安全可觀測性的前景展望

    本次分享將從監(jiān)控和可觀測性、eBPF安全可觀測性分析、內(nèi)核安全可觀測性展望三個方面展開。
    的頭像 發(fā)表于 08-17 11:27 ?1499次閱讀

    六大頂級、開源的數(shù)據(jù)可觀測性工具

    企業(yè)有很多商業(yè)數(shù)據(jù)可觀測性工具可供選擇。商業(yè)工具在可伸縮性、自動化和支持方面具有一些關(guān)鍵優(yōu)勢。然而,數(shù)據(jù)可觀測性的開源工具允許團隊在沒有前期購買(獲得使用許可)成本的情況下試驗數(shù)據(jù)可觀察性功能
    的頭像 發(fā)表于 12-16 11:29 ?1936次閱讀

    基調(diào)聽云攜手道客打造云原生智能可觀測平臺聯(lián)合解決方案

    ,帶來了問題的答案。 近日,上海道客網(wǎng)絡(luò)科技有限公司(簡稱:「DaoCloud 道客」)攜手北京基調(diào)網(wǎng)絡(luò)股份有限公司(簡稱:基調(diào)聽云)推出云原生智能可觀測平臺聯(lián)合解決方案。雙方基于 DaoCloud Enterprise 云操作系統(tǒng)與基調(diào)聽云智能可
    的頭像 發(fā)表于 03-23 11:02 ?638次閱讀

    華為云應用運維管理平臺獲評中國信通院可觀測性評估先進級

    近日,華為云應用運維管理平臺參與了中國信息通信研究院(以下簡稱“中國信通院”)主辦的“穩(wěn)保行動”的可觀測平臺能力評估。經(jīng)過中國信通院的檢驗,華為云應用運維管理平臺滿足云上軟件系統(tǒng)穩(wěn)定
    的頭像 發(fā)表于 07-01 21:16 ?476次閱讀
    華為云應用運維管理<b class='flag-5'>平臺</b>獲評中國信通院<b class='flag-5'>可觀測</b>性評估先進級

    喜訊!基調(diào)聽云可觀測平臺獲評中國信通院根因分析評估先進級

    2023年上半年度的可信云評估結(jié)果。 值得一提的是,在這次大會上,基調(diào)聽云可觀測平臺憑借其穩(wěn)定性和卓越的根因分析能力受到了廣泛關(guān)注?;{(diào)聽云可觀測平臺在中國信通院舉辦的“穩(wěn)保行動”
    的頭像 發(fā)表于 07-26 13:10 ?701次閱讀

    從技術(shù)到商業(yè)價值:基調(diào)聽云智能可觀測平臺能力升級,持續(xù)滿足不斷變化的市場需求

    近日,基調(diào)聽云榮獲2023數(shù)字化創(chuàng)新突破技術(shù)獎項,這是對我們在智能可觀測性領(lǐng)域持續(xù)創(chuàng)新和技術(shù)提升的認可。自基調(diào)聽云智能可觀測平臺發(fā)布上線以來,我們一直致力于為廣大用戶提供更加智能、穩(wěn)定、高效的運維
    的頭像 發(fā)表于 08-21 16:56 ?426次閱讀

    使用APM無法實現(xiàn)真正可觀測性的原因

    控制理論中的可觀測性是指:系統(tǒng)可以由其外部輸出確定其內(nèi)部狀態(tài)的程度。在復雜 IT 系統(tǒng)中,具備可觀測性是為了讓系統(tǒng)能達到某個預定的穩(wěn)定性、錯誤率目標。隨著微服務數(shù)量的急速膨脹和云原生基礎(chǔ)設(shè)施的快速演進,建設(shè)可觀測性已經(jīng)成為了保障
    的頭像 發(fā)表于 09-18 10:23 ?854次閱讀
    使用APM無法實現(xiàn)真正<b class='flag-5'>可觀測</b>性的原因

    什么是多云? 為什么我們需要多云可觀測性 (Observability)?

    什么是多云? 為什么我們需要多云可觀測性 (Observability)?
    的頭像 發(fā)表于 10-12 17:12 ?591次閱讀
    什么是多云? 為什么我們需要多云<b class='flag-5'>可觀測</b>性 (Observability)?

    如何構(gòu)建APISIX基于DeepFlow的統(tǒng)一可觀測性能力呢?

    隨著應用組件的可觀測性逐漸受到重視,Apache APISIX 引入插件機制豐富了可觀測數(shù)據(jù)源。
    的頭像 發(fā)表于 01-18 10:11 ?880次閱讀
    如何構(gòu)建APISIX基于DeepFlow的統(tǒng)一<b class='flag-5'>可觀測</b>性能力呢?

    華為云發(fā)布可觀測平臺 AOM,以 AI 賦能應用運維可觀測

    9 月 19 日,華為聯(lián)接大會 2024 舉辦期間,在“ AI 賦能應用現(xiàn)代化,加速軟件生產(chǎn)力躍升”為主題的論壇上,華為云發(fā)布可觀測平臺AOM ,以 AI 賦能應用運維
    的頭像 發(fā)表于 10-15 09:54 ?417次閱讀
    華為云發(fā)布<b class='flag-5'>全</b>棧<b class='flag-5'>可觀測</b><b class='flag-5'>平臺</b> AOM,以 AI 賦能應用運維<b class='flag-5'>可觀測</b>

    【質(zhì)量視角】可觀測性背景下的質(zhì)量保障思路

    目前質(zhì)量團隊正在積極建設(shè)和完善應用監(jiān)控能力,旨在能及時發(fā)現(xiàn)并解決問題,為線上服務穩(wěn)定性保駕護航。隨著可觀測性概念的逐漸普及,監(jiān)控的建設(shè)也有了新的挑戰(zhàn)和使命。本文將探討在可觀測性背景下,作為一個測試
    的頭像 發(fā)表于 10-25 17:21 ?182次閱讀
    【質(zhì)量視角】<b class='flag-5'>可觀測</b>性背景下的質(zhì)量保障思路