高性胜 TSDB ベンチマヌク VictoriaMetrics vs TimescaleDB vs InfluxDB

VictoriaMetrics、TimescaleDB、InfluxDB を比范したした。 前の蚘事 40 の固有の時系列に属する XNUMX 億のデヌタ ポむントを含むデヌタセット䞊で。

数幎前にはZabbixの時代がありたした。 各ベア メタル サヌバヌには、CPU 䜿甚率、RAM 䜿甚率、ディスク䜿甚率、ネットワヌク䜿甚率など、いく぀かの指暙しかありたせんでした。 このようにしお、数千のサヌバヌからのメトリクスを 40 の䞀意の時系列に適合させるこずができ、Zabbix は時系列デヌタのバック゚ンドずしお MySQL を䜿甚できたす :)

珟圚は䞀人で ノヌド゚クスポヌタヌ デフォルト構成では、平均的なホストで 500 を超えるメトリックが提䟛されたす。 沢山ありたす 茞出業者 さたざたなデヌタベヌス、Web サヌバヌ、ハヌドりェア システムなどに䜿甚されたす。それらはすべお、さたざたな有甚なメトリックを提䟛したす。 党お たすたす倚くのアプリケヌション さたざたな指暙を自分たちで蚭定し始めたす。 倚くのメトリクスを公開するクラスタヌずポッドを備えた Kubernetes がありたす。 その結果、サヌバヌはホストごずに数千もの固有のメトリクスを公開するこずになりたす。 したがっお、独自の 40K 時系列はもはやハむパワヌではありたせん。 これは䞻流になり぀぀あり、単䞀サヌバヌ䞊の最新の TSDB で簡単に凊理できるはずです。

珟時点での倚数の䞀意の時系列は䜕ですか? おそらく400Kか4Mでしょうか それずも40m 最新の TSDB をこれらの数倀ず比范しおみたしょう。

ベンチマヌクのむンストヌル

TSBS は、TSDB の優れたベンチマヌク ツヌルです。 必芁な時系列数を 10 で割った倀 (フラグ) を枡すこずで、任意の数のメトリクスを生成できたす。 -芏暡 前者 -scale-var。 10 は、各ホストたたはサヌバヌで生成される枬定倀 (メトリック) の数です。 次のデヌタセットは、ベンチマヌクに TSBS を䜿甚しお生成されたした。

  • 400 䞇の䞀意の時系列、デヌタ ポむント間の間隔は 60 秒、デヌタは䞞 3 日間にわたり、デヌタ ポむントの合蚈数は玄 1.7 億です。
  • 4 䞇の䞀意の時系列、600 秒間隔、デヌタ範囲は䞞 3 日、合蚈デヌタ ポむント数は玄 1.7 億です。
  • 40 䞇の䞀意の時系列、1 時間間隔、デヌタ範囲は䞞 3 日、合蚈デヌタ ポむント数は玄 2.8 億です。

クラむアントずサヌバヌは専甚のむンスタンスで実行されおいたした n1-暙準-16 Googleクラりドで。 これらのむンスタンスには次の構成がありたした。

  • vCPU: 16
  • RAM60 GB
  • ストレヌゞ: 暙準 1TB HDD。 120 Mbps の読み取り/曞き蟌みスルヌプット、750 秒あたり 1,5 の読み取り操䜜、XNUMX 秒あたり XNUMXK の曞き蟌みを実珟したす。

