VictoriaMetrics, TimescaleDB i InfluxDB su upoređeni u preko skupa podataka sa milijardu tačaka podataka koji pripadaju 40 jedinstvenih vremenskih serija.
Prije nekoliko godina bila je era Zabbixa. Svaki goli server nije imao više od nekoliko metrika - korištenje CPU-a, korištenje RAM-a, korištenje diska i korištenje mreže. Tako se metrika sa hiljada servera može uklopiti u 40 hiljada jedinstvenih vremenskih serija, a Zabbix može koristiti MySQL kao pozadinu za podatke vremenskih serija 🙂
Trenutno jedan sa zadanim konfiguracijama pruža preko 500 metrika na prosječnom hostu. Ima ih mnogo za razne baze podataka, web servere, hardverske sisteme, itd. Svi pružaju mnogo korisnih metrika. Sve počinju pokazivati različite pokazatelje na sebi. Postoji Kubernetes sa klasterima i podovima koji izlažu mnogo metrika. Ovo uzrokuje da serveri izlažu hiljade jedinstvenih metrika po hostu. Dakle, jedinstvena vremenska serija od 40K više nije velike snage. Postaje mejnstrim, čime bi svaki moderni TSDB na jednom serveru trebao lako da upravlja.
Koji je veliki broj jedinstvenih vremenskih serija u ovom trenutku? Vjerovatno 400K ili 4M? Ili 40m? Uporedimo moderne TSDB sa ovim brojevima.
Benchmark instalacija
je odličan alat za benchmarking za TSDB. Omogućava vam da generišete proizvoljan broj metrika prenošenjem potrebnog broja vremenskih serija podijeljenih sa 10 - flag (bivši -scale-var). 10 je broj mjerenja (metrika) generiranih na svakom hostu, serveru. Sljedeći skupovi podataka kreirani su pomoću TSBS-a za benchmarking:
- 400 jedinstvenih vremenskih serija, interval od 60 sekundi između tačaka podataka, podaci obuhvataju puna 3 dana, ~1.7B ukupan broj tačaka podataka.
- 4M jedinstvene vremenske serije, interval od 600 sekundi, podaci obuhvataju puna 3 dana, ~1.7B ukupnih tačaka podataka.
- 40M jedinstvenih vremenskih serija, interval od 1 sata, podaci obuhvataju puna 3 dana, ~2.8B ukupan broj tačaka podataka.
Klijent i server su radili na namjenskim instancama u Google oblaku. Ove instance su imale sljedeće konfiguracije:
- vCPU-ovi: 16
- RAM: 60 GB
- Skladištenje: Standardni čvrsti disk od 1TB. Pruža protok od 120Mbps za čitanje/pisanje, 750 čitanja u sekundi i 1,5K upisa u sekundi.
TSDB-ovi su izvučeni iz zvaničnih docker slika i pokrenuti na docker-u sa sljedećim konfiguracijama:
VictoriaMetrics:
docker run -it --rm -v /mnt/disks/storage/vmetrics-data:/victoria-metrics-data -p 8080:8080 valyala/victoria-metricsInfluxDB (-e) vrijednosti su potrebne za podršku visoke kardinalnosti. Pogledajte detalje u ):
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 (konfiguracija je preuzeta iz 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=100Učitavač podataka je pokrenut sa 16 paralelnih niti.
Ovaj članak sadrži samo rezultate za umetanje referentnih vrijednosti. Rezultati selektivnog benčmarka bit će objavljeni u posebnom članku.
400K jedinstvenih vremenskih serija
Počnimo s jednostavnim elementima - 400K. Benchmark rezultati:
- VictoriaMetrics: 2,6 miliona podataka u sekundi; Upotreba RAM-a: 3 GB; konačna veličina podataka na disku: 965 MB
- InfluxDB: 1.2M podataka u sekundi; Upotreba RAM-a: 8.5 GB; konačna veličina podataka na disku: 1.6 GB
- Vremenska skala: 849 tačaka podataka u sekundi; Upotreba RAM-a: 2,5 GB; konačna veličina podataka na disku: 50 GB
Kao što možete vidjeti iz gornjih rezultata, VictoriaMetrics pobjeđuje u performansama umetanja i omjeru kompresije. Vremenska linija pobjeđuje u korištenju RAM-a, ali koristi puno prostora na disku - 29 bajtova po tački podataka.
Ispod su grafikoni upotrebe CPU-a za svaki od TSDB-ova tokom benchmark-a:

Iznad snimka ekrana: VictoriaMetrics - Ubacite testnu upotrebu CPU-a za 400K jedinstvene metrike.

Gornji snimak ekrana: InfluxDB - upotreba CPU-a na testu umetanja za 400K jedinstvene metrike.

Gornji snimak ekrana: TimescaleDB - upotreba CPU-a na testu umetanja za 400K jedinstvene metrike.
VictoriaMetrics koristi sve dostupne vCPU-ove dok InfluxDB nedovoljno koristi ~2 od 16 vCPU-a.
Timescale koristi samo 3-4 od 16 vCPU-a. Visoki udjeli iowait-a i sistema u TimescaleDB grafu vremenske skale ukazuju na usko grlo u ulazno/izlaznom (I/O) podsistemu. Pogledajmo grafikone korištenja propusnog opsega diska:

Iznad snimka ekrana: VictoriaMetrics - Ubacite probnu upotrebu propusnog opsega diska za 400K jedinstvenih metrika.

Iznad snimka ekrana: InfluxDB - Ubacite probnu upotrebu propusnog opsega diska za 400K jedinstvenih metrika.

Iznad snimka ekrana: TimescaleDB - Ubacite probnu upotrebu propusnog opsega diska za 400K jedinstvenih metrika.
VictoriaMetrics snima podatke brzinom od 20Mbps sa maksimalnom brzinom do 45Mbps. Vrhovi odgovaraju velikim djelomičnim spajanjima u stablu .
InfluxDB zapisuje podatke brzinom od 160MB/s dok disk od 1TB propusnost za pisanje od 120 MB/s.
TimescaleDB je ograničen na 120Mbps protoka pisanja, ali ponekad probije to ograničenje i dostiže vrhunac na 220Mbps. Ovi vrhovi odgovaraju padovima nedovoljne iskorištenosti na prethodnom grafikonu.
Pogledajmo grafikone upotrebe I/O:

Iznad snimka ekrana: VictoriaMetrics - Ubacite probnu upotrebu I/O za 400K jedinstvenih metrika.

Gornji snimak ekrana: InfluxDB - Ubacite test I/O upotrebe za 400K jedinstvenih metrika.

Iznad snimka ekrana: TimescaleDB - Ubacite probnu upotrebu I/O za 400K jedinstvenih metrika.
Sada je jasno da TimescaleDB dostiže I/O granicu tako da ne može koristiti preostalih 12 vCPU-a.
4M jedinstvene vremenske serije
Vremenske serije 4M izgledaju pomalo prkosno. Ali naši takmičari uspješno polože ovaj ispit. Benchmark rezultati:
- VictoriaMetrics: 2,2 miliona podataka u sekundi; Upotreba RAM-a: 6 GB; konačna veličina podataka na disku: 3 GB.
- InfluxDB: 330K podataka u sekundi; Upotreba RAM-a: 20,5 GB; konačna veličina podataka na disku: 18,4 GB.
- TimescaleDB: 480K podataka u sekundi; Upotreba RAM-a: 2,5 GB; konačna veličina podataka na disku: 52 GB.
Performanse InfluxDB-a su pale sa 1,2 miliona podataka u sekundi za vremensku seriju od 400 hiljada na 330 hiljada tačaka podataka u sekundi za vremensku seriju od 4 miliona. Ovo je značajan gubitak performansi u odnosu na druge konkurente. Pogledajmo grafikone upotrebe CPU-a da bismo razumjeli osnovni uzrok ovog gubitka:

Iznad snimka ekrana: VictoriaMetrics - Ubacite test upotrebe CPU-a za jedinstvene 4M vremenske serije.

Gornji snimak ekrana: InfluxDB - Ubacite test upotrebe CPU-a za 4M jedinstvene vremenske serije.

Iznad snimka ekrana: TimescaleDB - Ubacite test upotrebe CPU-a za jedinstvene 4M vremenske serije.
VictoriaMetrics koristi gotovo svu procesorsku snagu (CPU). Ispuštanje na kraju odgovara preostalim LSM spajanjima nakon umetanja svih podataka.
InfluxDB koristi samo 8 od 16 vCPU-a, dok TimsecaleDB koristi 4 od 16 vCPU-a. Šta je zajedničko njihovim grafikonima? visoka proporcija iowait, što opet ukazuje na I/O usko grlo.
TimescaleDB ima visok udio system. Vjerujemo da je velika snaga dovela do mnogih sistemskih poziva ili do mnogih .
Pogledajmo grafikone propusnosti diska:

Gornji snimak ekrana: VictoriaMetrics - upotreba propusnog opsega diska za umetanje 4M jedinstvenih metrika.

Gornji snimak ekrana: InfluxDB - upotreba propusnog opsega diska za umetanje 4M jedinstvenih metrika.

Iznad snimka ekrana: TimescaleDB - korištenje propusnog opsega diska za umetanje 4M jedinstvenih metrika.
VictoriaMetrics je dostigao maksimum od 120MB/s, dok je prosječna brzina pisanja bila 40MB/s. Verovatno je bilo nekoliko teških LSM spajanja izvedenih tokom vrhunca.
InfluxDB opet istiskuje prosječnu propusnost pisanja od 200MB/s sa vrhovima do 340MB/s na disku sa ograničenjem pisanja od 120MB/s :)
TimescaleDB više nije ograničen na disk. Izgleda kao da je ograničeno nečim drugim vezanim za visoku proporciju системной CPU opterećenje.
Pogledajmo grafikone upotrebe IO-a:

Gornji snimak ekrana: VictoriaMetrics - I/O upotreba tokom testa umetanja za 4M jedinstvene vremenske serije.

Gornji snimak ekrana: InfluxDB - I/O upotreba tokom testa umetanja za 4M jedinstvene vremenske serije.

Gornji snimak ekrana: TimescaleDB - I/O upotreba tokom testa umetanja za 4M jedinstvene vremenske serije.
Grafikoni upotrebe IO odražavaju grafikone upotrebe propusnog opsega diska - InfluxDB je ograničen na IO, dok VictoriaMetrics i TimescaleDB imaju rezervne IO IO resurse.
40 miliona jedinstvenih vremenskih serija
40 miliona jedinstvenih vremenskih serija bilo je preveliko za InfluxDB 🙁
Benchmark rezultati:
- VictoriaMetrics: 1,7 miliona podataka u sekundi; Upotreba RAM-a: 29 GB; Potrošnja prostora na disku: 17 GB.
- InfluxDB: Nije završeno jer je zahtijevalo preko 60 GB RAM-a.
- TimescaleDB: 330 tačaka podataka u sekundi, upotreba RAM-a: 2,5 GB; Potrošnja prostora na disku: 84 GB.
TimescaleDB pokazuje izuzetno nisku i stabilnu upotrebu RAM-a od 2,5 GB, isto kao i za jedinstvene metrike 4M i 400K.
VictoriaMetrics se polako povećavao brzinom od 100 tačaka podataka u sekundi dok se ne obrađuju sva 40M označena imena metrike. Zatim je postigao stabilnu stopu umetanja od 1,5-2,0 miliona podataka u sekundi, tako da je krajnji rezultat bio 1,7 miliona podataka u sekundi.
Grafike za jedinstvene vremenske serije od 40 miliona su slične onima za jedinstvene vremenske serije od 4 miliona, pa ih preskočimo.
nalazi
- Moderni TSDB-ovi su sposobni za rukovanje umetcima za milione jedinstvenih vremenskih serija na jednom serveru. U sljedećem članku ćemo testirati koliko dobro TSDB-ovi vrše selekciju u milionima jedinstvenih vremenskih serija.
- Nedovoljna iskorištenost CPU-a obično ukazuje na I/O usko grlo. Osim toga, može ukazivati na previše grubo blokiranje, kada samo nekoliko niti može raditi u isto vrijeme.
- I/O usko grlo postoji, posebno u memoriji bez SSD-a, kao što su virtuelizirani blok uređaji dobavljača u oblaku.
- VictoriaMetrics pruža najbolju optimizaciju za sporo skladištenje sa malim brojem ulazno/izlaznih podataka. Pruža najbolju brzinu i najbolji omjer kompresije.
Skinuti i isprobajte na svojim podacima. Odgovarajuća statička binarna datoteka dostupna je na adresi .
Pročitajte više o VictoriaMetrics u ovome .
Ažuriranje: objavljeno sa ponovljivim rezultatima.
Ažuriranje #2: Pročitajte također .
Ažuriranje #3: !
Telegram chat:
izvor: www.habr.com
