Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

Atụnyere VictoriaMetrics, TimecaleDB na InfluxDB akụkọ gara aga na dataset nwere ijeri data nke nwere usoro 40K pụrụ iche.

Afọ ole na ole gara aga, e nwere oge nke Zabbix. Ihe nkesa ọla ọ bụla enweghị ihe karịrị ihe ngosi ole na ole - ojiji CPU, ojiji RAM, ojiji diski na ojiji netwọkụ. N'ụzọ dị otú a, metrics sitere na puku kwuru puku sava nwere ike dabara n'ime usoro 40 puku pụrụ iche, yana Zabbix nwere ike iji MySQL dị ka ndabere maka data usoro oge :)

Ugbu a naanị node_exporter na nhazi ndabara na-enye ihe karịrị metrics 500 na nkezi onye ọbịa. Enwere ọtụtụ ndị na-ebupụ maka ọdụ data dị iche iche, sava weebụ, sistemu ngwaike, wdg. Ha niile na-enye metrik dị iche iche bara uru. Ha niile ngwa ngwa ọzọ malite ịtọ ihe ngosi dị iche iche maka onwe ha. Enwere Kubernetes nwere ụyọkọ na pọd na-ekpughe ọtụtụ metrik. Nke a na-ebute sava na-ekpughe puku kwuru puku metrik pụrụ iche kwa onye ọbịa. Ya mere usoro oge 40K pụrụ iche abụghịzi ike dị elu. Ọ na-aghọ ihe bụ isi na TSDB ọ bụla nke ọgbara ọhụrụ kwesịrị ijikwa ya ngwa ngwa n'otu sava.

Gịnị bụ ọnụ ọgụgụ buru ibu nke usoro oge pụrụ iche n'oge a? Eleghị anya 400K ma ọ bụ 4M? Ma ọ bụ 40m? Ka anyị tulee TSDB ọgbara ọhụrụ na ọnụọgụ ndị a.

Ịwụnye benchmark

TSBS bụ ngwá ọrụ benchmarking kacha mma maka TSDBs. Ọ na-enye gị ohere ịmepụta ọnụ ọgụgụ metrics aka ike site n'ịfefe nọmba achọrọ nke usoro oge nke kewara 10 - ọkọlọtọ. -ọnụ ọgụgụ (bụbu -scale-var). 10 bụ ọnụọgụ nha (metrics) emepụtara na onye ọbịa ma ọ bụ nkesa ọ bụla. Emepụtara datasets ndị a site na iji TSBS maka akara akara:

  • Usoro 400K pụrụ iche, nkeji 60 nke abụọ n'etiti isi data, data na-ewe ụbọchị 3 zuru ezu, ~ 1.7B ngụkọta ọnụ ọgụgụ data.
  • Usoro 4M pụrụ iche, nkeji 600 nke abụọ, data na-ewe ụbọchị 3 zuru oke, ~ 1.7B ngụkọta ọnụ ọgụgụ data.
  • Usoro oge pụrụ iche nke 40M, nkeji elekere 1, data gbasara ụbọchị 3 zuru oke, ~ 2.8B ngụkọta ọnụ ọgụgụ data.

Onye ahịa na ihe nkesa nọ na-agba ọsọ na ihe atụ raara onwe ya nye n1-ọkọlọtọ-16 n'igwe ojii Google. Usoro ndị a nwere nhazi ndị a:

  • vCPUs: 16
  • Ram: 60 GB
  • Nchekwa: ọkọlọtọ 1TB HDD. Ọ na-enye 120 Mbps ọgụgụ / dee mmepụta, 750 na-agụ ọrụ kwa sekọnd na 1,5K na-ede kwa sekọnd.

Ewepụtara TSDB site na onyonyo docker gọọmentị wee jiri nhazi ndị a na-arụ ọrụ na docker:

  • Victoriametrics:

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

  • Achọrọ influxDB (-e) ụkpụrụ iji kwado ike dị elu. Lee nkọwa na akwụkwọ):

    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

  • TimecaleDB (nhazi ewepụtara na faịlụ):

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

Eji eriri iri na isii na-emekọ ihe na-ebu data.

Edemede a nwere naanị nsonaazụ maka akara ntinye. A ga-ebipụta nsonaazụ nke benchmark ahọpụtara na edemede dị iche.

400K pụrụ iche usoro oge

Ka anyị malite na ihe dị mfe - 400K. Nsonaazụ Benchmark:

  • VictoriaMetrics: 2,6M data ihe kwa nkeji; Ojiji RAM: 3 GB; Ogo data ikpeazụ na diski: 965 MB
  • InfluxDB: 1.2M data ihe kwa nkeji; Ojiji RAM: 8.5 GB; Ogo data ikpeazụ na diski: 1.6 GB
  • Ogologo oge: 849K data ihe kwa nkeji; Ojiji RAM: 2,5 GB; Ogo data ikpeazụ na diski: 50 GB

