高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

VictoriaMetrics、TimescaleDB 和 InfluxDB 的比較 上一篇文章 在一個包含 40 億個資料點且屬於 XNUMXK 個獨特時間序列的資料集上。

幾年前是Zabbix時代。每個裸機伺服器只有幾個指標——CPU 使用率、RAM 使用率、磁碟使用率和網路使用率。這樣,來自數千台伺服器的指標就可以融入 40 個獨特的時間序列,而 Zabbix 可以使用 MySQL 作為時間序列資料的後端:)

目前一個 節點導出器 使用預設配置,普通主機上可提供超過 500 個指標。有許多 出口商 適用於各種資料庫、網路伺服器、硬體系統等。它們都提供了許多有用的指標。全部 越來越多的應用 開始為自己設定各種指標。 Kubernetes 有自己的叢集和 pod,可以揭露大量指標。這會導致伺服器在每個主機上暴露數千個唯一指標。因此,獨特的 40K 時間序列不再具有高功率。它正在成為主流,並且應該可以透過單一伺服器上的任何現代 TSDB 輕鬆處理。

此時大量獨特的時間序列是什麼?大概是 400K 或 4M?還是40米?讓我們將現代 TSDB 與這些圖表進行比較。

安裝基準

特許證券公司 – 是 TSDB 的絕佳基準測試工具。它允許透過傳遞所需時間序列數量除以 10 來產生任意數量的指標 - 標誌 -規模 (以前的 -scale-var)。 10 是每個主機、伺服器上產生的測量(指標)的數量。使用 TSBS 為基準產生了以下資料集:

  • 400K 個唯一時間序列,資料點間隔 60 秒,資料跨越整整 3 天,總資料點約 1.7 億個。
  • 4M 獨特時間序列,600 秒間隔,資料跨越整整 3 天,總資料點約 1.7 億個。
  • 40M 獨特時間序列,1 小時間隔,資料跨越整整 3 天,總資料點約 2.8B。

客戶端和伺服器在專用實例上運行。 n1-標準-16 在谷歌雲中。這些樣本具有以下配置:

  • vCPU:16
  • 內存:60 GB
  • 儲存:標準1TB硬碟。它可提供 120MBps 的讀取/寫入吞吐量、每秒 750 次讀取操作和每秒 1,5K 次寫入操作。

TSDB 是從官方 docker 映像中提取出來的,並在 docker 中運行,配置如下:

  • VictoriaMetrics:

    docker run -it --rm -v /mnt/disks/storage/vmetrics-data:/victoria-metrics-data -p 8080:8080 valyala/victoria-metrics

  • 為了支援高容量,需要使用 InfluxDB 值(-e)。有關詳細信息,請參閱 文件):

    docker run -it --rm -p 8086:8086 
    -e INFLUXDB_DATA_MAX_VALUES_PER_TAG=4000000 
    -e INFLUXDB_DATA_CACHE_MAX_MEMORY_SIZE=100g 
    -e INFLUXDB_DATA_MAX_SERIES_PER_DATABASE=0 
    -v /mnt/disks/storage/influx-data:/var/lib/influxdb influxdb

  • TimescaleDB(配置採用自 文件):

MEM=`free -m | grep "Mem" | awk ‘{print $7}’`
let "SHARED=$MEM/4"
let "CACHE=2*$MEM/3"
let "WORK=($MEM-$SHARED)/30"
let "MAINT=$MEM/16"
let "WAL=$MEM/16"
docker run -it — rm -p 5432:5432 
--shm-size=${SHARED}MB 
-v /mnt/disks/storage/timescaledb-data:/var/lib/postgresql/data 
timescale/timescaledb:latest-pg10 postgres 
-cmax_wal_size=${WAL}MB 
-clog_line_prefix="%m [%p]: [%x] %u@%d" 
-clogging_collector=off 
-csynchronous_commit=off 
-cshared_buffers=${SHARED}MB 
-ceffective_cache_size=${CACHE}MB 
-cwork_mem=${WORK}MB 
-cmaintenance_work_mem=${MAINT}MB 
-cmax_files_per_process=100

資料載入器以 16 個並行執行緒運行。

本文僅包含插入基準的結果。樣本基準測試的結果將在單獨的文章中發布。

400K 個唯一時間序列

讓我們從簡單的元素開始—400K。基準測試結果:

  • VictoriaMetrics:每秒 2,6 萬個資料點; RAM 使用量:3 GB;磁碟上的最終資料大小:965 MB
  • InfluxDB:每秒 1.2M 個資料點; RAM 使用量:8.5 GB;磁碟上的最終資料大小:1.6 GB
  • 時間尺度:每秒 849K 個資料點; RAM 使用量:2,5 GB;磁碟上的最終資料大小:50 GB

從上面的結果可以看出,VictoriaMetrics在插入效能和壓縮率上勝出。時間軸在 RAM 使用方面勝出,但它佔用了大量的磁碟空間——每個資料點 29 位元組。

以下是基準測試期間每個 TSDB 的 CPU 使用率圖表:

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:VictoriaMetrics – 唯一指標 400K 的插入測試期間的 CPU 負載。

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:InfluxDB-400K 個唯一指標插入測試期間的 CPU 負載。

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:TimescaleDB-對唯一指標400K進行插入測試期間的CPU負載。

VictoriaMetrics 利用了所有可用的 vCPU,而 InfluxDB 的 2 個 vCPU 中約 16 個利用不足。

Timescale 僅使用 3 個 vCPU 中的 4-16 個。 TimescaleDB 時間尺度圖上的高 iowait 和系統共用顯示輸入/輸出 (I/O) 子系統存在瓶頸。我們來看看磁碟頻寬使用量圖表:

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:VictoriaMetrics - 400K 唯一計數的插入測試的磁碟頻寬利用率。

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:InfluxDB-400K唯一值的插入測試的磁碟吞吐量使用情況。

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:TimescaleDB-400K唯一值的插入測試的磁碟頻寬使用量。

VictoriaMetrics 以 20 Mbps 的速度記錄數據,峰值高達 45 Mbps。峰值對應於樹中的大型部分合併 非政府組織.

InfluxDB 以 160 MB/s 的速度寫入數據,而 1 TB 磁碟 必須受到限制 寫入吞吐量為120 MB/s。

TimescaleDB 的寫入吞吐量限制為 120 Mbps,但有時它會突破該限制並達到 220 Mbps 的峰值。這些峰值與上圖中 CPU 使用率不足的下降相對應。

讓我們來看看 I/O 使用圖:

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:VictoriaMetrics - 插入測試期間 400K 個唯一指標的 I/O 使用情況。

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:InfluxDB-插入 400K 個唯一指標的測試 IO 使用情況。

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:TimescaleDB - 插入測試期間 400K 個唯一指標的 I/O 使用情況。

現在很明顯,TimescaleDB 已達到其 I/O 限制,因此它無法使用剩餘的 12 個 vCPU。

4M 獨特時間序列

4M 時間序列看起來有點困難。但我們的競爭對手成功通過了這次考驗。基準測試結果:

  • VictoriaMetrics:每秒 2,2 萬個資料點; RAM 使用量:6 GB;磁碟上的最終資料大小:3 GB。
  • InfluxDB:每秒 330K 個資料點; RAM 使用量:20,5 GB;磁碟上的最終資料大小:18,4 GB。
  • TimescaleDB:每秒 480K 個資料點; RAM 使用量:2,5 GB;磁碟上的最終資料大小:52 GB。

InfluxDB 效能從 1,2K 時間序列的 400M 個資料點/秒下降到 330M 時間序列的 4K 個資料點/秒。與其他競爭對手相比,這是一個顯著的性能損失。讓我們來看看 CPU 使用率圖表來了解這種損失的根本原因:

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:VictoriaMetrics - 4M 唯一時間序列插入測試期間的 CPU 使用率。

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:InfluxDB-4M 唯一時間序列插入測試期間的 CPU 使用率。

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:TimescaleDB - 4M 唯一時間序列插入測試期間的 CPU 使用率。

VictoriaMetrics 幾乎使用了您所有的 CPU 能力。最後的 drop 對應於所有資料插入後剩餘的 LSM 合併。

