Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

VictoriaMetrics, TimescaleDB dhe InfluxDB janë krahasuar në artikulli i mëparshëm me një set të dhënash që përfshin një miliard pikash të dhënash, që i përkasin 40K serive unike temporale.

Disa vite mĂ« parĂ« ishte epoka e Zabbix. Çdo server bare metal kishte maksimum disa indikatorĂ« – pĂ«rdorimi i procesorit, pĂ«rdorimi i memorisĂ«, pĂ«rdorimi i diskut dhe pĂ«rdorimi i rrjetit. KĂ«shtu, metrikat nga mijĂ«ra serverĂ« mund tĂ« pĂ«rfshihen nĂ« 40 mijĂ« seri unike temporale, 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 bazat e të dhënave të ndryshme, serverët e uebit, sistemet harduerike etj. Të gjitha ofrojnë shumë indikatorë të dobishëm. Të gjitha më shumë e më shumë aplikacione fillojnë të nxjerrin tregues të ndryshëm. Ka Kubernetes me klasterë dhe pod-e që zbulojnë shumë metrika. Kjo çon në atë që serverët nxjerrin mijëra metrika unike për hostin. Në këtë mënyrë, një seri e vetme kohore 40K nuk është më një kapacitet i lartë. Ai bëhet mainstream, i cili duhet të përballohet lehtë nga çdo TSDB moderne në një server.

Cila është sasia e madhe e serive unike kohore aktualisht? Ndoshta 400K ose 4M? Ose 40m? Le të krahasojmë TSDB-të moderne me këto numra.

Vendosja e benchmark-ut

TSBS është një mjet i shkëlqyer për të bërë benchmarking për TSDB. Ai lejon gjenerimin e një numri të shtegtueshëm të metrikeve, duke transmetuar numrin e nevojshëm të serive kohore, të ndara në 10 - flamuri -scale (ish -scale-var). 10 është numri i matjeve (metrikeve) që gjenerohen në çdo host, server. Grumbujt e mëposhtëm të të dhënave u krijuan me ndihmën e TSBS për benchmark-un:

  • 400K seri unike kohore, intervali 60 sekonda midis pikave tĂ« dhĂ«nash, tĂ« dhĂ«nat mbulojnĂ« plot 3 ditĂ«, ~1.7B numri i pĂ«rgjithshĂ«m i pikave tĂ« dhĂ«nash.
  • 4M serit tĂ« veçantĂ«, intervali 600 sekonda, tĂ« dhĂ«nat mbulojnĂ« plot 3 ditĂ«, ~1.7B numri total i pikave tĂ« tĂ« dhĂ«nave.
  • 40M serit tĂ« veçantĂ«, intervali 1 orĂ«, tĂ« dhĂ«nat mbulojnĂ« plot 3 ditĂ«, ~2.8 B numri total i pikave tĂ« tĂ« dhĂ«nave.

Klienti dhe serveri u aktivizuan në instancat e dedikuara. n1-standard-16 në cloudin Google. Këto instance kishin konfigurimet e mëposhtme:

  • vCPUs: 16
  • RAM: 60 GB
  • Ruan: disk i ngurtĂ« standard me kapacitet 1 TB. Ai siguron bandwidth leximi/shkrimi 120 Mbit/s, 750 operacione leximi nĂ« sekondĂ« dhe 1.5K operacione shkrimi nĂ« sekondĂ«.