Dịka ị na-ahụ site na nsonaazụ dị n'elu, VictoriaMetrics na-emeri na arụmọrụ ntinye yana oke mkpakọ. Usoro iheomume na-emeri na iji RAM, mana ọ na-eji ọtụtụ ohere diski - 29 bytes kwa ebe data.

N'okpuru bụ eserese ojiji CPU maka TSDB ọ bụla n'oge akara akara:

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: VictoriaMetrics - Ibu CPU n'oge ule ntinye maka metric 400K pụrụ iche.

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: InfluxDB - ibu CPU n'oge ule ntinye maka metric 400K pụrụ iche.

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: TimecaleDB - Ibu CPU n'oge ule ntinye maka metric pụrụ iche nke 400K.

VictoriaMetrics na-eji vCPU niile dị, ebe InfluxDB anaghị eji ~ 2 n'ime 16 vCPU.

Timecale na-eji naanị 3-4 nke 16 vCPU. Ọnụ ọgụgụ dị elu nke iowait na sistemu dị na eserese oge TimecaleDB na-egosi obere mkpọ na ntinye/mpụta (I/O). Ka anyị lelee eserese bandwidth ojiji diski:

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: VictoriaMetrics - Ojiji bandwit diski n'ime ule ntinye maka Metrics Pụrụ iche 400K.

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: InfluxDB - Ojiji Bandwit Disk na Nnwale Ntinye maka Metrics 400K Pụrụ Iche.

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: TimecaleDB - Ojiji Bandwit Disk na Nleba Nbanye maka Metrics 400K Pụrụ Iche.

VictoriaMetrics na-edekọ data na 20 Mbps yana ọnụ ọgụgụ kacha elu ruru 45 Mbps. Ọnụ ọnụ ọnụ na-adaba na nnukwu mergers n'ime osisi ahụ NGO.

InfluxDB na-ede data na 160 MB/s, ebe draịva 1 TB kwesịrị oke dee mmepụta 120 MB/s.

TimecaleDB nwere oke iji dee ntinye nke 120 Mbps, mana mgbe ụfọdụ ọ na-agbaji oke a wee rute 220 Mbps na ọnụ ahịa kacha elu. Ọnụ ọnụ ndị a kwekọrọ na ndagwurugwu nke ezughị ezu ojiji CPU na eserese gara aga.

Ka anyị leba anya na eserese ojiji nke ntinye/mpụta (I/O):

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: VictoriaMetrics - Tinye ule I/O ojiji maka metrik pụrụ iche 400K.

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: InfluxDB - Fanye ule I/O ojiji maka metric pụrụ iche 400K.

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: TimescaleDB - Tinye ule I/O ojiji maka metrik pụrụ iche 400K.

O doro anya ugbu a na TimescaleDB na-eru oke I/O ya, yabụ na ọ nweghị ike iji 12 vCPU fọdụrụnụ.

4M pụrụ iche usoro oge

Usoro oge 4M na-ele obere ihe ịma aka. Mana ndị asọmpi anyị gafere ule a nke ọma. Nsonaazụ Benchmark:

  • VictoriaMetrics: 2,2M data ihe kwa nkeji; Ojiji RAM: 6 GB; Ogo data ikpeazụ na diski: 3 GB.
  • InfluxDB: 330K data isi kwa nkeji; Ojiji RAM: 20,5 GB; Ogo data ikpeazụ na diski: 18,4 GB.
  • TimecaleDB: 480K data isi kwa nkeji; Ojiji RAM: 2,5 GB; Ogo data ikpeazụ na diski: 52 GB.

Ọrụ InfluxDB kwụsịrị site na isi data 1,2M kwa nkeji maka usoro oge 400K ruo 330K data n'otu nkeji maka usoro oge 4M. Nke a bụ nnukwu mfu arụmọrụ ma e jiri ya tụnyere ndị asọmpi ndị ọzọ. Ka anyị leba anya na eserese ojiji CPU ka anyị ghọta ihe kpatara mfu a:

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: VictoriaMetrics - ojiji CPU n'oge ule ntinye maka usoro oge 4M pụrụ iche.

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: InfluxDB - ojiji CPU n'oge ule ntinye maka usoro oge 4M pụrụ iche.

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: TimescaleDB - ojiji CPU n'oge ule ntinye maka usoro oge 4M pụrụ iche.

VictoriaMetrics na-eji ihe fọrọ nke nta ka ọ bụrụ ikike nhazi niile (CPU). Ndobe na njedebe dabara na njikọ LSM fọdụrụnụ ka etinyere data niile.

InfluxDB na-eji naanị 8 nke 16 vCPUs, ebe TimsecaleDB na-eji 4 nke 16 vCPUs. Kedu ihe eserese ha nwere jikọrọ? Oke oke iowait, nke na-egosikwa ọzọ mkpịrịkọ I/O.

