VictoriaMetrics, TimescaleDB ak InfluxDB te konpare nan sou yon seri done ak yon milya pwen done ki fè pati seri tan inik 40K.
Kèk ane de sa te gen yon epòk Zabbix. Chak sèvè metal fè pa te gen plis pase kèk endikatè - itilizasyon CPU, itilizasyon RAM, itilizasyon disk ak itilizasyon rezo. Nan fason sa a, mezi ki soti nan dè milye de sèvè ka anfòm nan 40 mil seri tan inik, ak Zabbix ka itilize MySQL kòm yon backend pou done seri tan :)
Kounye a pou kont li ak konfigirasyon default bay plis pase 500 mezi sou lame an mwayèn. Gen anpil pou divès baz done, sèvè entènèt, sistèm pyès ki nan konpitè, elatriye. Yo tout bay yon varyete de mezi itil. Tout kòmanse mete plizyè endikatè pou tèt yo. Gen Kubernetes ak grap ak gous ki ekspoze anpil mezi. Sa a rezilta nan serveurs ekspoze dè milye de metrik inik pou chak lame. Se konsa, seri tan inik 40K a pa gen gwo pouvwa ankò. Li ap vin endikap epi yo ta dwe fasil okipe pa nenpòt TSDB modèn sou yon sèl sèvè.
Ki kantite seri tan inik nan moman sa a? Pwobableman 400K oswa 4M? Oswa 40m? Ann konpare TSDB modèn ak nimewo sa yo.
Enstale yon referans
se yon zouti ekselan benchmarking pou TSDB. Li pèmèt ou jenere yon kantite abitrè nan mezi lè w pase kantite seri tan ki nesesè yo divize pa 10 - drapo. (ansyen -scale-var). 10 se kantite mezi (mestik) ki te pwodwi sou chak lame oswa sèvè. Ansanm done sa yo te pwodwi lè l sèvi avèk TSBS pou referans la:
- 400K seri tan inik, entèval 60 segonn ant pwen done yo, done yo kouvri yon 3 jou konplè, ~1.7B kantite total pwen done.
- 4M seri tan inik, entèval 600 segonn, done yo dire 3 jou konplè, ~ 1.7B kantite total pwen done.
- 40M seri tan inik, entèval 1 èdtan, done yo dire 3 jou konplè, ~ 2.8B kantite total pwen done.
Kliyan an ak sèvè te kouri sou ka dedye nan nwaj Google. Ka sa yo te gen konfigirasyon sa yo:
- vCPU: 16
- RAM: 60 GB
- Depo: Standard 1TB HDD. Li bay 120 Mbps lekti/ekri debi, 750 operasyon lekti pou chak segonn ak 1,5K ekri pou chak segonn.
TSDB yo te ekstrè nan imaj ofisyèl Docker epi kouri nan Docker ak konfigirasyon sa yo:
VictoriaMetrics:
docker run -it --rm -v /mnt/disks/storage/vmetrics-data:/victoria-metrics-data -p 8080:8080 valyala/victoria-metricsValè InfluxDB (-e) yo oblije sipòte gwo pouvwa. Gade detay nan ):
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 (konfigirasyon te pran nan dosye):
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=100Charger done a te kouri ak 16 fil paralèl.
Atik sa a gen sèlman rezilta pou referans ensèsyon. Rezilta yo nan referans selektif la pral pibliye nan yon atik separe.
400K seri tan inik
Ann kòmanse ak eleman senp - 400K. Rezilta referans:
- VictoriaMetrics: 2,6M pwen done pou chak segonn; Itilizasyon RAM: 3 GB; gwosè final done sou disk: 965 MB
- InfluxDB: 1.2M pwen done pou chak segonn; Itilizasyon RAM: 8.5 GB; gwosè final done sou disk: 1.6 GB
- Echèl: 849K pwen done pou chak segonn; Itilizasyon RAM: 2,5 GB; gwosè final done sou disk: 50 GB
Kòm ou ka wè nan rezilta ki anwo yo, VictoriaMetrics ranport nan pèfòmans ensèsyon ak rapò konpresyon. Timeline ranport nan itilizasyon RAM, men li itilize anpil espas ki gen kapasite - 29 bytes pou chak pwen done.
Anba a se graf itilizasyon CPU pou chak nan TSDB yo pandan referans la:

Pi wo a se yon Ekran: VictoriaMetrics - chaj CPU pandan tès ensèsyon pou yon metrik inik 400K.

Pi wo a se yon Ekran: InfluxDB - CPU chaj pandan tès ensèsyon pou metrik inik 400K.

Anwo a se yon Ekran: TimescaleDB - CPU chaj pandan tès ensèsyon pou yon metrik inik nan 400K.
VictoriaMetrics sèvi ak tout vCPU ki disponib, pandan InfluxDB pa itilize ~2 sou 16 vCPU.
Timecale sèlman itilize 3-4 nan 16 vCPU yo. Gwo pwopòsyon iowait ak sistèm nan graf echèl TimescaleDB a endike yon blokaj nan subsistèm antre/sòti (I/O). Ann gade graf itilizasyon bandwidth disk yo:

Anwo a se yon Ekran: VictoriaMetrics - Disk Bandwidth Itilizasyon nan Tès Ensèsyon pou Metris inik 400K.

Anwo a se yon Ekran: InfluxDB - Disk Bandwidth Itilizasyon sou Tès Ensèsyon pou Metris inik 400K.

Anwo a se yon Ekran: TimescaleDB - Disk Bandwidth Itilizasyon sou Tès Ensèsyon pou Metrik Inik 400K.
VictoriaMetrics anrejistre done nan 20 Mbps ak pik jiska 45 Mbps. Pik yo koresponn ak gwo fusion pasyèl nan pye bwa a .
InfluxDB ekri done nan 160 MB / s, pandan y ap yon kondwi 1 TB debi ekri 120 MB/s.
TimescaleDB limite pou ekri debi 120 Mbps, men pafwa li kraze limit sa a epi li rive nan 220 Mbps nan pik valè. Pik sa yo koresponn ak fon itilizasyon CPU ensifizan nan graf anvan an.
Ann gade graf itilizasyon antre/sòti (I/O):

Anwo a se yon Ekran: VictoriaMetrics - Mete tès I/O itilizasyon pou 400K mezi inik.

Anwo a se yon Ekran: InfluxDB - Mete tès I/O itilizasyon pou 400K mezi inik.

Anwo a se yon Ekran: TimescaleDB - Mete tès I/O itilizasyon pou 400K mezi inik.
Kounye a li klè ke TimescaleDB rive nan limit I/O li yo, kidonk li pa ka sèvi ak 12 vCPU ki rete yo.
4M seri tan inik
Seri tan 4M gade yon ti kras difisil. Men, konpetitè nou yo pase egzamen sa a avèk siksè. Rezilta referans:
- VictoriaMetrics: 2,2M pwen done pou chak segonn; Itilizasyon RAM: 6 GB; gwosè final done sou disk: 3 GB.
- InfluxDB: 330K pwen done pou chak segonn; Itilizasyon RAM: 20,5 GB; gwosè done final sou disk: 18,4 GB.
- TimescaleDB: 480K pwen done pou chak segonn; Itilizasyon RAM: 2,5 GB; gwosè final done sou disk: 52 GB.
Pèfòmans InfluxDB tonbe soti nan 1,2M pwen done pou chak segonn pou yon seri tan 400K a 330K pwen done pou chak segonn pou yon seri tan 4M. Sa a se yon pèt pèfòmans enpòtan konpare ak lòt konpetitè. Ann gade graf itilizasyon CPU yo pou w konprann kòz rasin pèt sa a:

Anwo a se yon Ekran: VictoriaMetrics - Itilizasyon CPU pandan tès ensèsyon pou yon seri tan inik 4M.

Anwo a se yon Ekran: InfluxDB - Itilizasyon CPU pandan tès ensèsyon pou seri tan inik 4M.

Anwo a se yon Ekran: TimescaleDB - Itilizasyon CPU pandan tès ensèsyon pou yon seri tan inik 4M.
VictoriaMetrics itilize prèske tout pouvwa inite pwosesis la (CPU). Gout la nan fen a koresponn ak LSM ki rete a fizyone apre tout done yo te mete.
InfluxDB itilize sèlman 8 sou 16 vCPU, pandan y ap TimsecaleDB itilize 4 sou 16 vCPU. Kisa graf yo genyen an komen? Gwo pataje iowait, ki ankò endike yon bouch I/O.
TimescaleDB gen yon gwo pati system. Nou sipoze ke gwo pouvwa a te lakòz anpil apèl sistèm oswa anpil .
Ann gade graf debi disk yo:

Anwo a se yon Ekran: VictoriaMetrics - Sèvi ak bandwidth disk pou mete 4M mezi inik.

Anwo a se yon Ekran: InfluxDB - Sèvi ak Pleasant ki gen kapasite pou mete 4M mezi inik.

Anwo a se yon Ekran: TimescaleDB - Sèvi ak Pleasant ki gen kapasite pou mete 4M mezi inik.
VictoriaMetrics te rive nan yon limit nan 120 MB / s nan pik, pandan y ap vitès ekri an mwayèn te 40 MB / s. Li posib ke plizyè fizyon LSM lou yo te fèt pandan pik la.
InfluxDB ankò peze soti yon mwayèn debi ekri nan 200 MB / s ak pik ki rive jiska 340 MB / s sou yon disk ak yon limit ekri nan 120 MB / s :)
TimescaleDB pa limite disk ankò. Li parèt limite pa yon lòt bagay ki gen rapò ak gwo pwopòsyon системной CPU chaj.
Ann gade graf itilizasyon IO yo:

Anwo a se yon Ekran: VictoriaMetrics - Sèvi ak I/O pandan tès ensèsyon pou yon seri tan inik 4M.

Anwo a se yon Ekran: InfluxDB - Sèvi ak I/O pandan tès ensèsyon pou yon seri tan inik 4M.

Anwo a se yon Ekran: TimescaleDB - Itilizasyon I/O pandan tès ensèsyon pou seri tan inik 4M.
Modèl itilizasyon IO yo reflete sa yo ki nan bandwidth disk - InfluxDB limite IO, pandan VictoriaMetrics ak TimescaleDB gen resous IO rezèv.
40M seri tan inik
40M seri tan inik te twò gwo pou InfluxDB :)
Rezilta referans:
- VictoriaMetrics: 1,7M pwen done pou chak segonn; Itilizasyon RAM: 29 GB; Itilizasyon espas disk: 17 GB.
- InfluxDB: Pa t 'fini paske li te mande plis pase 60GB RAM.
- TimescaleDB: 330K pwen done pou chak segonn, itilizasyon RAM: 2,5 GB; Itilizasyon espas disk: 84GB.
TimescaleDB montre itilizasyon RAM eksepsyonèlman ba ak ki estab nan 2,5 GB - menm jan ak mezi inik 4M ak 400K.
VictoriaMetrics te ogmante tou dousman nan yon pousantaj de 100k pwen done pou chak segonn jiskaske tout 40M tag non metrik yo te trete. Lè sa a, li te reyalize yon pousantaj ensèsyon soutni nan 1,5-2,0M pwen done pou chak segonn, kidonk rezilta final la te 1,7M pwen done pou chak segonn.
Grafik yo pou seri tan inik 40M yo sanble ak graf yo pou seri tan inik 4M, kidonk ann sote yo.
Jwenn
- TSDB modèn yo kapab trete foure pou dè milyon de seri tan inik sou yon sèl sèvè. Nan pwochen atik la, nou pral teste ki jan byen TSDB fè seleksyon atravè plizyè milyon seri tan inik.
- Itilizasyon CPU ensifizan anjeneral endike yon kou boutèy I/O. Li ka tou endike ke bloke a twò koryas, ak sèlman kèk fil kapab kouri nan yon moman.
- Bouton I/O egziste, espesyalman nan depo ki pa SSD tankou aparèy blòk virtualize founisè nwaj yo.
- VictoriaMetrics bay pi bon optimize pou depo I/O ralanti ak ba. Li bay pi bon vitès ak pi bon rapò konpresyon.
Download epi eseye li sou done ou yo. Binè estatik ki koresponn lan disponib nan .
Li plis sou VictoriaMetrics nan sa a .
Mizajou: pibliye ak rezilta repwodiktif.
Mizajou #2: Li tou .
Mizajou #3: !
Telegram chat:
Sous: www.habr.com
