Ua hoʻohālikelike ʻia ʻo VictoriaMetrics, TimescaleDB a me InfluxDB ma ma kahi waihona me nā helu ʻikepili pili i ka 40K pūʻulu manawa kūʻokoʻa.
I kekahi mau makahiki i hala aku nei aia kahi au o Zabbix. ʻAʻole i ʻoi aku ka nui o nā hōʻailona o kēlā me kēia kikowaena metala - hoʻohana CPU, hoʻohana RAM, hoʻohana disk a me ka hoʻohana pūnaewele. ʻO kēia ala, hiki i nā metric mai nā kaukani o nā kikowaena ke komo i loko o 40 tausani mau manawa kūʻokoʻa, a hiki iā Zabbix ke hoʻohana i MySQL ma ke ʻano he backend no ka ʻikepili o ka manawa :)
I kēia manawa wale nō me nā hoʻonohonoho paʻamau e hāʻawi aku ma luna o 500 metrics ma ka awelika host. He nui no nā ʻikepili like ʻole, nā kikowaena pūnaewele, nā ʻōnaehana lako, a me nā mea ʻē aʻe. ʻO nā mea a pau hoʻomaka e hoʻonoho i nā hōʻailona like ʻole no lākou iho. Aia nā Kubernetes me nā pūʻulu a me nā pods e hōʻike ana i nā metric he nui. ʻO kēia ka hopena i nā kikowaena e hōʻike ana i nā tausani o nā metric kūʻokoʻa i kēlā me kēia host. No laila, ʻaʻole mana kiʻekiʻe ka mana o ka manawa 40K. Ke lilo nei ia i mea nui a pono e lawelawe maʻalahi ʻia e kekahi TSDB hou ma kahi kikowaena hoʻokahi.
He aha ka nui o nā pūʻulu manawa kūikawā i kēia manawa? 400K a i ʻole 4M paha? A i ʻole 40m? E hoʻohālikelike kākou i nā TSDB hou i kēia mau helu.
Ke kau ʻana i kahi hōʻailona
he mea hana benchmarking maikaʻi loa no TSDBs. Hāʻawi ia iā ʻoe e hoʻohua i kahi helu kūʻokoʻa o nā metric ma ka hāʻawi ʻana i ka helu i koi ʻia o ka manawa manawa i puʻunaue ʻia e 10 - hae. (mua -scale-var). ʻO 10 ka helu o nā ana (metrics) i hana ʻia ma kēlā me kēia host a i ʻole server. Ua hana ʻia nā ʻikepili ma hope me ka hoʻohana ʻana i ka TSBS no ka benchmark:
- ʻO 400K pūʻulu manawa kūʻokoʻa, 60 kekona kekona ma waena o nā helu ʻikepili, ʻike ʻia ka ʻikepili i nā lā 3 piha, ~ 1.7B ka nui o nā helu ʻikepili.
- ʻO 4M pūʻulu manawa kūʻokoʻa, 600 kekona kekona, ʻike ʻike i 3 mau lā piha, ~1.7B ka helu helu helu.
- 40M pūʻulu manawa kūʻokoʻa, 1 hola kaʻawale, ʻike ka ʻikepili i nā lā 3 piha, ~ 2.8B ka helu helu helu.
Ke holo nei ka mea kūʻai aku a me ke kikowaena i nā manawa i hoʻolaʻa ʻia ma ke ao Google. Loaʻa i kēia mau hiʻohiʻona nā hoʻonohonoho penei:
- vCPU: 16
- RAM: 60 GB
- Waihona: 1TB HDD maʻamau. Hāʻawi ia i ka 120 Mbps heluhelu/kākau throughput, 750 heluhelu i kēlā me kēia kekona a me 1,5K kākau i kekona.
Ua lawe ʻia nā TSDB mai nā kiʻi docker mana a holo i loko o ka docker me kēia mau hoʻonohonoho:
VictoriaMetrics:
docker run -it --rm -v /mnt/disks/storage/vmetrics-data:/victoria-metrics-data -p 8080:8080 valyala/victoria-metricsPono nā waiwai InfluxDB (-e) e kākoʻo i ka mana kiʻekiʻe. E ʻike i nā kikoʻī ma ):
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 (hoʻonohonoho i lawe ʻia mai waihona):
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=100Ua holo ʻia ka mea hoʻoili ʻikepili me 16 mau kaula like.
Loaʻa i kēia ʻatikala nā hualoaʻa no nā hōʻailona hoʻokomo. E paʻi ʻia nā hopena o ka papa kuhikuhi koho ma kahi ʻatikala ʻokoʻa.
400K pūʻulu manawa kūʻokoʻa
E hoʻomaka kākou me nā mea maʻalahi - 400K. Nā hualoaʻa hōʻailona:
- VictoriaMetrics: 2,6M mau helu ʻikepili i kēlā me kēia kekona; Hoʻohana RAM: 3 GB; ka nui ʻikepili hope ma ka disk: 965 MB
- InfluxDB: 1.2M mau helu helu i kēlā me kēia kekona; Hoʻohana RAM: 8.5 GB; ka nui ʻikepili hope ma ka disk: 1.6 GB
- Manawa: 849K mau helu ʻikepili i kēlā me kēia kekona; Hoʻohana RAM: 2,5 GB; ka nui ʻikepili hope ma ka disk: 50 GB
E like me kāu e ʻike ai mai nā hopena ma luna, lanakila ʻo VictoriaMetrics i ka hoʻokomo ʻana i ka hana a me ka hoʻohālikelike ʻana. Ua lanakila ka Timeline ma ka hoʻohana ʻana i ka RAM, akā hoʻohana ia i ka nui o ka disk space - 29 bytes no kēlā me kēia helu data.
Aia ma lalo iho nā kiʻi hoʻohana CPU no kēlā me kēia TSDB i ka wā o ka benchmark:

