Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

VictoriaMetrics, TimescaleDB dhe InfluxDB u krahasuan në artikulli i mëparshëm me një grup të dhënash me një miliard pikash të dhënash, që i takojnë 40K serive temporale unike.

Disa vite mĂ« parĂ«, ishte epoka e Zabbix. Çdo server bare metal kishte jo mĂ« shumĂ« se disa tregues – pĂ«rdorimi i procesorit, pĂ«rdorimi i memories, pĂ«rdorimi i disku dhe pĂ«rdorimi i rrjetit. KĂ«shtu, metrikat nga mijĂ«ra serverĂ«sh mund tĂ« pĂ«rfshihen nĂ« 40 mijĂ« seri temporale unike, dhe Zabbix mund tĂ« pĂ«rdorĂ« MySQL si backend pĂ«r tĂ« dhĂ«nat e serive temporale 🙂

Aktualisht, një node_exporter me konfigurimet e paracaktuara ofron më shumë se 500 metrika në një host mesatar. Ekzistojnë shumë eksportuesish për baza të ndryshme të të dhënave, servera web, sisteme harduerike etj. Të gjithë ata ofrojnë shumë tregues të dobishëm. Të gjitha më shumë e më shumë aplikacione fillojnë të ekspozojnë tregues të ndryshëm për veten e tyre. Ekziston Kubernetes me klastere dhe pod-e, që zbulojnë shumë metrika. Kjo bën që serverët të ekspozojnë mijëra metrika unike në një host. Kështu, një seri temporale unike 40K nuk është më një fuqi e madhe. Ai bëhet mainstream, që duhet të përpunohen lehtësisht nga çdo TSDB moderne në një server.

ÇfarĂ« Ă«shtĂ« njĂ« numĂ«r i madh i serive temporale unike nĂ« kĂ«tĂ« moment? Ndoshta 400K ose 4M? Ose 40M? Le tĂ« krahasojmĂ« TSDB moderne me kĂ«to shifra.

Vendosja e një benchmarku

TSBS Ă«shtĂ« njĂ« mjet i shkĂ«lqyer pĂ«r benchmarkimin e TSDB-ve. Ai lejon tĂ« gjenerohet njĂ« numĂ«r arbitrar metrikash, duke kaluar sasinĂ« e nevojshme tĂ« serive temporale, tĂ« ndara nĂ« 10 – flamuri -scale (ish -scale-var). 10 Ă«shtĂ« numri i matjeve (metrikave) qĂ« gjenerohen nĂ« çdo host, server. Grupet e mĂ«poshtme tĂ« tĂ« dhĂ«nave u krijuan duke pĂ«rdorur TSBS pĂ«r benchmarkun:

  • 400K seri temporale unike, intervali 60 sekonda mes pikave tĂ« tĂ« dhĂ«nave, tĂ« dhĂ«nat mbulojnĂ« 3 ditĂ« tĂ« plota, ~1.7B numri total i pikave tĂ« tĂ« dhĂ«nave.
  • 4M seri temporale unike, intervali 600 sekonda, tĂ« dhĂ«nat mbulojnĂ« 3 ditĂ« tĂ« plota, ~1.7B numri total i pikave tĂ« tĂ« dhĂ«nave.
  • 40M seri temporale unike, intervali 1 orĂ«, tĂ« dhĂ«nat mbulojnĂ« 3 ditĂ« tĂ« plota, ~2.8B numri total i pikave tĂ« tĂ« dhĂ«nave.

Klienti dhe serveri u ekzekutuan në instance të dedikuara n1-standard-16 në cloud-in Google. Këto instance kishin konfigurime të mëposhtme:

  • vCPUs: 16
  • RAM: 60 GB
  • Storage: standard hard disk with a capacity of 1 TB. It provides a read/write throughput of 120 Mbps, 750 read operations per second, and 1.5K write operations per second.

TSDBs were extracted from official Docker images and launched in Docker with the following configurations:

  • VictoriaMetrics:

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

  • InfluxDB values (- e are required to support high performance. See details in dokumentacionin):

    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 (configuration was adopted from kĂ«tĂ« the file):

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

The data loader was run with 16 parallel threads.

This article contains results only for insertion metrics. Sampling benchmark results will be published in a separate article.

400K unique time series