InfluxDB 只使用 8 個 vCPU 中的 16 個,而 TimsecaleDB 使用了 4 個 vCPU 中的 16 個。他們的圖表有哪些共同點?高份額 iowait,這再次表明存在 I/O 瓶頸。

TimescaleDB 佔有率很高 system。我們認為高功率導致了許多系統呼叫或許多 輕微頁面錯誤.

讓我們來看看磁碟吞吐量圖表:

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:VictoriaMetrics - 插入 4M 個唯一指標的磁碟頻寬使用量。

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:InfluxDB-插入 4M 個唯一指標的磁碟頻寬使用量。

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:TimescaleDB-插入 4M 個唯一指標的磁碟頻寬使用量。

VictoriaMetrics 的峰值為 120MB/s,而平均寫入速度為 40MB/s。在高峰期可能發生過幾次大規模的 LSM 合併。

InfluxDB 再次在寫入限制為 200 MB/s 的磁碟上實現了 340 MB/s 的平均寫入吞吐量,峰值高達 120 MB/s :)

TimescaleDB 不再受磁碟限制。似乎受到其他高比例物質的限制 системной CPU 負載。

我們來看看 IO 使用情況圖表:

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:VictoriaMetrics - 4M 唯一時間序列插入測試期間的 I/O 使用情況。

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:InfluxDB-4M 唯一時間序列插入測試期間的 I/O 使用情況。

高效能 TSDB 基準測試 VictoriaMetrics vs TimescaleDB vs InfluxDB

上面的截圖:TimescaleDB - 4M 唯一時間序列插入測試期間的 I/O 使用。

IO 使用情況圖表反映了磁碟頻寬使用量圖表 - InfluxDB 受到 IO 限制,而 VictoriaMetrics 和 TimescaleDB 有足夠的 IO 資源。

40M 獨特時間序列

40M 唯一時間序列對 InfluxDB 來說太大了 🙁

基準測試結果:

  • VictoriaMetrics:每秒 1,7 萬個資料點; RAM 使用量:29 GB;磁碟空間使用量:17 GB。
  • InfluxDB:未完成,因為它需要超過 60GB 的 RAM。
  • TimescaleDB:每秒 330K 個資料點,RAM 使用量:2,5GB;磁碟空間使用量:84GB。

TimescaleDB 顯示 RAM 使用率異常低且穩定,為 2,5GB,與 4M 和 400K 唯一指標相同。

VictoriaMetrics 以每秒 100 萬個數據點的速度緩慢增長,直到處理完所有 40 萬個帶標籤的指標名稱。然後它實現了每秒 1,5-2,0 M 個數據點的穩定插入率,因此最終結果是每秒 1,7 M 個數據點。

40M 唯一時間序列的圖表與 4M 唯一時間序列的圖表類似,因此我們跳過它們。

發現

  • 現代 TSDB 能夠在單一伺服器上處理數百萬個唯一時間序列的插入。在下一篇文章中,我們將測試 TSDB 對數百萬個唯一時間序列的選擇效果如何。
  • 低 CPU 使用率通常表示存在 I/O 瓶頸。此外,它可能表示鎖定太粗糙,一次只能運行幾個執行緒。
  • I/O 瓶頸確實存在,尤其是在非 SSD 儲存中,例如雲端供應商的虛擬化區塊裝置。
  • VictoriaMetrics 針對速度慢、I/O 低的儲存提供了最佳最佳化。它提供最佳的速度和最佳的壓縮比。

下載 VictoriaMetrics 單一伺服器映像 並在您的數據上嘗試。相應的靜態二進位檔案可在以下位置取得: GitHub上.

閱讀有關 VictoriaMetrics 的更多信息 文章.

更新:已發布 比較 VictoriaMetrics 與 InfluxDB 插入效能的文章 具有可重複的結果。

更新#2:另請閱讀 關於垂直可擴展性的文章 VictoriaMetrics vs InfluxDB vs TimescaleDB.

更新 #3: VictoriaMetrics 現已開源!

電報聊天: https://t.me/VictoriaMetrics_ru1

來源: www.habr.com

為具有 DDoS 保護、VPS VDS 服務器的站點購買可靠的主機 🔥 購買具備 DDoS 防護的可靠網站寄存服務,包括 VPS 和 VDS 伺服器 | ProHoster