Benchmarks mit inch einfügen: InfluxDB vs VictoriaMetrics

Kürzlich hat VictoriaMetrics die Unterstützung des Influx-Leitungsprotokolls für die Datenaufnahme von Zeitreihen erhalten. Es ordnet Feldnamen Metriknamen zu, während Messungsnamen zu Messungsbezeichnungswerten wechseln. Diese optimierte Apples-to-Apples-Funktion bietet einen Leistungsvergleich für VictoriaMetrics und InfluxDB. Der Beitrag stellt Benchmark-Ergebnisse für verschiedene Anzahl von eindeutigen Zeitreihen (auch bekannt als verschiedene Kardinalitäten), verschiedene Anzahl von Punkten pro Einfügeanforderung und verschiedene Anzahl von Tags pro Punkt bereit.

Benchmark-Tool

InfluxDB verfügt über ein nützliches Tool zur Messung der Insert-Leistung - influxdata / inch. Mit diesem Tool können unter anderem die folgenden Parameter eingestellt werden:

  • Die Anzahl der Tags und die Anzahl der unterschiedlichen Werte für jedes Tag.
  • Die Anzahl der Felder für jeden Punkt.
  • Die Anzahl der Punkte pro Stapel, die an den Server gesendet wurden.

Diese Parameter können so eingestellt werden, dass verschiedene reale Bedingungen simuliert werden, z. B. die Anzahl der eindeutigen Zeitreihen und die Größe der an den Server gesendeten Anforderungen.

Installieren

Alle Tests wurden auf der folgenden Hardware ausgeführt:

  • CPU: i7–7500U
  • RAM: 16 GB
  • Festplatte: 512 GB SSD

InfluxDB-Version: 1.7.3. Docker-Image wurde aus diesem Repo gezogen.

VictoriaMetrics Version: 1.6.2. Docker-Image wurde aus diesem Repo gezogen.

Die Anzahl der gleichzeitigen Clients: 4.

Gesamtzahl der während jedes Tests eingegebenen Werte: 30 Millionen.

Die folgenden Zeitreihen-Kardinalitäten wurden getestet: 1, 10, 100, 1 K, 10 K, 100 K, 1 M, 2 M, 3 M, 4 M und 10 M.

Die folgenden Chargengrößen wurden getestet: 100, 1 K und 10 K.

Die folgende Anzahl von Feldern wurde getestet: 1 und 10.

Die folgende Anzahl von Tags wurde getestet: 2 und 10.

Sowohl der Client (influxdata / inch) als auch der Server (VictoriaMetrics oder InfluxDB) wurden auf derselben Hardware ausgeführt.

Benchmark-Ergebnisse

Beginnen wir mit 100 Punkten pro Anfrage (auch bekannt als Losgröße: 100):

Auffällige Dinge:

  • VictoriaMetrics übertrifft InfluxDB bei 1–2 Millionen Kardinalitäten um den Faktor 4 bis 5.
  • Die Leistung von InfluxDB sinkt bei 3M- und 4M-Kardinalitäten erheblich. InfluxDB verwendete bei diesen Kardinalitäten einen hohen iowait-CPU-Anteil.
  • InfluxDB hat den 10-Millionen-Kardinalitätstest nicht abgeschlossen, da mehr RAM als der Computer benötigt wurde (mehr als 16 GB).
  • Die Leistung beim Einfügen wird für beide TSDBs beeinträchtigt, wenn die Kardinalität zunimmt.

Als nächstes gehen Sie zu 1K Punkten pro Anfrage:

Auffällige Dinge:

  • Die Einfügeleistung steigt bei größeren Chargen. VictoriaMetrics erreichte 1 Million Punkte pro Sekunde.
  • Während sich die Lücke zwischen der Leistung von VictoriaMetrics und InfluxDB bei Kardinalitäten von 1 bis 100.000 auf das 2,5-fache verkürzte, übertrifft VictoriaMetrics InfluxDB bei 4-facher Kardinalität immer noch um das 7,5-fache.
  • InfluxDB hat den 10-Millionen-Kardinalitätstest wegen hoher RAM-Anforderungen nicht abgeschlossen.