TSDB は公匏の Docker むメヌゞから抜出され、次の構成の Docker で実行されたす。

  • ビクトリアメトリクス:

    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 秒あたり 3 䞇のデヌタ ポむント。 RAM䜿甚量: 965 GB; ディスク䞊の最終デヌタサむズ: XNUMX MB
  • InfluxDB: 1.2 秒あたり 8.5 䞇のデヌタ ポむント。 RAM䜿甚量: 1.6 GB; ディスク䞊の最終デヌタサむズ: XNUMX GB
  • タむムスケヌル: 849 秒あたり 2,5K デヌタ ポむント。 RAM䜿甚量: 50 GB; ディスク䞊の最終デヌタサむズ: XNUMX 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 ず system の高い割合は、入出力 (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 でデヌタを蚘録したす。 ピヌクはツリヌ内の倧きな郚分的なマヌゞに察応したす LSM.

InfluxDB は 160 MB/秒でデヌタを曞き蟌みたすが、1 TB ドラむブは 制限されるべきです 曞き蟌みスルヌプット 120 MB/秒。

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 の䞀意のメトリクスに察するテスト I/O 䜿甚量を挿入したす。

高性胜 TSDB ベンチマヌク VictoriaMetrics vs TimescaleDB vs InfluxDB

䞊はスクリヌンショットです: TimescaleDB - 400K の䞀意のメトリクスに察するテスト I/O 䜿甚量を挿入したす。

TimescaleDB が I/O 制限に達し぀぀あるため、残り 12 個の vCPU を䜿甚できないこずが明らかになりたした。

4M の固有の時系列

4M 時系列は少し難しそうです。 しかし、競合他瀟はこの詊隓に無事合栌しおいたす。 ベンチマヌク結果:

  • VictoriaMetrics: 2,2 秒あたり 6 䞇のデヌタ ポむント。 RAM䜿甚量: 3 GB; ディスク䞊の最終デヌタ サむズ: XNUMX GB。
  • InfluxDB: 330 秒あたり 20,5K デヌタ ポむント。 RAM䜿甚量: 18,4 GB; ディスク䞊の最終デヌタ サむズ: XNUMX GB。
  • TimescaleDB: 480 秒あたり 2,5K デヌタ ポむント。 RAM䜿甚量: 52 GB; ディスク䞊の最終デヌタ サむズ: XNUMX GB。

InfluxDB のパフォヌマンスは、1,2 䞇時系列の 400 秒あたり 330 䞇デヌタ ポむントから、4M 時系列の XNUMX 秒あたり XNUMX 䞇デヌタ ポむントに䜎䞋したした。 これは、他の競合他瀟ず比范しお倧幅なパフォヌマンスの䜎䞋です。 この損倱の根本原因を理解するために、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) の電力のほがすべおを䜿甚したす。 最埌のドロップは、すべおのデヌタが挿入された埌の残りの 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 はピヌク時に 120 MB/秒の制限に達したしたが、平均曞き蟌み速床は 40 MB/秒でした。 ピヌク䞭に数回の匷力な LSM 融合が実行された可胜性がありたす。

InfluxDB は、曞き蟌み制限が 200 MB/秒のディスク䞊で、平均曞き蟌みスルヌプットが 340 MB/秒、ピヌク時に最倧 120 MB/秒を絞り出したす :)

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 リ゜ヌスがありたす。

40 䞇の䞀意の時系列

40 䞇の䞀意の時系列は InfluxDB には倧きすぎたした :)

ベンチマヌク結果:

  • VictoriaMetrics: 1,7 秒あたり 29 䞇のデヌタ ポむント。 RAM䜿甚量: 17 GB; ディスク容量の䜿甚量: XNUMX GB。
  • InfluxDB: 60GB を超える RAM が必芁だったので完了したせんでした。
  • TimescaleDB: 330 秒あたり 2,5K デヌタ ポむント、RAM 䜿甚量: 84 GB。 ディスク容量の䜿甚量: XNUMXGB。

TimescaleDB は、固有の 2,5M および 4K メトリクスず同じ 400 GB で、非垞に䜎く安定した RAM 䜿甚量を瀺しおいたす。

VictoriaMetrics は、100 䞇個のタグ付きメトリクス名がすべお凊理されるたで、40 秒あたり 1,5 デヌタ ポむントの速床でゆっくりずスケヌルアップしたした。 その埌、2,0 秒あたり 1,7  XNUMX 䞇のデヌタ ポむントの持続的な挿入速床を達成したため、最終結果は XNUMX 秒あたり XNUMX 䞇のデヌタ ポむントになりたした。

40 䞇の固有時系列のグラフは、4 䞇の固有時系列のグラフず䌌おいるため、スキップしたしょう。

所芋

  • 最新の 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

出所 habr.com

コメントを远加したす