VictoriaMetrics, TimescaleDB ja InfluxDB vÔrreldi miljardi andmepunktiga komplekti, mis kuuluvad 40K unikaalsele ajareale.
MĂ”ni aasta tagasi oli Zabbixi ajastu. Iga bare metal serveril oli mitte rohkem kui paar indikatiivset mÔÔdikut â protsessori kasutamine, mĂ€lukasutus, ketas ja vĂ”rgukasutus. Nii mahtusid tuhandete serverite mÔÔdikud 40 tuhande unikaalse ajarea sisse, ja Zabbix suudab kasutada MySQL-i ajareade andmete tagaplaanina đ
Praegu ĂŒks vaikimisi konfiguratsioonidega pakub keskmine host ĂŒle 500 mÔÔdiku. On palju erinevatele andmebaasidele, veebiserveritele, riistvarasĂŒsteemidele jne. KĂ”ik need pakuvad palju kasulikke mÔÔdikuid. KĂ”ik algavad erinevate mÔÔdikute nĂ€itamisega enda kohta. On Kubernetes koos klastrite ja pod-idega, mis nĂ€itavad palju mÔÔdikuid. See toob kaasa selle, et serverid esitavad tuhandeid unikaalseid mÔÔdikuid hostis. Seega ei ole 40K unikaalne ajareal enam suur jĂ”udlus. See muutub mainstreamiks, millega peaks ablema hĂ”lpsasti toime tulla ĂŒkskĂ”ik milline tĂ€napĂ€evane TSDB ĂŒhel serveril.
Mis on hetkel suur hulk unikaalseid ajareale? TÔenÀoliselt 400K vÔi 4M? VÔi 40M? VÔtame kaasaegsed TSDB-d nende numbritega.
Benkmarki seadistamine
on suurepĂ€rane tööriist TSDB-de testimiseks. See vĂ”imaldab genereerida meelevaldse arvu mÔÔdikuid, edastades vajaliku hulga ajareale, jagatuna 10 â lipp (endine -scale-var). 10 â see on mÔÔtmiste (mÔÔdikute) arv, mis genereeritakse igal hostil, serveril. JĂ€rgnevad andmekogud loodi TSBS-i abil benchmarkimiseks:
- 400K unikaalne ajareal, 60 sekundi intervall andmepunktide vahel, andmed katab tÀielikke 3 pÀeva, ~1,7B koguarv andmepunkte.
- 4M unikaalne ajareal, intervall 600 sekundit, andmed katab tÀielikke 3 pÀeva, ~1,7B koguarv andmepunkte.
- 40M unikaalne ajareal, intervall 1 tund, andmed katab tÀielikke 3 pÀeva, ~2,8B koguarv andmepunkte.
Kliendi ja serveri kĂ€ivitamine toimus pĂŒhendatud instantsidel Google'i pilves. Need instantsid omasid jĂ€rgmisi konfiguratsioone:
- vCPU-d: 16
- RAM: 60 GB
- MÀlu: tavaline 1 TB kÔvaketas. See pakub lugemise/kirjutamise ribalaiust 120 Mbit/s, 750 lugemisoperatsiooni sekundis ja 1,5K kirjutamisoperatsiooni sekundis.
TSDB-d on vÀlja tÔmmatud ametlikest docker'i piltidest ja kÀivitatud docker'is jÀrgnevate seadistustega:
VictoriaMetrics:
docker run -it --rm -v /mnt/disks/storage/vmetrics-data:/victoria-metrics-data -p 8080:8080 valyala/victoria-metricsInfluxDB vÀÀrtused (- e vajalikud kĂ”rge jĂ”udluse toetamiseks. Ăksikasjade kohta vaadake ):
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 (seadistus vÔeti failist): faili):
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=100Andmeedastaja kÀivitati 16 paralleelse niidiga.
See artikkel sisaldab ainult tulemusi sisestamise mÔÔdikute kohta. Valikuline jÔudluse testimise tulemused avaldatakse eraldi artiklis.
400K unikaalset ajasarja
Alustame lihtsatest elementidest â 400K. JĂ”udlustest:
- VictoriaMetrics: 2,6M andmepunkti sekundis; mÀlukasutamine: 3 GB; lÔplik andmemahu suurus kettal: 965 MB
- InfluxDB: 1.2M andmepunkti sekundis; mÀlukasutamine: 8,5 GB; lÔplik andmemahu suurus kettal: 1,6 GB
- Timescale: 849K andmepunkti sekundis; mÀlukasutamine: 2,5 GB; lÔplik andmemahu suurus kettal: 50 GB
Kuidas nĂ€ha ĂŒlaltoodud tulemustest, VictoriaMetrics vĂ”idab sisestusjĂ”udluses ja tihendamise astmes. Ajakava vĂ”idab mĂ€lukasutuses, kuid see kasutab palju kettaruumi â 29 baiti andmepunkti kohta.
Allpool on vaikuse kasutuse diagrammid (CPU) iga TSDB jaoks testimise ajal:

Ălal pildil: VictoriaMetrics â CPU koormus sisestamise testi ajal unikaalse mÔÔdiku 400K jaoks.

Ălal pildil: InfluxDB â CPU koormus sisestamise testi ajal unikaalse mÔÔdiku 400K jaoks.

Ălal pildil: TimescaleDB â CPU koormus sisestamise testi ajal unikaalse mÔÔdiku 400K jaoks.
VictoriaMetrics kasutab kÔiki saadaval olevaid vCPU-sid, samas kui InfluxDB kasutab piisavalt ainult ~2 16-st vCPU-st.
Timescale kasutab ainult 3-4 16-st vCPU-st. Ajavahemike graafikus kÔrged iowait ja system proportsioonid viitavad I/O ala kitsaskohale. Vaatame ketta lÀbilaskevÔime kasutamise graafi:

Ălalolev ekraanipilt: VictoriaMetrics â ketta lĂ€bilaskevĂ”ime kasutamine sisestustestil unikaalsete mÔÔdikute jaoks 400K.

Ălalolev ekraanipilt: InfluxDB â ketta lĂ€bilaskevĂ”ime kasutamine sisestustestil unikaalsete mÔÔdikute jaoks 400K.

Ălalolev ekraanipilt: TimescaleDB â ketta lĂ€bilaskevĂ”ime kasutamine sisestustestil unikaalsete mÔÔdikute jaoks 400K.
VictoriaMetrics salvestab andmeid kiirusel 20 Mbit/s, saavutades tipud kuni 45 Mbit/s. Tipphetked vastavad suurtele osalistele sulandumistele puus. .
InfluxDB salvestab andmeid kiirusel 160 MB/s, samas kui 1 TB kett kirjutamise lÀbilaskevÔimega 120 MB/s.
TimescaleDB-l on kirjutamise lĂ€bilaskevĂ”ime piiratud 120 Mbit/s, kuid mĂ”nikord ĂŒletab see piiri ja saavutab tipphetked kuni 220 Mbit/s. Need tipud vastavad varasema graafiku protsessorikoormuse puudujÀÀkidele.
Vaatame I/O (sisend-vÀljund) kasutamise graafikuid:

Ălalolev ekraanipilt: VictoriaMetrics â I/O kasutamine sisestustestil 400K unikaalsete mÔÔdikute jaoks.

Ălalolev ekraanipilt: InfluxDB â I/O kasutamine sisestustestil 400K unikaalsete mÔÔdikute jaoks.

Ălalolev ekraanipilt: TimescaleDB â I/O kasutamine sisestustestil 400K unikaalsete mÔÔdikute jaoks.
NĂŒĂŒd on selge, et TimescaleDB saavutab I/O piiri, mistĂ”ttu ei suuda see kasutada ĂŒlejÀÀnud 12 vCPU-d.
4M unikaalset ajavoogu
4M ajavoogu nÀevad vÀlja veidi vÀljakutsuvad. Kuid meie konkurendid edukalt selle eksami sooritavad. Benchmarki tulemused:
- VictoriaMetrics: 2,2M andmepunkti sekundis; mÀlu kasutamine: 6 GB; lÔplik andmemahud kettal: 3 GB.
- InfluxDB: 330K andmepunkti sekundis; mÀlu kasutamine: 20,5 GB; lÔplik andmemahud kettal: 18,4 GB.
- TimescaleDB: 480K andmepunkti sekundis; mÀlu kasutamine: 2,5 GB; lÔplik andmemahud kettal: 52 GB.
InfluxDB jÔudlus langes 1,2 miljonilt andmepunktilt sekundis 400K ajareale 330 000 andmepunktile sekundis 4M ajareale. See on mÀrkimisvÀÀrne jÔudluse langus vÔrreldes teiste konkurentidega. Vaatame protsessori kasutuse graafikuid, et mÔista selle languse peamist pÔhjust:

Ălalolev ekraanipilt: VictoriaMetrics â CPU kasutus sisestustestide ajal ainulaadse 4M ajareaga.

Ălalolev ekraanipilt: InfluxDB â CPU kasutus sisestustestide ajal ainulaadse 4M ajareaga.