TimecaleDB nwere oke oke system. Anyị na-eche na ike dị elu kpatara ọtụtụ oku usoro ma ọ bụ ọtụtụ obere mmejọ ibe.

Ka anyị leba anya na eserese ngosi diski:

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: VictoriaMetrics - Iji bandwidth diski tinye metrik pụrụ iche 4M.

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: InfluxDB - Iji bandwidth diski tinye metrik pụrụ iche 4M.

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: TimecaleDB - Iji bandwidth diski tinye metrik pụrụ iche 4M.

VictoriaMetrics ruru njedebe nke 120 MB/s na ọnụ ọgụgụ kasị elu, ebe nkezi ọsọ ide bụ 40 MB/s. O yikarịrị ka e mere ọtụtụ ngwakọta LSM dị arọ n'oge ọnụ ọgụgụ kasị elu.

InfluxDB na-ewepụkwa nkezi ntinye ederede nke 200 MB/s yana ọnụ ọgụgụ kacha elu ruru 340 MB/s na diski nwere oke ide nke 120 MB/s :)

TimecaleDB enwekwaghị oke diski. Ọ dị ka ihe ọzọ metụtara oke oke na-ejedebe ya системной Ibu CPU.

Ka anyị lelee eserese ojiji IO:

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: VictoriaMetrics - Iji I/O n'oge ule ntinye maka usoro oge 4M pụrụ iche.

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: InfluxDB - Iji I/O n'oge ule ntinye maka usoro oge 4M pụrụ iche.

Ihe nrịbama TSDB dị elu VictoriaMetrics vs TimescaleDB vs InfluxDB

N'elu bụ nseta ihuenyo: TimescaleDB - Ojiji I/O n'oge ule ntinye maka usoro oge 4M pụrụ iche.

Usoro ojiji IO na-egosipụta nke bandwidth diski - InfluxDB bụ oke IO, ebe VictoriaMetrics na TimescaleDB nwere akụrụngwa IO mapụtara.

40M pụrụ iche usoro oge

Usoro oge pụrụ iche 40M buru ibu maka InfluxDB :)

Nsonaazụ Benchmark:

  • VictoriaMetrics: 1,7M data ihe kwa nkeji; Ojiji RAM: 29 GB; Ojiji ohere diski: 17 GB.
  • InfluxDB: Emechabeghị n'ihi na ọ chọrọ karịa 60GB nke RAM.
  • TimecaleDB: 330K data ihe kwa nkeji, RAM ojiji: 2,5 GB; Ojiji ohere diski: 84GB.

TimecaleDB na-egosi ojiji RAM dị ala ma kwụsie ike na 2,5 GB - otu ihe maka metrik 4M na 400K pụrụ iche.

VictoriaMetrics ji nwayọọ nwayọọ na-ebuli elu n'ọ̀tụ̀tụ̀ data 100K kwa sekọnd ruo mgbe ahazichara aha metrik niile akara 40M. O wee nweta ntinye ntinye nke 1,5-2,0M data n'otu nkeji, ya mere nsonaazụ ikpeazụ bụ 1,7M data n'otu nkeji.

Eserese maka usoro oge pụrụ iche nke 40M yiri eserese maka usoro oge pụrụ iche 4M, yabụ ka anyị tufuo ha.

Nchoputa

  • Ndị TSDB nke oge a nwere ike ịhazi ntinye maka ọtụtụ nde usoro oge pụrụ iche na otu sava. N'isiokwu na-esote, anyị ga-anwale ka TSDB si arụ ọrụ nke ọma n'ofe ọtụtụ nde usoro oge pụrụ iche.
  • Iji CPU ezughi oke na-egosikarị mkpọma I/O. Ọ nwekwara ike igosi na mgbochi ahụ adịchaghị njọ, ebe ọ bụ naanị eriri ole na ole nwere ike ịgba ọsọ n'otu oge.
  • Ikike I/O dị, ọkachasị na nchekwa na-abụghị SSD dị ka ngwaọrụ ngọngọ nke ndị na-eweta igwe ojii.
  • VictoriaMetrics na-enye njikarịcha kacha mma maka nchekwa I/O dị nwayọ. Ọ na-enye ọsọ kacha mma yana oke mkpakọ kacha mma.

Budata Foto nke otu sava VictoriaMetrics ma nwalee ya na data gị. Ihe ọnụọgụ abụọ static kwekọrọ dị na GitHub.

Gụkwuo maka VictoriaMetrics na nke a ederede.

Mmelite: ebipụtara akụkọ na-atụnyere arụmọrụ ntinye nke VictoriaMetrics na InfluxDB na reproducible results.

Mmelite #2: Gụkwuokwa edemede na scalability kwụ ọtọ VictoriaMetrics vs InfluxDB vs TimescaleDB.

Mmelite #3: VictoriaMetrics bụ ebe mepere emepe ugbu a!

Mkparịta ụka telegram: https://t.me/VictoriaMetrics_ru1

isi: www.habr.com

Tinye a comment