Sehen wir uns die RAM-Nutzung für verschiedene Kardinalitäten an, um zu verstehen, warum InfluxDB den 10-Millionen-Kardinalitätstest für 16 GB RAM nicht abschließen kann:

Wie Sie sehen, sind die RAM-Anforderungen für VictoriaMetrics und InfluxDB für niedrige Kardinalitäten von bis zu 100 KB gleich hoch. Danach steigt der RAM-Appetit von InfluxDB auf 5 GB für 1 Million einmalige Zeitreihen und auf 9 GB für 4 Millionen einmalige Zeitreihen. VictoriaMetrics verwendet 850 MB RAM für 1 MB Kardinalität und 4 GB für 10 MB Kardinalität. Dies bedeutet, dass VictoriaMetrics im Vergleich zu InfluxDB zehnmal mehr unterschiedliche Zeitreihen mit derselben RAM-Größe verarbeiten kann.

Gehen Sie nun zu Chargen mit 10.000 Punkten:

Die Leistung steigt im Vergleich zu Chargen mit 1K-Punkten etwas an.

Alle vorherigen Tests wurden an Punkten mit einem einzigen Feld durchgeführt. Schauen wir uns an, wie die Leistung mit mehr Feldern skaliert.

10 Felder pro Punkt führen zu einer netten Beschleunigung - jetzt erreicht VictoriaMetrics 3,6 Millionen eingefügte Werte pro Sekunde, während InfluxDB 1,5 Millionen eingefügte Werte pro Sekunde erreicht.

Leider konnte InfluxDB nicht mehr als 2 Millionen eindeutige Zeitreihen in 16 GB RAM einpassen. Daher haben 3 Millionen, 4 Millionen und 10 Millionen Kardinalitäten keine Ergebnisse für InfluxDB :(

Und das letzte Diagramm ist für die erhöhte Anzahl von Tags pro Punkt - von 2 auf 10:

Eine erhöhte Anzahl von Tags bedeutet langsamere Einfügungen für VictoriaMetrics und InfluxDB. Außerdem konnte InfluxDB nicht mehr als 1 Million eindeutige Zeitreihen mit einer höheren Anzahl von Tags in den verfügbaren Arbeitsspeicher packen.

Schlussfolgerungen

  • VictoriaMetrics bietet in allen Tests eine bessere Insert-Performance als InfluxDB. Die Leistungslücke zwischen VictoriaMetrics und InfluxDB vergrößert sich mit zunehmender Kardinalität.
  • VictoriaMetrics verwendet bei Zeitreihen mit hoher Kardinalität weniger RAM als InfluxDB.
  • Mit VictoriaMetrics und InfluxDB auf Ihrer Hardware können Sie problemlos Benchmark-Ergebnisse reproduzieren. Führen Sie dazu das Inch-Tool gegen Docker-Container aus. Veröffentlichen Sie Ihre Ergebnisse in Kommentaren.

Rohe Benchmark-Ergebnisse aus diesem Beitrag sind in dieser Tabelle verfügbar. Informationen zur ausgewählten Leistung finden Sie in dieser Tabelle. Kurz gesagt, VictoriaMetrics übertrifft InfluxDB bei allen Abfragen, insbesondere bei umfangreichen Abfragen, die Millionen von Datenpunkten und Tausende von Zeitreihen berühren.

Obwohl der Hauptzweck von VictoriaMetrics der beste Fernspeicher für Prometheus ist, kann die Einzelserverversion von VictoriaMetrics InfluxDB für das Sammeln von Daten von Influx-kompatiblen Agenten wie Telegraf ersetzen. VictoriaMetrics unterstützt natives PromQL, sodass einfachere und dennoch leistungsfähige Abfragen zum Erstellen von Diagrammen aus Zustromdaten im Vergleich zu InfluxQL oder Flux verwendet werden können.

In diesem Artikel finden Sie weitere Informationen zu VictoriaMetrics.

Update: VictoriaMetrics ist jetzt Open Source!