Ălalolev ekraanipilt: TimescaleDB â CPU kasutus sisestustestide ajal ainulaadse 4M ajareaga.
VictoriaMetrics kasutab peaaegu kogu protsessorivÔimsust (CPU). Langus lÔpus vastab erakordsete LSM-i liitumiste kohta pÀrast kogu andmete sisestamist.
InfluxDB kasutab ainult 8 16-st vCPU-st, samas kui TimescaleDB kasutab 4 16-st vCPU-st. Mis on nende graafikutes ĂŒhist? KĂ”rge osakaal iowait, mis viitab taas sisendi/vĂ€ljundi kitsaskohale.
TimescaleDB-l on kĂ”rge osakaal system. Eeldame, et kĂ”rge jĂ”udlus pĂ”hjustas palju sĂŒsteemi kutsungite olnud vĂ”i palju .
Vaatame diskikÀideldavuse graafikuid:

Ălalolev ekraanipilt: VictoriaMetrics â Diski ribakĂ€ideldavus ainulaadsete 4M mÔÔtmete sisestamise ajal.

Ălalolev ekraanipilt: InfluxDB â Diski ribakĂ€ideldavus ainulaadsete 4M mÔÔtmete sisestamise ajal.

Ălalolev ekraanipilt: TimescaleDB â Diski ribakĂ€ideldavus ainulaadsete 4M mÔÔtmete sisestamise ajal.
VictoriaMetrics saavutas 120 MB/s piiri tipu ajal, samas kui keskmine kirjutamiskiirus oli 40 MB/s. TÔenÀoliselt toimus tipul mitu rasket LSM-i liitumist.
InfluxDB pigistab taas vĂ€lja keskmise kirjakĂ€ideldavuse 200 MB/s, pĂŒstitades tipud kuni 340 MB/s kettal, mille kirjutamispiir on 120 MB/s đ
TimescaleDB ei ole enam kettaga piiratud. Tundub, et see on piiratud millegi muuga, mis on seotud kĂ”rge osakaaluga sĂŒsteemse CPU koormuse.
Vaatame IO kasutuse graafikuid:

Ălalolev ekraanipilt: VictoriaMetrics â IO kasutus sisestustestide ajal ainulaadse 4M ajareaga.

Ălalolev ekraanipilt: InfluxDB â IO kasutus sisestustestide ajal ainulaadse 4M ajareaga.

Ălalolev ekraanipilt: TimescaleDB â IO kasutus sisestustestide ajal ainulaadse 4M ajareaga.
IO kasutuse graafikud jÀljendavad kettalaeva kasutuse graafikuid - InfluxDB-l on IO piirangud, samas kui VictoriaMetrics ja TimescaleDB omavad varu IO ressursse.
40M unikaalset ajaseeriat
40M unikaalset ajajoonet oli InfluxDB jaoks liiga suur đ
Benkmarki tulemused:
- VictoriaMetrics: 1,7M andmepunkti sekundis; mÀlukasutuse: 29 GB; kettaruumi kasutamine: 17 GB.
- InfluxDB: ei lÔpetanud, kuna see nÔudis rohkem kui 60 GB mÀlu.
- TimescaleDB: 330K andmepunkti sekundis, mÀlukasutuse: 2,5 GB; kettaruumi kasutamine: 84GB.
TimescaleDB nĂ€itab erakordselt madalat ja stabiilset mĂ€lukasutust â 2,5 GB â sama palju kui unikaalsete mÔÔdikute puhul 4M ja 400K.
VictoriaMetrics kasvas aeglaselt 100 tuhat andmepunkti sekundis, kuni kÔik 40M mÔÔdikute nimetused koos siltidega olid töödeldud. Siis saavutati stabiilne sisestamise kiirus 1,5-2,0M andmepunkti sekundis, nii et lÔpptulemus oli 1,7M andmepunkti sekundis.
40M unikaalse ajajoonte graafikud sarnanevad 4M unikaalse ajajoonte graafikutega, seega jÀtame need vahele.
JĂ€reldused
- TĂ€napĂ€eva TSDB-d suudavad hallata sisestusi miljonite unikaalsete ajajoonte jaoks ĂŒhel serveril. JĂ€rgmises artiklis uurime, kui hĂ€sti TSDB-d suudavad valikut teha miljonite unikaalsete ajajoonte seas.
- Ebapiisav protsessori koormus nÀitab tavaliselt IO kitsaskohta. Lisaks vÔib see viidata liiga jÀmedale lukustusele, kus samal ajal vÔib töötada ainult mÔni lÔng.
- IO kitsaskohad eksisteerivad tÔeliselt, eriti talletustes, kus pole SSD-sid, nÀiteks pilveteenuste pakkujate virtualiseeritud plokkseadmetes.
- VictoriaMetrics pakub parimat optimeerimist aeglastele madala IO-talumisega talletustele. See tagab parima kiirus ja parima tihenduse.
Laadige alla ja proovige seda oma andmetel. Vastav staatiline binaarfail on saadaval .
VictoriaMetrics kohta lugege rohkem selles .
Uuendus: avaldatud koos korduvate tulemustega.
Uuendus #2: Loe ka .
Uuendus #3: !
Telegrami vestlus:
Allikas: habr.com