Aia ma luna kahi kiʻi kiʻi: VictoriaMetrics - hoʻouka CPU i ka wā o ka hoʻokomo ʻana no kahi metric 400K kūʻokoʻa.

Aia ma luna kahi kiʻi kiʻi: InfluxDB - hoʻouka CPU i ka wā o ka hoʻokomo ʻana i ka hoʻāʻo no ka metric kūʻokoʻa 400K.

Aia ma luna kahi kiʻi kiʻi: TimescaleDB - hoʻouka CPU i ka wā o ka hoʻokomo ʻana i ka hoʻāʻo no kahi metric kūʻokoʻa o 400K.
Hoʻohana ʻo VictoriaMetrics i nā vCPU āpau i loaʻa, ʻoiai ʻo InfluxDB underutilizes ~ 2 o 16 vCPUs.
Hoʻohana wale ka Timescale i 3-4 o nā vCPU 16. Hōʻike nā ʻāpana kiʻekiʻe o ka iowait a me ka ʻōnaehana ma ka TimescaleDB timescale graph i kahi bottleneck i loko o ka subsystem input/output (I/O). E nānā kākou i nā kiʻi hoʻohana bandwidth disk:

Aia ma luna ke kiʻi kiʻi: VictoriaMetrics - Hoʻohana ʻana i ka Bandwidth Disk i ka hoʻāʻo hoʻokomo ʻana no nā ʻano ʻokoʻa 400K.

Aia ma luna kahi kiʻi kiʻi: InfluxDB - Hoʻohana ʻia ʻo Disk Bandwidth ma ka hoʻāʻo hoʻokomo ʻana no nā Metric Unique 400K.

Aia ma luna kahi kiʻi kiʻi: TimescaleDB - Hoʻohana ʻia ʻo Disk Bandwidth ma ka hoʻāʻo hoʻokomo ʻana no nā Metric Unique 400K.
Hoʻopaʻa ʻo VictoriaMetrics i ka ʻikepili ma 20 Mbps me nā kiʻekiʻe a hiki i 45 Mbps. Kūlike nā piko i nā hui ʻāpana nui o ka lāʻau .
Kākau ʻo InfluxDB i ka ʻikepili ma 160 MB/s, ʻoiai he 1 TB drive kākau i ka throughput 120 MB/s.
Ua kaupalena ʻia ʻo TimescaleDB e kākau i ka throughput o 120 Mbps, akā i kekahi manawa ua haki ia i kēia palena a hiki i ka 220 Mbps i nā waiwai kiʻekiʻe. Pili kēia mau piko i nā awāwa o ka lawa ʻole o ka hoʻohana ʻana i ka CPU ma ka pakuhi mua.
E nānā kākou i nā kiʻi hoʻohana hoʻokomo/puka (I/O):

Aia ma luna kahi kiʻi paʻi kiʻi: VictoriaMetrics - Hoʻokomo i ka hoʻohana I/O hoʻāʻo no 400K mau ana kū hoʻokahi.

Aia ma luna kahi kiʻi paʻi kiʻi: InfluxDB - E hoʻokomo i ka hoʻohana I/O hoʻāʻo no 400K mau metric kūʻokoʻa.

Aia ma luna kahi kiʻi paʻi: TimescaleDB - Hoʻokomo i ka hoʻohana I/O hoʻāʻo no 400K mau ana kū hoʻokahi.
Ua maopopo i kēia manawa ke hiki nei ʻo TimescaleDB i kona palena I/O, no laila ʻaʻole hiki iā ia ke hoʻohana i nā 12 vCPU i koe.
4M pūʻulu manawa kūʻokoʻa
He mea paʻakikī loa ka 4M time series. Akā ʻo kā mākou poʻe hoʻokūkū e hele kūleʻa i kēia hoʻokolohua. Nā hualoaʻa hōʻailona:
- VictoriaMetrics: 2,2M mau helu ʻikepili i kēlā me kēia kekona; Hoʻohana RAM: 6 GB; ka nui ʻikepili hope ma ka disk: 3 GB.
- InfluxDB: 330K mau helu helu i kēlā me kēia kekona; Hoʻohana RAM: 20,5 GB; ka nui ʻikepili hope loa ma ka disk: 18,4 GB.
- TimescaleDB: 480K mau helu ʻikepili i kēlā me kēia kekona; Hoʻohana RAM: 2,5 GB; ka nui ʻikepili hope ma ka disk: 52 GB.
Ua hāʻule ka hana InfluxDB mai 1,2M mau helu ʻikepili i kēlā me kēia kekona no kahi 400K manawa moʻo a i 330K mau helu ʻikepili i kēlā me kēia kekona no kahi moʻo manawa 4M. He poho hana nui kēia i hoʻohālikelike ʻia me nā mea hoʻokūkū ʻē aʻe. E nānā kākou i nā kiʻi hoʻohana CPU e hoʻomaopopo i ke kumu kumu o kēia poho:

Aia ma luna ke kiʻi kiʻi: VictoriaMetrics - hoʻohana ʻana i ka CPU i ka wā o ka hoʻokomo ʻana i ka hoʻāʻo no ka moʻo manawa 4M kūʻokoʻa.

Aia ma luna ke kiʻi kiʻi: InfluxDB - ka hoʻohana ʻana i ka CPU i ka wā o ka hoʻokomo ʻana i ka hoʻāʻo no ka moʻo manawa 4M kūʻokoʻa.

Aia ma luna kahi kiʻi kiʻi: TimescaleDB - ka hoʻohana ʻana i ka CPU i ka wā o ka hoʻokomo ʻana i ka hoʻāʻo no kahi moʻo manawa 4M kūʻokoʻa.
Hoʻohana ʻo VictoriaMetrics i ka mana o ka mana hana (CPU). ʻO ka hāʻule ma ka hopena e pili ana i nā hui LSM i koe ma hope o ka hoʻokomo ʻana i nā ʻikepili āpau.
Hoʻohana ʻo InfluxDB i 8 o 16 vCPU wale nō, ʻoiai hoʻohana ʻo TimsecaleDB i 4 o 16 vCPU. He aha ka like o kā lākou mau pakuhi? Māhele kiʻekiʻe iowait, e hōʻike hou ana i kahi bottleneck I/O.
He kaʻana kiʻekiʻe ko TimescaleDB system. Manaʻo mākou ua hopena ka mana kiʻekiʻe i nā kelepona ʻōnaehana he nui a nui paha .
E nānā kākou i nā kiʻi pākuʻi disk throughput:

Aia ma luna kahi kiʻi kiʻi: VictoriaMetrics - Ke hoʻohana nei i ka bandwidth disk e hoʻokomo i nā metric kūʻokoʻa 4M.

Aia ma luna kahi kiʻi kiʻi: InfluxDB - Ke hoʻohana nei i ka bandwidth disk e hoʻokomo i nā metric kūʻokoʻa 4M.

Aia ma luna kahi kiʻi kiʻi: TimescaleDB - Ke hoʻohana nei i ka bandwidth disk e hoʻokomo i nā metric kūʻokoʻa 4M.
Ua hōʻea ʻo VictoriaMetrics i ka palena o 120 MB/s ma ka piko, ʻoiai ʻo ka awelika o ka wikiwiki kākau ʻana he 40 MB/s. Malia paha ua hana ʻia kekahi mau fusion LSM koʻikoʻi i ka wā o ka piko.
Hoʻopili hou ʻo InfluxDB i kahi helu kākau maʻamau o 200 MB/s me nā kiʻekiʻe a hiki i 340 MB/s ma kahi disk me ka palena kākau o 120 MB/s :)
ʻAʻole i kaupalena ʻia ʻo TimescaleDB. ʻIke ʻia e kaupalena ʻia e kekahi mea ʻē aʻe e pili ana i ka nui kiʻekiʻe системной Haawe CPU.
E nānā kākou i nā kiʻi hoʻohana IO:

Aia ma luna kahi kiʻi paʻi kiʻi: VictoriaMetrics - Ke hoʻohana nei i ka I/O i ka wā o ka hoʻokomo ʻana i ka hoʻāʻo no kahi moʻo manawa 4M kūʻokoʻa.

Aia ma luna kahi kiʻi paʻi kiʻi: InfluxDB - Ke hoʻohana nei i ka I/O i ka wā o ka hoʻokomo ʻana i ka hoʻāʻo no kahi moʻo manawa 4M kūʻokoʻa.

Aia ma luna kahi kiʻi paʻi kiʻi: TimescaleDB - hoʻohana I/O i ka hoʻokomo ʻana i ka hoʻāʻo no ka moʻo manawa 4M kūʻokoʻa.
Hoʻohālikelike nā hiʻohiʻona hoʻohana IO i ka bandwidth disk - He palena ʻo InfluxDB ʻo IO, ʻoiai ʻo VictoriaMetrics a me TimescaleDB he mau kumuwaiwai IO.
40M pūʻulu manawa kūʻokoʻa
Nui loa ka 40M mau manawa kūʻokoʻa no InfluxDB :)
Nā hualoaʻa hōʻailona:
- VictoriaMetrics: 1,7M mau helu ʻikepili i kēlā me kēia kekona; Hoʻohana RAM: 29 GB; Hoʻohana wahi disk: 17 GB.
- InfluxDB: ʻAʻole i pau no ka mea e koi ana ma mua o 60GB o RAM.
- TimescaleDB: 330K mau helu ʻikepili i kēlā me kēia kekona, hoʻohana RAM: 2,5 GB; Hoʻohana wahi disk: 84GB.
Hōʻike ʻo TimescaleDB i ka haʻahaʻa haʻahaʻa a paʻa i ka hoʻohana ʻana i ka RAM ma 2,5 GB - e like me nā metric kūʻokoʻa 4M a me 400K.
Ua piʻi mālie ʻo VictoriaMetrics ma kahi o 100K mau helu ʻikepili i kēlā me kēia kekona a hiki i ka hana ʻia ʻana o nā inoa metric 40M a pau. A laila loaʻa iā ia ka helu hoʻokomo hoʻomau o 1,5-2,0M mau helu ʻikepili i kēlā me kēia kekona, no laila ʻo ka hopena hope loa he 1,7M mau helu ʻikepili i kekona.
Ua like nā kiʻi no 40M pūʻulu manawa kūʻokoʻa me nā pakuhi no 4M pūʻulu manawa kūʻokoʻa, no laila e hoʻokuʻu iā lākou.
haʻina
- Hiki i nā TSDB hou ke hana i nā mea hoʻokomo no nā miliona o ka manawa kūʻokoʻa ma kahi kikowaena hoʻokahi. Ma ka ʻatikala aʻe, e hoʻāʻo mākou i ka maikaʻi o ka TSDBs i ke koho ʻana ma waena o nā miliona o ka manawa kūʻokoʻa.
- ʻAʻole lawa ka hoʻohana ʻana i ka CPU e hōʻike pinepine i kahi bottleneck I/O. Hiki ke hōʻike ʻia he koʻikoʻi loa ka paʻa ʻana, me nā kaula liʻiliʻi wale nō e holo i ka manawa.
- Loaʻa ka bottleneck I/O, ʻoi aku ka nui ma ka waiho ʻole SSD e like me nā polokalamu poloka virtualized cloud providers.
- Hāʻawi ʻo VictoriaMetrics i ka loiloi maikaʻi loa no ka mālama ʻana i ka I/O lohi, haʻahaʻa. Hāʻawi ia i ka wikiwiki maikaʻi loa a me ka ratio hoʻopiʻi maikaʻi loa.
Hoʻoiho a ho'āʻo ma kāu ʻikepili. Loaʻa ka binary static pili ma .
E heluhelu hou e pili ana iā VictoriaMetrics i kēia .
Hou: paʻi ʻia me nā hopena hiki ke hana hou ʻia.
Hou #2: Heluhelu pū .
Hōʻano hou #3: !
Kamaʻilio Telegram:
Source: www.habr.com
