VictoriaMetrics, TimescaleDB u InfluxDB tqabblu fi fuq sett ta' dejta b'biljun punt ta' dejta li jappartjenu għal serje ta' żmien unika ta' 40K.
Ftit snin ilu kien hemm era ta’ Zabbix. Kull server bare metal ma kellux aktar minn ftit indikaturi - l-użu tas-CPU, l-użu tar-RAM, l-użu tad-disk u l-użu tan-netwerk. B'dan il-mod, metriċi minn eluf ta 'servers jistgħu jidħlu f'40 elf serje ta' żmien unika, u Zabbix jista 'juża MySQL bħala backend għal data ta' serje ta 'żmien :)
Bħalissa waħdu b'konfigurazzjonijiet default jipprovdi aktar minn 500 metrika fuq il-medja ospitanti. Hemm ħafna għal diversi databases, servers tal-web, sistemi ta' ħardwer, eċċ. Dawn kollha jipprovdu varjetà ta' metriċi utli. Kollha jibdew jistabbilixxu indikaturi varji għalihom infushom. Hemm Kubernetes bi clusters u imżiewed li jesponu ħafna metriċi. Dan jirriżulta f'servers li jesponu eluf ta 'metriċi uniċi għal kull host. Allura s-serje tal-ħin unika 40K m'għadhiex ta 'qawwa għolja. Qed isir mainstream u għandu jiġi mmaniġġjat faċilment minn kwalunkwe TSDB modern fuq server wieħed.
X'inhu n-numru kbir ta 'serje ta' ħin uniċi bħalissa? Probabbilment 400K jew 4M? Jew 40m? Ejja nqabblu TSDBs moderni ma 'dawn in-numri.
Installazzjoni ta 'benchmark
hija għodda eċċellenti ta' benchmarking għat-TSDBs. Jippermettilek tiġġenera numru arbitrarju ta' metriċi billi tgħaddi n-numru meħtieġ ta' serje ta' ħin diviż b'10 - bandiera (ex -scale-var). 10 huwa n-numru ta 'kejl (metriċi) iġġenerat fuq kull host jew server. Is-settijiet ta' dejta li ġejjin ġew iġġenerati bl-użu ta' TSBS għall-parametru referenzjarju:
- 400K serje ta 'żmien unika, intervall ta' 60 sekonda bejn il-punti tad-dejta, id-dejta tifrex fuq 3 ijiem sħaħ, ~ 1.7B numru totali ta 'punti tad-dejta.
- Serje ta 'żmien unika 4M, intervall ta' 600 sekonda, id-data tifrex fuq 3 ijiem sħaħ, ~ 1.7B numru totali ta 'punti ta' data.
- 40M serje ta 'żmien unika, intervall ta' siegħa, id-data tifrex fuq 1 ijiem sħaħ, ~ 3B numru totali ta 'punti tad-dejta.
Il-klijent u s-server kienu qed jaħdmu fuq istanzi dedikati fil-Google cloud. Dawn l-istanzi kellhom il-konfigurazzjonijiet li ġejjin:
- vCPUs: 16
- RAM: 60 GB
- Ħażna: Standard 1TB HDD. Jipprovdi 120 Mbps ta 'qari/kitba throughput, 750 operazzjoni ta' qari kull sekonda u 1,5K kitba kull sekonda.
TSDBs ġew estratti minn stampi uffiċjali tad-docker u mħaddma f'docker bil-konfigurazzjonijiet li ġejjin:
VictoriaMetrics:
docker run -it --rm -v /mnt/disks/storage/vmetrics-data:/victoria-metrics-data -p 8080:8080 valyala/victoria-metricsIl-valuri InfluxDB (-e) huma meħtieġa biex isostnu qawwa għolja ):
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 (konfigurazzjoni meħuda minn fajl):
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=100Il-loader tad-data kien immexxi b'16-il ħajt parallel.
Dan l-artikolu fih biss riżultati għall-benchmarks tal-inserzjoni. Ir-riżultati tal-parametru referenzjarju selettiv se jiġu ppubblikati f'artiklu separat.
400K serje ta 'żmien unika
Nibdew b'elementi sempliċi - 400K. Riżultati ta' referenza:
- VictoriaMetrics: 2,6M punti tad-dejta kull sekonda; Użu RAM: 3 GB; daqs finali tad-data fuq disk: 965 MB
- InfluxDB: 1.2M punti ta 'dejta kull sekonda; Użu RAM: 8.5 GB; daqs finali tad-data fuq disk: 1.6 GB
- Skala taż-żmien: 849K punti tad-dejta kull sekonda; Użu RAM: 2,5 GB; daqs finali tad-data fuq disk: 50 GB
Kif tistgħu taraw mir-riżultati ta 'hawn fuq, VictoriaMetrics tirbaħ fil-prestazzjoni tal-inserzjoni u l-proporzjon tal-kompressjoni. Il-kalendarju jirbaħ fl-użu tar-RAM, iżda juża ħafna spazju fuq id-diska - 29 bytes għal kull punt tad-dejta.
Hawn taħt jinsabu l-grafiċi tal-użu tas-CPU għal kull wieħed mit-TSDBs matul il-benchmark:

Hawn fuq hemm screenshot: VictoriaMetrics - tagħbija tas-CPU waqt test ta 'inserzjoni għal metrika unika ta' 400K.

Hawn fuq hemm screenshot: InfluxDB - tagħbija tas-CPU waqt test ta 'inserzjoni għal 400K metrika unika.

Hawn fuq hemm screenshot: TimescaleDB - tagħbija CPU waqt test ta 'inserzjoni għal metrika unika ta' 400K.
VictoriaMetrics juża l-vCPU kollha disponibbli, filwaqt li InfluxDB ma jużax biżżejjed ~ 2 minn 16-il vCPU.
Timecale juża biss 3-4 mis-16-il vCPU. Proporzjonijiet għoljin ta' iowait u sistema fil-grafika ta' l-iskala ta' żmien TimescaleDB jindikaw konġestjoni fis-subsistema ta' input/output (I/O). Ejja nħarsu lejn il-graffs tal-użu tal-bandwidth tad-disk:

Hawn fuq hemm screenshot: VictoriaMetrics - Disk Bandwidth Usage in Insertion Test for Unique Metrics 400K.

Hawn fuq hemm screenshot: InfluxDB - Disk Bandwidth Usage on Insertion Test for Unique Metrics 400K.

Hawn fuq hemm screenshot: TimescaleDB - Disk Bandwidth Usage on Insertion Test for Unique Metrics 400K.
VictoriaMetrics jirreġistra data f'20 Mbps b'qċaċet sa 45 Mbps. Il-qċaċet jikkorrispondu għal għaqdiet parzjali kbar fis-siġra .
InfluxDB jikteb data f'160 MB/s, filwaqt li drive ta '1 TB tikteb throughput 120 MB/s.
TimescaleDB huwa limitat għal throughput ta 'kitba ta' 120 Mbps, iżda xi drabi jikser dan il-limitu u jilħaq 220 Mbps fl-ogħla valuri. Dawn il-qċaċet jikkorrispondu għall-widien ta 'utilizzazzjoni insuffiċjenti tas-CPU fil-graff ta' qabel.
Ejja nħarsu lejn il-grafiċi tal-użu tal-input/output (I/O):

Hawn fuq hemm screenshot: VictoriaMetrics - Daħħal l-użu tal-I/O tat-test għal 400K metriċi uniċi.

Hawn fuq hemm screenshot: InfluxDB - Daħħal l-użu tal-I/O tat-test għal 400K metriċi uniċi.

Hawn fuq hemm screenshot: TimescaleDB - Daħħal l-użu tal-I/O tat-test għal 400K metriċi uniċi.
Issa huwa ċar li TimescaleDB qed jilħaq il-limitu I/O tiegħu, u għalhekk ma jistax juża t-12-il vCPU li jifdal.
4M serje ta 'żmien unika
Is-serje tal-ħin 4M tidher ftit ta 'sfida. Iżda l-kompetituri tagħna jgħaddu minn dan l-eżami b'suċċess. Riżultati ta' referenza:
- VictoriaMetrics: 2,2M punti tad-dejta kull sekonda; Użu RAM: 6 GB; daqs finali tad-data fuq disk: 3 GB.
- InfluxDB: 330K punti tad-dejta kull sekonda; Użu RAM: 20,5 GB; daqs finali tad-data fuq disk: 18,4 GB.
- TimescaleDB: 480K punti tad-dejta kull sekonda; Użu RAM: 2,5 GB; daqs finali tad-data fuq disk: 52 GB.
Il-prestazzjoni ta 'InfluxDB niżlet minn 1,2M punti ta' dejta kull sekonda għal serje ta 'żmien 400K għal 330K punti ta' dejta kull sekonda għal serje ta 'żmien 4M. Dan huwa telf ta 'prestazzjoni sinifikanti meta mqabbel ma' kompetituri oħra. Ejja nħarsu lejn il-graffs tal-użu tas-CPU biex nifhmu l-kawża ewlenija ta 'dan it-telf:

Hawn fuq hemm screenshot: VictoriaMetrics - Użu tas-CPU waqt test ta' inserzjoni għal serje ta' żmien unika ta' 4M.

Hawn fuq hemm screenshot: InfluxDB - Użu tas-CPU waqt it-test ta 'inserzjoni għal serje ta' żmien unika ta '4M.

Hawn fuq hemm screenshot: TimescaleDB - Użu tas-CPU waqt test ta' inserzjoni għal serje ta' żmien unika ta' 4M.
VictoriaMetrics juża kważi l-qawwa kollha tal-unità tal-ipproċessar (CPU). Il-waqgħa fl-aħħar tikkorrispondi għall-LSM li jifdal jingħaqad wara li d-data kollha tkun iddaħħlet.
InfluxDB juża biss 8 minn 16-il vCPU, filwaqt li TimsecaleDB juża 4 minn 16-il vCPU. X'għandhom komuni l-graffs tagħhom? Sehem għoli iowait, li għal darb'oħra jindika konġestjoni I/O.
TimescaleDB għandu sehem għoli system. Nassumu li qawwa għolja rriżultat f'ħafna sejħiet tas-sistema jew ħafna .
Ejja nħarsu lejn il-graffs tal-fluss tad-disk:

Hawn fuq hemm screenshot: VictoriaMetrics - L-użu tal-bandwidth tad-diska biex tiddaħħal 4M metriċi uniċi.

Hawn fuq hemm screenshot: InfluxDB - L-użu tal-bandwidth tad-diska biex daħħal 4M metriċi uniċi.

Hawn fuq hemm screenshot: TimescaleDB - L-użu tal-bandwidth tad-diska biex daħħal 4M metriċi uniċi.
VictoriaMetrics laħqet limitu ta’ 120 MB/s fl-ogħla livell, filwaqt li l-veloċità medja tal-kitba kienet ta’ 40 MB/s. Huwa probabbli li diversi fużjonijiet tqal ta 'LSM saru matul il-quċċata.
InfluxDB għal darb'oħra għafas throughput medju ta' kitba ta' 200 MB/s b'qċaċet sa 340 MB/s fuq disk b'limitu ta' kitba ta' 120 MB/s :)
TimescaleDB m'għadux limitat fuq id-disk. Jidher li huwa limitat minn xi ħaġa oħra relatata ma 'proporzjon għoli системной Tagħbija tas-CPU.
Ejja nħarsu lejn il-graffs tal-użu tal-IO:

Hawn fuq hemm screenshot: VictoriaMetrics - L-użu ta' I/O waqt test ta' inserzjoni għal serje ta' ħin unika ta' 4M.

Hawn fuq hemm screenshot: InfluxDB - L-użu ta 'I/O waqt test ta' inserzjoni għal serje ta 'żmien unika ta' 4M.

Hawn fuq hemm screenshot: TimescaleDB - Użu ta 'I/O waqt test ta' inserzjoni għal serje ta 'żmien unika ta' 4M.
Ix-xejriet tal-użu tal-IO jirriflettu dawk tal-bandwidth tad-disk - InfluxDB huwa IO limitat, filwaqt li VictoriaMetrics u TimescaleDB għandhom riżorsi IO żejda.
40M serje ta 'żmien unika
40M serje ta 'żmien unika kienet kbira wisq għal InfluxDB :)
Riżultati ta' referenza:
- VictoriaMetrics: 1,7M punti tad-dejta kull sekonda; Użu RAM: 29 GB; Użu tal-ispazju tad-disk: 17 GB.
- InfluxDB: Ma spiċċatx minħabba li kien jeħtieġ aktar minn 60GB ta 'RAM.
- TimescaleDB: 330K punti ta 'dejta kull sekonda, użu RAM: 2,5 GB; Użu tal-ispazju tad-disk: 84GB.
TimescaleDB juri użu ta 'RAM eċċezzjonalment baxx u stabbli f'2,5 GB - l-istess bħal għall-metriċi uniċi 4M u 400K.
VictoriaMetrics żdiedet bil-mod b'rata ta' 100k punti ta' data kull sekonda sakemm ġew ipproċessati l-ismijiet metriċi kollha tikkettati 40M. Imbagħad kiseb rata ta 'inserzjoni sostnuta ta' 1,5-2,0M punti ta 'dejta kull sekonda, għalhekk ir-riżultat finali kien ta' 1,7M punti ta 'dejta kull sekonda.
Il-graffs għal serje ta 'żmien unika 40M huma simili għall-graffs għal serje ta' ħin unika 4M, allura ejja naqbżuhom.
Sejbiet
- TSDBs moderni huma kapaċi jipproċessaw inserzjonijiet għal miljuni ta 'serje ta' ħin uniċi fuq server wieħed. Fl-artiklu li jmiss, aħna ser nittestjaw kemm it-TSDBs iwettqu l-għażla fuq miljuni ta 'serje ta' żmien uniċi.
- L-użu insuffiċjenti tas-CPU normalment jindika konġestjoni tal-I/O. Jista 'jindika wkoll li l-imblukkar huwa oħxon wisq, bi ftit ħjut biss kapaċi jimxu kull darba.
- Il-konġestjoni tal-I/O jeżisti, speċjalment fil-ħażna mhux SSD bħall-apparati tal-blokk virtwalizzati tal-fornituri tas-sħab.
- VictoriaMetrics jipprovdi l-aħjar ottimizzazzjoni għal ħażna I/O bil-mod u baxx. Jipprovdi l-aħjar veloċità u l-aħjar proporzjon ta 'kompressjoni.
Niżżel u ipprovaha fuq id-data tiegħek. Il-binarju statiku korrispondenti huwa disponibbli fuq .
Aqra aktar dwar VictoriaMetrics f'dan .
Aġġornament: ippubblikat b'riżultati riproduċibbli.
Aġġornament #2: Aqra wkoll .
Aġġornament #3: !
Chat tat-telegramma:
Sors: www.habr.com
