VictoriaMetrics, TimescaleDB dhe InfluxDB janë krahasuar në 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ë me konfigurimet e paracaktuara ofron më shumë se 500 metrika në një host mesatar. Ekzistojnë shumë 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 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
ë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 (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. 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-metricsVlerat InfluxDB (-e janë të nevojshme për mbështetje të energjisë së lartë. Detajet shihni në ):
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 influxdbTimescaleDB (konfigurimi u mor nga 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=100Ngarkuesi 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:

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

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

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:

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

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

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ë. .
InfluxDB regjistron të dhëna me shpejtësi 160 MB/s, ndërsa një disk nga 1 TB 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):

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

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

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:

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

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

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ë .
Le të shohim grafikët e kapacitetit të diskut:

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

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

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:

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.

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.

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 dhe provoje me të dhënat e tua. Skedari statik përkatës është i disponueshëm në .
Më shumë rreth VictoriaMetrics mund të lexosh në këtë .
Përditësim: është publikuar me rezultate të riprodhueshme.
Përditësim#2: Lexo gjithashtu .
Përditësim #3: !
Grupi në Telegram:
Burimi: habr.com