Let's start with simple elements — 400K. Benchmark results:

  • VictoriaMetrics: 2.6M data points per second; memory usage: 3 GB; final data size on disk: 965 MB
  • InfluxDB: 1.2M data points per second; memory usage: 8.5 GB; final data size on disk: 1.6 GB
  • Timescale: 849K data points per second; memory usage: 2.5 GB; final data size on disk: 50 GB

As you can see from the results above, VictoriaMetrics excels in insertion performance and compression. Timescale excels in memory usage but consumes a lot of disk space — 29 bytes per data point.

Below are the CPU usage charts for each of the TSDBs during the benchmark:

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Above screenshot: VictoriaMetrics — CPU Load during the insertion test for unique metric 400K.

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Above screenshot: InfluxDB — CPU Load during the insertion test for unique metric 400K.

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Above screenshot: TimescaleDB — CPU Load during the insertion test for unique metric 400K.

VictoriaMetrics përdor të gjithë vCPUs e disponueshme, ndërsa InfluxDB nuk e përdor siç duhet ~2 nga 16 vCPUs.

Timescale përdor vetëm 3-4 nga 16 vCPUs. Pjesët e larta të iowait dhe system në grafikët e TimescaleDB tregojnë një ngushticë në nënstrukturën e hyrjes dhe daljes (I/O). Le të shikojmë grafikët e përdorimit të kapacitetit të diskut:

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot i mësipërm: VictoriaMetrics - Përdorimi i kapacitetit të diskut gjatë testit të inserimit për 400K tregues unikë.

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot i mësipërm: InfluxDB - Përdorimi i kapacitetit të diskut gjatë testit të inserimit për 400K tregues unikë.

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot i mësipërm: TimescaleDB - Përdorimi i kapacitetit të diskut gjatë testit të inserimit për 400K tregues unikë.

VictoriaMetrics regjistron të dhëna me një shpejtësi prej 20 Mbit/s me pika deri në 45 Mbit/s. Pikët përputhen me bashkime të mëdha të pjesshme në pemën LSM.

InfluxDB regjistron të dhëna me një shpejtësi prej 160 MB/s, ndërsa 1 TB disku duhet të jetë i kufizuar me kapacitetin e shkarkimit prej 120 MB/s.

TimescaleDB është e kufizuar me kapacitetin e shkarkimit prej 120 Mbit/s, por ndonjëherë e tejkalon këtë kufi dhe arrin në 220 Mbit/s në pika maksimale. Këto pika përputhen me dështime të ngarkesës së pamjaftueshme të procesorit në grafikët e mëparshëm.

Le të shikojmë grafikët e përdorimit të hyrjes dhe daljes (I/O):

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot i mësipërm: VictoriaMetrics - Përdorimi i hyrjes dhe daljes gjatë testit të inserimit për 400K tregues unikë.

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot i mësipërm: InfluxDB - Përdorimi i hyrjes dhe daljes gjatë testit të inserimit për 400K tregues unikë.

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot i mësipërm: TimescaleDB - Përdorimi i hyrjes dhe daljes gjatë testit të inserimit për 400K tregues unikë.

Tani është e qartë se TimescaleDB arrin kufirin e hyrjes dhe daljes, prandaj nuk mund të përdorë 12 vCPUs të mbetura.

4M seritë e kohës unike

4M seritë e kohës duken pak sfiduese. Por konkurrentët tanë e kalojnë me sukses këtë provim. Rezultatet e benchmark-ut:

  • VictoriaMetrics: 2.2M pikĂ« tĂ« dhĂ«nash nĂ« sekondĂ«; pĂ«rdorimi i kujtesĂ«s: 6 GB; pĂ«rmasat pĂ«rfundimtare tĂ« tĂ« dhĂ«nave nĂ« disk: 3 GB.
  • InfluxDB: 330K pikĂ« tĂ« dhĂ«nash nĂ« sekondĂ«; pĂ«rdorimi i kujtesĂ«s: 20.5 GB; pĂ«rmasat pĂ«rfundimtare tĂ« tĂ« dhĂ«nave nĂ« disk: 18.4 GB.
  • TimescaleDB: 480K pikĂ« tĂ« dhĂ«nash nĂ« sekondĂ«; pĂ«rdorimi i kujtesĂ«s: 2.5 GB; pĂ«rmasat pĂ«rfundimtare tĂ« tĂ« dhĂ«nave nĂ« disk: 52 GB.

Performanca e InfluxDB rahet nga 1.2 milion pikë të dhënash në sekondë për 400K seritë e kohës deri në 330 mijë pikë të dhënash në sekondë për 4M seritë e kohës. Kjo është një humbje e konsiderueshme e performancës krahasuar me konkurrentët e tjerë. Le të shohim grafiket e përdorimit të CPU-së për të kuptuar shkakun kryesor të kësaj humbjeje:

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Eposhtme Ă«shtĂ« skrinshoti: VictoriaMetrics — PĂ«rdorimi i CPU gjatĂ« testit tĂ« futur pĂ«r njĂ« seri unike kohe 4M.

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Eposhtme Ă«shtĂ« skrinshoti: InfluxDB — PĂ«rdorimi i CPU gjatĂ« testit tĂ« futur pĂ«r njĂ« seri unike kohe 4M.

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Eposhtme Ă«shtĂ« skrinshoti: TimescaleDB — PĂ«rdorimi i CPU gjatĂ« testit tĂ« futur pĂ«r njĂ« seri unike kohe 4M.

VictoriaMetrics përdor pothuajse gjithë kapacitetin e CPU-së. Rënia në fund i korrespondon bashkimeve LSM pas futur të gjithë të dhënave.

InfluxDB pĂ«rdor vetĂ«m 8 nga 16 vCPUs, ndĂ«rsa TimescaleDB pĂ«rdor 4 nga 16 vCPUs. ÇfarĂ« kanĂ« tĂ« pĂ«rbashkĂ«t grafiket e tyre? NjĂ« pĂ«rqindje e lartĂ« iowait, e cila gjithashtu tregon pĂ«r njĂ« ngushtesĂ« nĂ« hyrje-dalje.

TimescaleDB ka një përqindje të lartë sistem.. Besojmë se fuqia e lartë çoi në shumë thirrje sistemike ose në shumë minor page faults.

Le të shohim grafiket e kapacitetit të diskut:

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Eposhtme Ă«shtĂ« skrinshoti: VictoriaMetrics — PĂ«rdorimi i bandĂ«s sĂ« kapacitetit tĂ« diskut pĂ«r futur 4M metrika unike.

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Eposhtme Ă«shtĂ« skrinshoti: InfluxDB — PĂ«rdorimi i bandĂ«s sĂ« kapacitetit tĂ« diskut pĂ«r futur 4M metrika unike.

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Eposhtme Ă«shtĂ« skrinshoti: TimescaleDB — PĂ«rdorimi i bandĂ«s sĂ« kapacitetit tĂ« diskut pĂ«r futur 4M metrika unike.

VictoriaMetrics arriti një kapacitet prej 120 MB/s në pik, ndërsa shpejtësia mesatare e shkarkimit ishte 40 MB/s. Probabilisht, gjatë pikut u realizuan disa bashkime të rënda LSM.

InfluxDB pĂ«rsĂ«ri shfrytĂ«zon njĂ« kapacitet mesatar tĂ« shkarkimit prej 200 MB/s me pika deri nĂ« 340 MB/s nĂ« njĂ« disk me njĂ« limit shkarkimi prej 120 MB/s 🙂

TimescaleDB nuk është më e kufizuar nga disku. Duket se është e kufizuar nga diçka tjetër që ka lidhje me përqindjen e lartë të ngarkesës sisteme të CPU-së.

Le të shohim grafiket e përdorimit të IO:

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Eposhtme Ă«shtĂ« skrinshoti: VictoriaMetrics — PĂ«rdorimi i hyrje-daljes gjatĂ« testit tĂ« futur pĂ«r njĂ« seri unike kohe 4M.

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Eposhtme Ă«shtĂ« skrinshoti: InfluxDB — PĂ«rdorimi i hyrje-daljes gjatĂ« testit tĂ« futur pĂ«r njĂ« seri unike kohe 4M.

Barem testues TSDB me performancë të lartë VictoriaMetrics vs TimescaleDB vs InfluxDB

Eposhtme Ă«shtĂ« skrinshoti: TimescaleDB — PĂ«rdorimi i hyrje-daljes gjatĂ« testit tĂ« futur pĂ«r njĂ« seri unike kohe 4M.

GrafikĂ«t e pĂ«rdorimit tĂ« IO pĂ«rsĂ«risin grafikĂ«t e pĂ«rdorimit tĂ« gjerĂ«sisĂ« sĂ« brezit tĂ« diskut — InfluxDB Ă«shtĂ« e kufizuar nĂ« IO, ndĂ«rsa VictoriaMetrics dhe TimescaleDB kanĂ« burime tĂ« tepĂ«rta IO.

40M seri unike kohore

40M radhĂ« unike kohore ishin shumĂ« tĂ« mĂ«dha pĂ«r InfluxDB 🙁

Rezultatet e benchmarkut:

  • VictoriaMetrics: 1.7M pika tĂ« dhĂ«nash nĂ« sekondĂ«; pĂ«rdorimi i memorizimit: 29 GB; pĂ«rdorimi i hapĂ«sirĂ«s sĂ« diskut: 17 GB.
  • InfluxDB: nuk pĂ«rfundoi, sepse kĂ«rkonte mĂ« shumĂ« se 60 GB memorie.
  • TimescaleDB: 330K pika tĂ« dhĂ«nash nĂ« sekondĂ«, pĂ«rdorimi i memorizimit: 2.5 GB; pĂ«rdorimi i hapĂ«sirĂ«s sĂ« diskut: 84GB.

TimescaleDB tregon njĂ« pĂ«rdorim tĂ« jashtĂ«zakonshĂ«m tĂ« ulĂ«t dhe tĂ« qĂ«ndrueshĂ«m tĂ« memorizimit – 2.5 GB — sa pĂ«r metrika unike 4M dhe 400K.

VictoriaMetrics u rrit ngadalë me shpejtësinë 100 mijë pikash të dhënash në sekondë, derisa u përpunuan të gjitha 40M emra metrikë me etiketat. Pastaj arriti një shpejtësi të qëndrueshme të futur 1.5-2.0M pikash të dhënash në sekondë, kështu që rezultati përfundimtar ishte 1.7M pika të dhënash në sekondë.

Grafikët për 40M seri unike kohore janë të ngjashëm me grafikët për 4M seri unike kohore, kështu që le t'i skipojmë ato.

Përfundimet

  • TSDB-tĂ« moderne janĂ« nĂ« gjendje tĂ« procesojnĂ« fushata pĂ«r miliona seri unike kohore nĂ« njĂ« server. NĂ« artikullin e ardhshĂ«m, ne do tĂ« shqyrtojmĂ« se sa mirĂ« TSDB-tĂ« pĂ«rfundojnĂ« zgjedhjet pĂ«r miliona seri unike kohore.
  • PĂ«rdorimi i pamjaftueshĂ«m i CPU zakonisht tregon pĂ«r njĂ« ngushticĂ« nĂ« input-output. PĂ«r mĂ« tepĂ«r, kjo mund tĂ« tregojĂ« njĂ« bllokim tĂ« tepĂ«rt, kur vetĂ«m disa inkurzioni mund tĂ« funksionojnĂ« nĂ« tĂ« njĂ«jtĂ«n kohĂ«.
  • Ngushtica e input-output vĂ«rtet egziston, veçanĂ«risht nĂ« depozitĂ« pa SSD, siç janĂ« pajisjet e bllokimit tĂ« virtualizuara tĂ« ofruesve tĂ« cloud.
  • VictoriaMetrics ofron optimizimin mĂ« tĂ« mirĂ« pĂ«r depozitat e ngadalta me input-output tĂ« ulĂ«t. Ai ofron shpejtĂ«sinĂ« mĂ« tĂ« mirĂ« dhe nivelin mĂ« tĂ« mirĂ« tĂ« kompresimit.

Shkarko imazhin e një serveri të vetëm VictoriaMetrics dhe provoje me të dhënat e tua. Skedari statik përkatës është i disponueshëm në GitHub.

Më shumë për VictoriaMetrics lexoni në këtë artikulli ynë.

Përditësim: është publikuar një artikull krahasues që e vlerëson performancën e futjes së VictoriaMetrics me InfluxDB me rezultate të riprodhueshme.

Përditësimi #2: Lexoni gjithashtu artikullin mbi shkallëzimin vertikal VictoriaMetrics vs InfluxDB vs TimescaleDB.

Përditësimi #3: VictoriaMetrics tani me burim të hapur!

Biseda në Telegram: https://t.me/VictoriaMetrics_ru1

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster