TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

VictoriaMetrics, TimescaleDB i InfluxDB su upoređeni u prethodni članak 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 node_exporter sa zadanim konfiguracijama pruža preko 500 metrika na prosječnom hostu. Ima ih mnogo izvoznici za razne baze podataka, web servere, hardverske sisteme, itd. Svi pružaju mnogo korisnih metrika. Sve sve više aplikacija 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

TSBS 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 -skala (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 n1-standard-16 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-metrics

  • InfluxDB (-e) vrijednosti su potrebne za podršku visoke kardinalnosti. Pogledajte detalje u dokumentaciju):

    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 (konfiguracija je preuzeta iz to 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=100

Uč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:

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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:

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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 NVO.

InfluxDB zapisuje podatke brzinom od 160MB/s dok disk od 1TB treba ograničiti 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:

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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:

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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 manje greške stranice.

Pogledajmo grafikone propusnosti diska:

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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:

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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

TSDB benchmark visokih performansi VictoriaMetrics vs TimescaleDB vs InfluxDB

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 Slika jednog servera VictoriaMetrics i isprobajte na svojim podacima. Odgovarajuća statička binarna datoteka dostupna je na adresi GitHub.

Pročitajte više o VictoriaMetrics u ovome članak.

Ažuriranje: objavljeno članak koji upoređuje performanse VictoriaMetrics umetanja sa InfluxDB sa ponovljivim rezultatima.

Ažuriranje #2: Pročitajte također članak o vertikalnoj skalabilnosti VictoriaMetrics vs InfluxDB vs TimescaleDB.

Ažuriranje #3: VictoriaMetrics je sada otvorenog koda!

Telegram chat: https://t.me/VictoriaMetrics_ru1

izvor: www.habr.com

Dodajte komentar