TSDB-të u nxorrën nga imazhet zyrtare docker dhe u aktivizuan në docker me konfigurimet e mëposhtme:

  • VictoriaMetrics:

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

  • Vlerat InfluxDB (-e janĂ« tĂ« nevojshme pĂ«r mbĂ«shtetje tĂ« energjisĂ« sĂ« lartĂ«. Detajet shihni nĂ« dokumentacion):

    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 (konfigurimi u mor nga ky 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

Ngarkuesi i të dhënave u nis me 16 rrjedha paralel.

Ky artikull përmban vetëm rezultatet për treguesit e futjes. Rezultatet e testimit të mostrave do të publikohen në një artikull të veçantë.

400K seritë unike të kohës

Le tĂ« fillojmĂ« me elementĂ«t e thjeshtĂ« — 400K. Rezultatet e testimit:

  • VictoriaMetrics: 2,6M pika tĂ« dhĂ«nash nĂ« sekondĂ«; pĂ«rdorimi i memories: 3 GB; madhĂ«sia pĂ«rfundimtare e tĂ« dhĂ«nave nĂ« disk: 965 MB
  • InfluxDB: 1.2M pika tĂ« dhĂ«nash nĂ« sekondĂ«; pĂ«rdorimi i memories: 8.5 GB; madhĂ«sia pĂ«rfundimtare e tĂ« dhĂ«nave nĂ« disk: 1.6 GB
  • Timescale: 849K pika tĂ« dhĂ«nash nĂ« sekondĂ«; pĂ«rdorimi i memories: 2,5 GB; madhĂ«sia pĂ«rfundimtare e tĂ« dhĂ«nave nĂ« disk: 50 GB

Siç e shihni nga rezultatet e mĂ«sipĂ«rme, VictoriaMetrics Ă«shtĂ« pĂ«rparuar nĂ« performancĂ«n e vendosjes dhe shkallĂ«n e kompresimit. TĂ« dhĂ«nat e linjĂ«s sĂ« kohĂ«s pĂ«rdorin mĂ« shumĂ« memorje, por kĂ«rkojnĂ« shumĂ« hapĂ«sirĂ« disku — 29 byte pĂ«r pikĂ«n e tĂ« dhĂ«nave.

Më poshtë janë grafiket e përdorimit të CPU për secilin nga TSDB gjatë testit të benchmarkut:

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot mĂ« lart: VictoriaMetrics — Ngarkesa e CPU gjatĂ« testit tĂ« vendosjes pĂ«r njĂ« metrikĂ« unike 400K.

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot mĂ« lart: InfluxDB — Ngarkesa e CPU gjatĂ« testit tĂ« vendosjes pĂ«r njĂ« metrikĂ« unike 400K.

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot mĂ« lart: TimescaleDB — Ngarkesa e CPU gjatĂ« testit tĂ« vendosjes pĂ«r njĂ« metrikĂ« unike 400K.

VictoriaMetrics përdor të gjitha vCPU-të e disponueshme, ndërsa InfluxDB përdor vetëm rreth 2 nga 16 vCPU-të.

Timescale përdor vetëm 3-4 nga 16 vCPU-të. Shkallët e larta të iowait dhe sistemit në grafikun e TimescaleDB tregojnë një ngushtesë në nënstacionin e hyrjes-dalitjes (I/O). Le të hedhim një vështrim në grafiket e përdorimit të kapacitetit të diskut:

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot mĂ« lart: VictoriaMetrics — PĂ«rdorimi i kapacitetit tĂ« diskut gjatĂ« testit tĂ« vendosjes pĂ«r metrika unike 400K.

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot i lartem: InfluxDB — PĂ«rdorimi i kapacitetit tĂ« diskut gjatĂ« provĂ«s sĂ« inserimit pĂ«r metrikat unike 400K.

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot i lartem: TimescaleDB — PĂ«rdorimi i kapacitetit tĂ« diskut gjatĂ« provĂ«s sĂ« inserimit pĂ«r metrikat unike 400K.

VictoriaMetrics regjistron të dhëna me shpejtësi 20 Mbit/s me pika deri në 45 Mbit/s. Pikat korrespondojnë me bashkime të mëdha pjesore në pemë. LSM.

InfluxDB regjistron të dhëna me shpejtësi 160 MB/s, ndërsa një disk nga 1 TB duhet të jetë i kufizuar në kapacitetin e shkrimit 120 MB/s.

TimescaleDB është e kufizuar në kapacitetin e shkrimit 120 Mbit/s, por ndonjëherë e kalon këtë kufi dhe arrin 220 Mbit/s në pikat maksimale. Këto pika korrespondojnë me dështime të ngarkesës së pamjaftueshme të procesorit në grafikun e mëparshëm.

Le të shikojmë grafiku i përdorimit të input-output (I/O):

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot i lartem: VictoriaMetrics — PĂ«rdorimi i input-output gjatĂ« provĂ«s sĂ« inserimit pĂ«r 400K metrika unike.

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot i lartem: InfluxDB — PĂ«rdorimi i input-output gjatĂ« provĂ«s sĂ« inserimit pĂ«r 400K metrika unike.

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshot i lartem: TimescaleDB — PĂ«rdorimi i input-output gjatĂ« provĂ«s sĂ« inserimit pĂ«r 400K metrika unike.

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

4M seri të veçanta temporale

4M seri temporale duken pak provokuese. Por konkurrentët tanë e kalojnë këtë provim me sukses. Rezultatet e testit:

  • VictoriaMetrics: 2.2M pika tĂ« dhĂ«nash nĂ« sekondĂ«; pĂ«rdorimi i memories: 6 GB; madhĂ«sia pĂ«rfundimtare e tĂ« dhĂ«nave nĂ« disk: 3 GB.
  • InfluxDB: 330K pika tĂ« dhĂ«nash nĂ« sekondĂ«; pĂ«rdorimi i memories: 20.5 GB; madhĂ«sia pĂ«rfundimtare e tĂ« dhĂ«nave nĂ« disk: 18.4 GB.
  • TimescaleDB: 480K pika tĂ« dhĂ«nash nĂ« sekondĂ«; pĂ«rdorimi i memories: 2.5 GB; madhĂ«sia pĂ«rfundimtare e tĂ« dhĂ«nave nĂ« disk: 52 GB.

Performanca e InfluxDB ra nga 1.2M pika të dhënash në sekondë për 400K seri temporale në 330K pika të dhënash në sekondë për 4M seri temporale. Kjo është një humbje e konsiderueshme e performancës në krahasim me konkurrentët e tjerë. Le të shohim grafikët e përdorimit të CPU-së për të kuptuar shkakun themelor të kësaj humbjeje:

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

MĂ« lart Ă«shtĂ« njĂ« screenshot: VictoriaMetrics — PĂ«rdorimi i CPU gjatĂ« testit tĂ« inserting pĂ«r serinĂ« unike temporale 4M.

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshoti mĂ« lart: InfluxDB — PĂ«rdorimi i CPU gjatĂ« testit tĂ« futjes pĂ«r njĂ« seri tĂ« veçantĂ« tĂ« kohĂ«s 4M.

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshoti mĂ« lart: TimescaleDB — PĂ«rdorimi i CPU gjatĂ« testit tĂ« futjes pĂ«r njĂ« seri tĂ« veçantĂ« tĂ« kohĂ«s 4M.

VictoriaMetrics përdor pothuajse gjithë fuqinë e procesorit (CPU). Rënia në fund përputhet me bashkimet e mbetura LSM pas futjes së 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? Pjesa e lartĂ« iowait, e cila, pĂ«rsĂ«ri, tregon pĂ«r njĂ« ngushticĂ« nĂ« hyrje-dalje.

TimescaleDB ka një pjesë të lartë system. Mendojmë se fuqia e lartë çoi në shumë thirrje sistemike ose në shumë minor page faults.

Le të shohim grafikët e kapacitetit të diskut:

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshoti mĂ« lart: VictoriaMetrics — PĂ«rdorimi i kapacitetit tĂ« diskut pĂ«r futjen e 4M metrikave unike.

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshoti mĂ« lart: InfluxDB — PĂ«rdorimi i kapacitetit tĂ« diskut pĂ«r futjen e 4M metrikave unike.

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

Screenshoti mĂ« lart: TimescaleDB — PĂ«rdorimi i kapacitetit tĂ« diskut pĂ«r futjen e 4M metrikave unike.

VictoriaMetrics arriti kulminacionin e 120 MB/s në pik, ndërsa shpejtësia mesatare e shkrimit ishte 40 MB/s. Probabilisht, gjatë kulmit u bënë disa bashkime të rënda LSM.

InfluxDB pĂ«rsĂ«ri arrin njĂ« shpejtĂ«si mesatare shkrimi prej 200 MB/s, me kulme deri nĂ« 340 MB/s nĂ« disk me kufizim shkrimi prej 120 MB/s 🙂

TimescaleDB nuk është më e kufizuar nga disku. Duket se është e kufizuar nga diçka tjetër që lidhet me një përqindje të lartë sistematike ngarkesës së CPU.

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

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

MĂ« sipĂ«r Ă«shtĂ« screenshot: VictoriaMetrics — PĂ«rdorimi i hyrjes dhe daljes gjatĂ« testit tĂ« shkarkimit pĂ«r njĂ« seri tĂ« veçantĂ« prej 4M.

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

MĂ« sipĂ«r Ă«shtĂ« screenshot: InfluxDB — PĂ«rdorimi i hyrjes dhe daljes gjatĂ« testit tĂ« shkarkimit pĂ«r njĂ« seri tĂ« veçantĂ« prej 4M.

Benchmarku i lartë i TSDB VictoriaMetrics vs TimescaleDB vs InfluxDB

MĂ« sipĂ«r Ă«shtĂ« screenshot: TimescaleDB — PĂ«rdorimi i hyrjes dhe daljes gjatĂ« testit tĂ« shkarkimit pĂ«r njĂ« seri tĂ« veçantĂ« prej 4M.

Grafiket e pĂ«rdorimit tĂ« IO pĂ«rsĂ«risin grafiket e pĂ«rdorimit tĂ« bandwidth-it tĂ« diskut — InfluxDB Ă«shtĂ« e kufizuar nga IO, ndĂ«rsa VictoriaMetrics dhe TimescaleDB kanĂ« resurse tĂ« lira pĂ«r hyrje dhe dalje.

40M seri të veçanta të kohës

40M seri tĂ« veçanta tĂ« kohĂ«s ishin shumĂ« tĂ« mĂ«dha pĂ«r InfluxDB 🙁

Rezultatet e benchmark-ut:

  • VictoriaMetrics: 1.7M piksel nĂ« sekondĂ«; pĂ«rdorimi i memories: 29 GB; pĂ«rdorimi i hapĂ«sirĂ«s diskore: 17 GB.
  • InfluxDB: nuk u pĂ«rfundua, sepse kĂ«rkonte mĂ« shumĂ« se 60 GB memorie.
  • TimescaleDB: 330K piksel nĂ« sekondĂ«, pĂ«rdorimi i memories: 2.5 GB; pĂ«rdorimi i hapĂ«sirĂ«s diskore: 84GB.

TimescaleDB tregon pĂ«rdorim tĂ« jashtĂ«zakonshĂ«m tĂ« ulĂ«t dhe stabil tĂ« memories – 2.5 GB – po aq sa pĂ«r metrikat unike 4M dhe 400K.

VictoriaMetrics u rrit ngadalë me një shpejtësi prej 100 mijë piksel në sekondë, derisa u përpunuan të gjitha 40M emrat e metrikave me etiketa. Pastaj arriti një shpejtësi të qëndrueshme të futjes prej 1.5-2.0M piksel në sekondë, kështu që rezultati përfundimtar ishte 1.7M piksel 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 kalojmë ato.

Përfundimet

  • TSDB moderne janĂ« tĂ« afta tĂ« pĂ«rpunojnĂ« futje pĂ«r miliona seri unike kohore nĂ« njĂ« server. NĂ« artikullin e ardhshĂ«m do tĂ« shikojmĂ« se sa mirĂ« TSDB-tĂ« realizojnĂ« zgjedhjen pĂ«r miliona seri unike kohore.
  • Ngarkesa e pamjaftueshme e procesorit zakonisht tregon njĂ« ngushticĂ« nĂ« hyrje-dalje. PĂ«rveç kĂ«saj, kjo mund tĂ« tregojĂ« bllokim shumĂ« tĂ« coars, kur vetĂ«m disa procese mund tĂ« funksionojnĂ« nĂ« tĂ« njĂ«jtĂ«n kohĂ«.
  • Ngushtica nĂ« hyrje-dalje Ă«shtĂ« vĂ«rtet e pranishme, sidomos nĂ« ruajtjet pa SSD, siç janĂ« pajisjet e bllokut tĂ« virtualizuara tĂ« ofruesve tĂ« mjeteve.
  • VictoriaMetrics ofron optimizimin mĂ« tĂ« mirĂ« pĂ«r ruajtjet e ngadalta me nivele tĂ« ulta hyrje-dalje. Ai siguron shpejtĂ«sinĂ« mĂ« tĂ« mirĂ« dhe shkallĂ«n mĂ« tĂ« mirĂ« tĂ« kompresimit.

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

Më shumë rreth VictoriaMetrics mund të lexosh në këtë artikullin.

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

Përditësim#2: Lexo gjithashtu artikullin mbi shkallëzimin vertikal të VictoriaMetrics vs InfluxDB vs TimescaleDB.

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

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

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster