Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

VictoriaMetrics, TimescaleDB lan InfluxDB dibandhingake ing artikel sadurunge ing dataset karo milyar titik data gadhahanipun 40K seri wektu unik.

Sawetara taun kepungkur ana jaman Zabbix. Saben server bare metal ora luwih saka sawetara pratondho - panggunaan CPU, panggunaan RAM, panggunaan disk lan panggunaan jaringan. Kanthi cara iki, metrik saka ewu server bisa cocog karo 40 ewu seri wektu sing unik, lan Zabbix bisa nggunakake MySQL minangka backend kanggo data seri wektu :)

Saiki dhewekan node_exporter kanthi konfigurasi standar nyedhiyakake luwih saka 500 metrik ing host rata-rata. Ana akeh eksportir kanggo macem-macem database, server web, sistem hardware, lan sapiturute Kabeh padha nyedhiyani macem-macem metrik migunani. Kabeh aplikasi liyane lan liyane miwiti nyetel macem-macem indikator kanggo awake dhewe. Ana Kubernetes kanthi kluster lan pod sing mbukak akeh metrik. Iki nyebabake server mbabarake ewonan metrik unik saben host. Dadi seri wektu 40K sing unik ora duwe daya dhuwur maneh. Iku dadi mainstream lan kudu gampang ditangani dening TSDB modern ing server siji.

Apa nomer akeh seri wektu unik ing wayahe? Mungkin 400K utawa 4M? Utawa 40m? Ayo mbandhingake TSDB modern karo nomer kasebut.

Nginstal pathokan

TSBS minangka alat benchmarking sing apik kanggo TSDB. Ngidini sampeyan ngasilake jumlah metrik kanthi jumlah wektu sing dibutuhake dibagi 10 - flag -seneng (mantan -scale-var). 10 minangka jumlah pangukuran (metrik) sing digawe ing saben host utawa server. Dataset ing ngisor iki digawe nggunakake TSBS kanggo pathokan:

  • 400K seri wektu unik, interval 60 detik antarane TCTerms data, data mbentang lengkap 3 dina, ~ 1.7B total TCTerms data.
  • 4M seri wektu unik, 600 interval detik, data mbentang 3 dina lengkap, ~ 1.7B total TCTerms data.
  • Seri wektu unik 40M, interval 1 jam, data lengkap 3 dina, ~ 2.8B total titik data.

Klien lan server mlaku ing kasus khusus n1-standar-16 ing Google cloud. Kahanan kasebut duwe konfigurasi ing ngisor iki:

  • vCPU: 16
  • RAM: 60 GB
  • Panyimpenan: Standar 1TB HDD. Nyedhiyakake 120 Mbps maca / nulis throughput, 750 maca operasi per detik lan 1,5K nulis per detik.

TSDB diekstrak saka gambar docker resmi lan mbukak ing docker kanthi konfigurasi ing ngisor iki:

  • VictoriaMetrics:

    docker run -it --rm -v /mnt/disks/storage/vmetrics-data:/victoria-metrics-data -p 8080:8080 valyala/victoria-metrics

  • Nilai InfluxDB (-e) dibutuhake kanggo ndhukung daya dhuwur. Deleng rincian ing dokumentasi):

    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 (konfigurasi dijupuk saka iku berkas):

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

Pemuat data ditindakake kanthi 16 utas paralel.

Artikel iki mung ngemot asil kanggo pathokan sisipan. Asil saka pathokan selektif bakal diterbitake ing artikel kapisah.

400K seri wektu unik

Ayo dadi miwiti karo unsur prasaja - 400K. Hasil benchmark:

  • VictoriaMetrics: 2,6M titik data per detik; Panggunaan RAM: 3 GB; ukuran data final ing disk: 965 MB
  • InfluxDB: 1.2M titik data per detik; Panggunaan RAM: 8.5 GB; ukuran data final ing disk: 1.6 GB
  • Skala wektu: 849K titik data per detik; Panggunaan RAM: 2,5 GB; ukuran data final ing disk: 50 GB

Kaya sing sampeyan ngerteni saka asil ing ndhuwur, VictoriaMetrics menang ing kinerja sisipan lan rasio kompresi. Timeline menang ing panggunaan RAM, nanging nggunakake akeh papan disk - 29 bita saben titik data.

