Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

VictoriaMetrics, TimescaleDB en InfluxDB is vergelyk in vorige artikel oor 'n datastel met 'n miljard datapunte wat aan 40K unieke tydreekse behoort.

'n Paar jaar gelede was die era van Zabbix. Elke kaalmetaalbediener het nie meer as 'n paar maatstawwe gehad nie - SVE-gebruik, RAM-gebruik, skyfgebruik en netwerkgebruik. Metrieke van duisende bedieners kan dus in 40 duisend unieke tydreekse pas, en Zabbix kan MySQL as 'n backend vir tydreeksdata gebruik 🙂

Tans een node_uitvoerder met verstekkonfigurasies bied meer as 500 statistieke op 'n gemiddelde gasheer. Daar is baie uitvoerders vir verskeie databasisse, webbedieners, hardewarestelsels, ens. Almal verskaf baie nuttige statistieke. Almal meer en meer toepassings begin om verskeie aanwysers op hulself uit te stal. Daar is Kubernetes met trosse en peule wat baie metrieke blootlê. Dit veroorsaak dat bedieners duisende unieke statistieke per gasheer blootstel. Die unieke 40K-tydreeks is dus nie meer hoë krag nie. Dit word hoofstroom, wat maklik deur enige moderne TSDB op 'n enkele bediener hanteer moet word.

Wat is 'n groot aantal unieke tydreekse op die oomblik? Seker 400K of 4M? Of 40m? Kom ons vergelyk moderne TSDB's met hierdie getalle.

Benchmark installasie

TSBS is 'n wonderlike maatstafinstrument vir TSDB's. Dit laat jou toe om 'n arbitrêre aantal metrieke te genereer deur die vereiste aantal tydreekse gedeel deur 10 - vlag deur te gee -skaal (voormalige -scale-var). 10 is die aantal metings (metrieke) wat op elke gasheer, bediener gegenereer word. Die volgende datastelle is geskep met behulp van TSBS vir benchmarking:

  • 400K unieke tydreekse, 60 sekondes interval tussen datapunte, data strek oor 'n volle 3 dae, ~1.7B totale datapunte.
  • 4M unieke tydreekse, 600 sekondes interval, data strek oor 'n volle 3 dae, ~1.7B totale datapunte.
  • 40M unieke tydreekse, 1 uur interval, data strek oor 'n volle 3 dae, ~2.8B totale aantal datapunte.

Die kliënt en bediener het op toegewyde instansies gehardloop n1-standaard-16 in die Google-wolk. Hierdie gevalle het die volgende konfigurasies gehad:

  • vCPU's: 16
  • RAM: 60 GB
  • Berging: Standaard 1TB hardeskyf. Dit bied 120Mbps lees/skryf deurvoer, 750 lees per sekonde, en 1,5K skryf per sekonde.

Die TSDB's is uit die amptelike docker-beelde getrek en loop op docker met die volgende konfigurasies:

  • VictoriaMetrics:

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

  • InfluxDB (-e) waardes word vereis om hoë kardinaliteit te ondersteun. Sien besonderhede in dokumentasie):

    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 (konfigurasie is geneem uit van hierdie lêer):

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

Die datalaaier is met 16 parallelle drade begin.

Hierdie artikel bevat slegs resultate vir invoegmaatstawwe. Die resultate van die selektiewe maatstaf sal in 'n aparte artikel gepubliseer word.

400K unieke tydreekse

Kom ons begin met eenvoudige elemente - 400K. Maatstaf resultate:

  • VictoriaMetrics: 2,6M datapunte per sekonde; RAM-gebruik: 3 GB; finale datagrootte op skyf: 965 MB
  • InvloeiDB: 1.2M datapunte per sekonde; RAM-gebruik: 8.5 GB; finale datagrootte op skyf: 1.6 GB
  • Tydskaal: 849K datapunte per sekonde; RAM-gebruik: 2,5 GB; finale datagrootte op skyf: 50 GB

Soos u uit die resultate hierbo kan sien, wen VictoriaMetrics in insetwerkverrigting en kompressieverhouding. Die tydlyn wen in RAM-gebruik, maar dit gebruik baie skyfspasie - 29 grepe per datapunt.

Hieronder is grafieke van SVE-gebruik vir elk van die TSDB's tydens die maatstaf:

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bogenoemde skermkiekie: VictoriaMetrics - Voeg toets SVE-gebruik in vir 400K unieke metrieke.

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bogenoemde skermkiekie: InfluxDB - SVE-gebruik op invoegtoets vir 400K unieke metrieke.

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bogenoemde skermkiekie: TimescaleDB - SVE-gebruik op invoegtoets vir 400K unieke metrieke.

VictoriaMetrics gebruik alle beskikbare vCPU's terwyl InfluxDB ~2 uit 16 vCPU's onderbenut.

Tydskaal gebruik slegs 3-4 uit 16 vCPU's. Die hoë proporsies van iowait en stelsel in die TimescaleDB tydskaalgrafiek dui op 'n bottelnek in die inset/afvoer (I/O) substelsel. Kom ons kyk na die skyfbandwydtegebruikgrafieke:

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bogenoemde skermkiekie: VictoriaMetrics - Voeg toetsskyfbandwydtegebruik in vir 400K unieke statistieke.

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bogenoemde skermkiekie: InfluxDB - Voeg toetsskyfbandwydtegebruik in vir 400K unieke statistieke.

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bogenoemde skermkiekie: TimescaleDB - Voeg toetsskyfbandwydtegebruik in vir 400K unieke statistieke.

VictoriaMetrics neem data op teen 20 Mbps met pieke tot 45 Mbps. Pieke stem ooreen met groot gedeeltelike samesmeltings in die boom NRO's.

InfluxDB skryf data teen 160MB/s terwyl 'n 1TB skyf beperk moet word skryfbandwydte van 120 MB/s.

TimescaleDB is beperk tot 120 Mbps skryf deurset, maar soms breek dit daardie limiet en bereik 'n hoogtepunt van 220 Mbps. Hierdie pieke stem ooreen met die onderbenuttingsdalings in die vorige grafiek.

Kom ons kyk na die I/O-gebruikgrafieke:

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bo-skermkiekie: VictoriaMetrics - Voeg toets I/O-gebruik in vir 400K unieke statistieke.

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bo-skermkiekie: InfluxDB - Voeg toets I/O-gebruik in vir 400K unieke statistieke.

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bogenoemde skermkiekie: TimescaleDB - Voeg toets I/O-gebruik in vir 400K unieke statistieke.

Nou is dit duidelik dat TimescaleDB die I/O-limiet bereik, sodat dit nie die oorblywende 12 vCPU's kan gebruik nie.

4M unieke tydreekse

4M tydreekse lyk 'n bietjie uitdagend. Maar ons mededingers slaag hierdie eksamen suksesvol. Maatstaf resultate:

  • VictoriaMetrics: 2,2M datapunte per sekonde; RAM-gebruik: 6 GB; finale datagrootte op skyf: 3 GB.
  • InvloeiDB: 330K datapunte per sekonde; RAM-gebruik: 20,5 GB; finale datagrootte op skyf: 18,4 GB.
  • TydskaalDB: 480K datapunte per sekonde; RAM-gebruik: 2,5 GB; finale datagrootte op skyf: 52 GB.

InfluxDB-prestasie het gedaal van 1,2M datapunte per sekonde vir 'n 400K tydreeks tot 330K datapunte per sekonde vir 'n 4M tydreeks. Dit is 'n aansienlike prestasieverlies in vergelyking met ander mededingers. Kom ons kyk na die SVE-gebruikgrafieke om die hoofoorsaak van hierdie verlies te verstaan:

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bogenoemde skermkiekie: VictoriaMetrics - Voeg toets CPU-gebruik in vir unieke 4M-tydreekse.

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bogenoemde skermkiekie: InfluxDB - Voeg toets CPU-gebruik in vir 4M unieke tydreekse.

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bogenoemde skermkiekie: TimescaleDB - Voeg toets CPU-gebruik in vir unieke 4M-tydreekse.

VictoriaMetrics gebruik byna al die verwerkingskrag (CPU). Die druppel aan die einde stem ooreen met die oorblywende LSM-samesmeltings nadat al die data ingevoeg is.

InfluxDB gebruik slegs 8 uit 16 vCPU's terwyl TimsecaleDB 4 uit 16 vCPU's gebruik. Wat het hul kaarte in gemeen? hoë aandeel iowait, wat weer 'n I/O-bottelnek aandui.

TimescaleDB het 'n hoë aandeel system. Ons glo dat hoë krag tot baie stelseloproepe of tot baie gelei het geringe bladsyfoute.

Kom ons kyk na die skyfbandwydtegrafieke:

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bogenoemde skermkiekie: VictoriaMetrics - Skyfbandwydtegebruik om 4M unieke statistieke in te voeg.

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bogenoemde skermkiekie: InfluxDB - Skyfbandwydtegebruik om 4M unieke statistieke in te voeg.

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bogenoemde skermkiekie: TimescaleDB - Skyfbandwydtegebruik om 4M unieke statistieke in te voeg.

VictoriaMetrics het 'n hoogtepunt bereik van 120MB/s terwyl die gemiddelde skryfspoed 40MB/s was. Daar was waarskynlik verskeie swaar LSM-samesmeltings tydens die piek uitgevoer.

InfluxDB druk weer 'n gemiddelde skryf deurset van 200MB/s uit met pieke tot 340MB/s op 'n skyf met 'n 120MB/s skryflimiet :)

TimescaleDB is nie meer skyfbeperk nie. Dit lyk of dit beperk word deur iets anders wat verband hou met die hoë verhouding системной SVE-lading.

Kom ons kyk na die IO-gebruiksgrafieke:

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bo-skermkiekie: VictoriaMetrics - I/O-gebruik tydens invoegingstoets vir 4M unieke tydreekse.

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bo-skermkiekie: InfluxDB - I/O-gebruik tydens invoegtoets vir 4M unieke tydreekse.

Hoëprestasie TSDB maatstaf VictoriaMetrics vs TimescaleDB vs InfluxDB

Bo-skermkiekie: TimescaleDB - I/O-gebruik tydens invoegtoets vir 4M unieke tydreekse.

Die IO-gebruikgrafieke weerspieël die skyfbandwydtegebruikgrafieke - InfluxDB is IO beperk, terwyl VictoriaMetrics en TimescaleDB spaar IO IO-hulpbronne het.

40M unieke tydreekse

40M unieke tydreekse was te groot vir InfluxDB 🙁

Maatstaf resultate:

  • VictoriaMetrics: 1,7M datapunte per sekonde; RAM-gebruik: 29 GB; skyfspasiegebruik: 17 GB.
  • InfluxDB: het nie klaargemaak nie, want dit het meer as 60 GB RAM benodig.
  • TydskaalDB: 330K datapunte per sekonde, RAM-gebruik: 2,5 GB; skyfspasiegebruik: 84GB.

TimescaleDB toon buitengewone lae en stabiele RAM-gebruik van 2,5 GB, dieselfde as vir die unieke 4M en 400K statistieke.

VictoriaMetrics het stadig toegeneem teen 'n tempo van 100 40 datapunte per sekonde totdat alle 1,5M gemerkte metrieke name verwerk is. Dit het toe 'n bestendige invoegtempo van 2,0-1,7M datapunte per sekonde behaal, sodat die eindresultaat XNUMXM datapunte per sekonde was.

Die plotte vir 40M unieke tydreekse is soortgelyk aan dié vir 4M unieke tydreekse, so kom ons slaan dit oor.

Bevindinge

  • Moderne TSDB's is in staat om insetsels vir miljoene unieke tydreekse op 'n enkele bediener te hanteer. In die volgende artikel sal ons toets hoe goed TSDB's seleksie uitvoer oor miljoene unieke tydreekse.
  • Onvoldoende SVE-gebruik dui gewoonlik op 'n I/O-bottelnek. Daarbenewens kan dit dui op te growwe blokkering, wanneer slegs 'n paar drade gelyktydig kan werk.
  • Die I/O-bottelnek bestaan ​​wel, veral in nie-SSD-berging soos wolkverskaffers se gevirtualiseerde bloktoestelle.
  • VictoriaMetrics bied die beste optimalisering vir stadige, lae I/O-berging. Dit bied die beste spoed en die beste kompressieverhouding.

aflaai VictoriaMetrics Enkelbedienerbeeld en probeer dit op jou data. Die ooreenstemmende statiese binêre is beskikbaar by GitHub.

Lees meer oor VictoriaMetrics hierin Artikel.

Opdatering: gepubliseer artikel wat VictoriaMetrics-insetselprestasie met InfluxDB vergelyk met reproduceerbare resultate.

Opdatering #2: Lees ook vertikale skaalbaarheidsartikel VictoriaMetrics vs InfluxDB vs TimescaleDB.

Opdatering #3: VictoriaMetrics is nou oopbron!

Telegram-klets: https://t.me/VictoriaMetrics_ru1

Bron: will.com

Voeg 'n opmerking