Ing ngisor iki ana grafik panggunaan CPU kanggo saben TSDB sajrone pathokan:

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ndhuwur iku gambar: VictoriaMetrics - beban CPU sajrone tes sisipan kanggo metrik 400K sing unik.

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: InfluxDB - beban CPU sajrone tes sisipan kanggo metrik unik 400K.

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: TimescaleDB - beban CPU sajrone tes sisipan kanggo metrik unik 400K.

VictoriaMetrics nggunakake kabeh vCPU sing kasedhiya, dene InfluxDB kurang nggunakake ~ 2 saka 16 vCPU.

Skala wektu mung nggunakake 3-4 saka 16 vCPU. Proporsi dhuwur saka iowait lan sistem ing grafik timescaleDB nuduhake kemacetan ing subsistem input/output (I/O). Ayo ndeleng grafik panggunaan bandwidth disk:

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ndhuwur iku gambar: VictoriaMetrics - Disk Bandwidth Usage in Insertion Test for Unique Metrics 400K.

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ndhuwur iku gambar: InfluxDB - Disk Bandwidth Usage on Insertion Test for Unique Metrics 400K.

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ndhuwur iku gambar: TimescaleDB - Disk Bandwidth Usage on Insertion Test for Unique Metrics 400K.

VictoriaMetrics ngrekam data ing 20 Mbps kanthi puncak nganti 45 Mbps. Pucuk cocog karo panggabungan parsial gedhe ing wit LSM.

InfluxDB nulis data ing 160 MB / s, nalika drive 1 TB kudu diwatesi nulis throughput 120 MB/s.

TimescaleDB diwatesi kanggo nulis throughput 120 Mbps, nanging kadhangkala ngilangi watesan iki lan tekan 220 Mbps ing nilai puncak. Puncak kasebut cocog karo lembah panggunaan CPU sing ora cukup ing grafik sadurunge.

Ayo deleng grafik panggunaan input/output (I/O):

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: VictoriaMetrics - Lebokake tes panggunaan I/O kanggo 400K metrik unik.

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: InfluxDB - Lebokake tes panggunaan I/O kanggo 400K metrik unik.

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: TimescaleDB - Lebokake tes panggunaan I/O kanggo 400K metrik unik.

Saiki wis jelas manawa TimescaleDB wis tekan watesan I/O, mula ora bisa nggunakake 12 vCPU sing isih ana.

4M seri wektu unik

Seri wektu 4M katon rada tantangan. Nanging saingan kita lulus ujian iki kanthi sukses. Hasil benchmark:

  • VictoriaMetrics: 2,2M titik data per detik; Panggunaan RAM: 6 GB; ukuran data final ing disk: 3 GB.
  • InfluxDB: 330K titik data per detik; Panggunaan RAM: 20,5 GB; ukuran data final ing disk: 18,4 GB.
  • TimescaleDB: 480K titik data per detik; Panggunaan RAM: 2,5 GB; ukuran data final ing disk: 52 GB.

Kinerja InfluxDB mudhun saka 1,2M titik data per detik kanggo seri wektu 400K dadi 330K titik data per detik kanggo seri wektu 4M. Iki minangka mundhut kinerja sing signifikan dibandhingake karo pesaing liyane. Ayo goleki grafik panggunaan CPU kanggo ngerti sebabe kerugian iki:

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: VictoriaMetrics - Panggunaan CPU sajrone tes sisipan kanggo seri wektu 4M sing unik.

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: InfluxDB - Panggunaan CPU sajrone tes sisipan kanggo seri wektu 4M sing unik.

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: TimescaleDB - Panggunaan CPU sajrone tes sisipan kanggo seri wektu 4M sing unik.

VictoriaMetrics nggunakake meh kabeh daya unit pangolahan (CPU). Gulung ing pungkasan cocog karo merges LSM isih sawise kabeh data wis dilebokake.

InfluxDB mung nggunakake 8 saka 16 vCPU, dene TimsecaleDB nggunakake 4 saka 16 vCPU. Apa sing padha karo grafik kasebut? Share dhuwur iowait, sing maneh nuduhake bottleneck I/O.

TimescaleDB duweni saham sing dhuwur system. Kita nganggep yen daya dhuwur nyebabake akeh panggilan sistem utawa akeh kesalahan kaca cilik.

Ayo ndeleng grafik throughput disk:

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: VictoriaMetrics - Nggunakake bandwidth disk kanggo nglebokake metrik unik 4M.

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: InfluxDB - Nggunakake bandwidth disk kanggo nglebokake metrik unik 4M.

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: TimescaleDB - Nggunakake bandwidth disk kanggo nglebokake metrik unik 4M.

VictoriaMetrics tekan watesan 120 MB / s ing puncak, nalika kacepetan nulis rata-rata 40 MB / s. Kemungkinan sawetara fusi LSM abot ditindakake sajrone puncak kasebut.

InfluxDB maneh ngetokake throughput nulis rata-rata 200 MB / s kanthi puncak nganti 340 MB / s ing disk kanthi watesan nulis 120 MB / s :)

TimescaleDB ora winates disk maneh. Katon diwatesi karo perkara liya sing ana gandhengane karo proporsi sing dhuwur систСмной beban CPU.

Ayo ndeleng grafik panggunaan IO:

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: VictoriaMetrics - Nggunakake I/O sajrone tes sisipan kanggo seri wektu 4M sing unik.

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: InfluxDB - Nggunakake I/O sajrone tes sisipan kanggo seri wektu 4M sing unik.

Patokan TSDB kinerja dhuwur VictoriaMetrics vs TimescaleDB vs InfluxDB

Ing ndhuwur ana gambar: TimescaleDB - panggunaan I/O sajrone tes sisipan kanggo seri wektu 4M sing unik.

Pola panggunaan IO nggambarake bandwidth disk - InfluxDB diwatesi IO, dene VictoriaMetrics lan TimescaleDB duwe sumber daya IO cadangan.

40M seri wektu unik

Seri wektu unik 40M gedhe banget kanggo InfluxDB :)

Hasil benchmark:

  • VictoriaMetrics: 1,7M titik data per detik; Panggunaan RAM: 29 GB; Panggunaan papan disk: 17 GB.
  • InfluxDB: Ora rampung amarga mbutuhake luwih saka 60GB RAM.
  • TimescaleDB: 330K data per detik, panggunaan RAM: 2,5 GB; Panggunaan papan disk: 84GB.

TimescaleDB nuduhake panggunaan RAM sing sithik lan stabil kanthi 2,5 GB - padha karo metrik 4M lan 400K sing unik.

VictoriaMetrics alon-alon mundhak kanthi tingkat 100k titik data per detik nganti kabeh jeneng metrik sing diwenehi tag 40M diproses. Dheweke banjur entuk tingkat penyisipan sing tetep 1,5-2,0M poin data per detik, saengga asil pungkasan yaiku 1,7M poin data per detik.

Grafik kanggo seri wektu unik 40M padha karo grafik kanggo seri wektu unik 4M, mula ayo lewati.

temonan

  • TSDB modern bisa ngolah sisipan kanggo jutaan seri wektu unik ing server siji. Ing artikel sabanjure, kita bakal nyoba kepiye TSDB nindakake pilihan ing jutaan seri wektu sing unik.
  • Panggunaan CPU ora cukup biasane nuduhake bottleneck I / O. Bisa uga nuduhake manawa pamblokiran kasebut kasar banget, kanthi mung sawetara benang sing bisa mlaku bebarengan.
  • Hambatan I/O pancen ana, utamane ing panyimpenan non-SSD kayata piranti pamblokiran virtual panyedhiya maya.
  • VictoriaMetrics nyedhiyakake optimasi paling apik kanggo panyimpenan I/O sing alon lan sithik. Iki nyedhiyakake kacepetan paling apik lan rasio kompresi sing paling apik.

Download Gambar siji-server VictoriaMetrics lan coba ing data sampeyan. Binar statis sing cocog kasedhiya ing GitHub.

Waca liyane babagan VictoriaMetrics ing iki artikel.

Update: diterbitake artikel mbandhingake kinerja sisipan VictoriaMetrics karo InfluxDB karo asil reproducible.

Nganyari #2: Waca uga artikel babagan skalabilitas vertikal VictoriaMetrics vs InfluxDB vs TimescaleDB.

Nganyari #3: VictoriaMetrics saiki mbukak sumber!

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

Source: www.habr.com

Add a comment