VictoriaMetrics, TimescaleDB û InfluxDB li hev hatin berhev kirin li ser danûstendinek bi mîlyar xalên daneyê yên girêdayî 40K rêzikên demê yên bêhempa.
Çend sal berê serdemek Zabbix hebû. Her serverek metalek tazî ji çend nîşanan zêdetir nebû - karanîna CPU, karanîna RAM, karanîna dîskê û karanîna torê. Bi vî rengî, metrîkên ji hezaran pêşkêşkeran dikarin di nav 40 hezar rêzikên demê yên bêhempa de cih bigirin, û Zabbix dikare MySQL wekî paşvekêşana daneyên rêzikên demê bikar bîne :)
Niha tenê bi veavakirinên xwerû zêdetirî 500 metrîk li ser mêvandarê navîn peyda dike. Gelek hene ji bo databasên cihêreng, serverên malperê, pergalên hardware, hwd. Ew hemî cûrbecûr pîvanên kêrhatî peyda dikin. Gişt dest bi danîna nîşaneyên cihêreng ji bo xwe dikin. Kubernetes bi kom û potan hene ku gelek metrîkan eşkere dikin. Ev dibe sedem ku server bi hezaran metrîkên bêhempa ji her mêvandar re eşkere bike. Ji ber vê yekê rêzikên demjimêr ên bêhempa yên 40K êdî ne hêza bilind e. Ew dibe sereke û divê bi hêsanî ji hêla her TSDB-ya nûjen ve li ser serverek yekane were rêve kirin.
Hejmara mezin a rêzikên demê yên yekta niha çend e? Dibe ku 400K an 4M? An jî 40 m? Ka em TSDB-yên nûjen bi van hejmaran bidin ber hev.
Sazkirina pîvanek
ji bo TSDB-ê amûrek pîvanê ya hêja ye. Ew dihêle hûn bi derbaskirina hejmara rêzikên demê yên ku bi 10-an ve têne dabeş kirin hejmareke keyfî ya metrîkan biafirînin. (pêşane -scale-var). 10 hejmara pîvandinan (metrîkên) ye ku li ser her mêvandar an serverek têne çêkirin. Daneyên jêrîn bi karanîna TSBS ji bo pîvanê hatin afirandin:
- 400K rêzikên demkî yên bêhempa, navberek 60 duyemîn di navbera nuqteyên daneyê de, dane 3 rojan tevahî, ~ 1.7B bi tevahî hejmara xalên daneyê digire.
- 4M rêzikên demê yên bêhempa, navbera 600 duyemîn, dane 3 rojên tevahî, ~ 1.7B bi tevahî hejmara xalên daneyê vedigire.
- 40M rêzikên demê yên bêhempa, navberek 1 saetê, daneyê 3 rojên tevahî, ~ 2.8B hejmara giştî ya xalên daneyê vedigire.
Xerîdar û server li ser mînakên diyarkirî dixebitin di Google ewr de. Van mînakan mîhengên jêrîn hebûn:
- vCPU: 16
- RAM: 60 GB
- Storage: Standard 1TB HDD. Ew 120 Mbps rêjeya xwendinê/nivîsandinê, 750 xebatên xwendinê di çirkekê de û 1,5K nivîsandinê di çirkekê de peyda dike.
TSDB ji wêneyên dockerê yên fermî hatin derxistin û di dockerê de bi vesazên jêrîn têne xebitandin:
VictoriaMetrics:
docker run -it --rm -v /mnt/disks/storage/vmetrics-data:/victoria-metrics-data -p 8080:8080 valyala/victoria-metricsNirxên InfluxDB (-e) ji bo piştgirîkirina hêza bilind hewce ne ):
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 (veavakirin ji dosî):
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=100Barkera daneyê bi 16 mijarên paralel hate xebitandin.
Ev gotar tenê encamên ji bo pîvanên têketinê dihewîne. Encamên pîvana bijartî dê di gotarek cûda de bêne weşandin.
400K rêzikên demê yên bêhempa
Ka em bi hêmanên hêsan dest pê bikin - 400K. Encamên pîvanê:
- VictoriaMetrics: 2,6M xalên daneyê di çirkekê de; Bikaranîna RAM: 3 GB; Mezinahiya daneya dawî ya li ser dîskê: 965 MB
- InfluxDB: 1.2M xalên daneyê serê çirkeyê; Bikaranîna RAM: 8.5 GB; Mezinahiya daneya dawî ya li ser dîskê: 1.6 GB
- Demjimêr: 849K xalên daneyê di çirkeyê de; Bikaranîna RAM: 2,5 GB; Mezinahiya daneya dawî ya li ser dîskê: 50 GB
Wekî ku hûn ji encamên li jor dibînin, VictoriaMetrics di performansa lêdanê û rêjeya berhevkirinê de serdikeve. Demjimêr di karanîna RAM-ê de serdikeve, lê ew gelek cîhê dîskê bikar tîne - 29 byte li ser xala daneyê.
Li jêr grafikên karanîna CPU-yê ji bo her yek ji TSDB-ê di dema pîvanê de hene:

Li jor wêneyek dîmenek heye: VictoriaMetrics - Barkirina CPU di dema ceribandina têxê de ji bo metrîkek bêhempa ya 400K.

Li jor dîmenek heye: InfluxDB - Barkirina CPU-yê di dema ceribandina têxê de ji bo metrîka bêhempa 400K.

Li jor wêneyek dîmenek heye: TimescaleDB - Barkirina CPU di dema ceribandina têxê de ji bo metrîka bêhempa ya 400K.
VictoriaMetrics hemî vCPU-yên berdest bikar tîne, dema ku InfluxDB 2 ji 16 vCPU-yan kêm bikar tîne.
Timescale tenê 3-4 ji 16 vCPU bikar tîne. Rêjeyên bilind ên iowait û pergalê di grafika demjimêra TimescaleDB de tengasiyek di binpergala têketin / derketinê (I/O) de destnîşan dike. Ka em li grafikên karanîna berfê ya dîskê binêrin:

Li jor wêneyek dîmenek heye: VictoriaMetrics - Bikaranîna Berfirehiya Dîskê di Testa Têkê de ji bo Metrîkên Yekta 400K.

Li jor wêneyek dîmenek heye: InfluxDB - Bikaranîna Berfirehiya Dîskê ya Di Testa Têkê de ji bo Metrîkên Yekta 400K.

Li jor wêneyek dîmenek heye: TimescaleDB - Bikaranîna Berfirehiya Dîskê li ser Testa Têkê ji bo Metrîkên Yekta 400K.
VictoriaMetrics daneyan bi 20 Mbps bi lûtkeyan heya 45 Mbps tomar dike. Peak bi yekbûnên qismî yên mezin ên di darê de têkildar in .
InfluxDB daneyan bi 160 MB/s dinivîse, dema ku ajokerek 1 TB rêjeya nivîsandinê 120 MB/s.
TimescaleDB ji bo nivîsandina 120 Mbps sînorkirî ye, lê carinan ew vê sînor dişkîne û di nirxên pezê de digihîje 220 Mbps. Van lûtkeyan di grafika berê de bi newalên karanîna kêm a CPU re têkildar in.
Ka em li grafikên karanîna ketin/derketin (I/O) binêrin:

Li jor wêneyek dîmenek heye: VictoriaMetrics - Ji bo 400K metrîkên bêhempa karanîna I/O têxe testê.

Li jor wêneyek dîmenek heye: InfluxDB - Ji bo 400K metrîkên bêhempa karanîna ceribandina I/O têxe.

Li jor wêneyek dîmenek heye: TimescaleDB - Ji bo 400K metrîkên yekta bikar anîna I/O ya ceribandinê têxe.
Naha diyar e ku TimescaleDB digihîje sînorê I/O-ya xwe, ji ber vê yekê ew nikare 12 vCPUyên mayî bikar bîne.
4M rêzikên demê yên bêhempa
Rêzeya dema 4M hinekî dijwar xuya dike. Lê hevrikên me vê îmtîhanê bi serkeftî derbas dikin. Encamên pîvanê:
- VictoriaMetrics: 2,2M xalên daneyê di çirkeyê de; Bikaranîna RAM: 6 GB; Mezinahiya daneya dawî ya li ser dîskê: 3 GB.
- InfluxDB: 330K xalên daneyê serê çirkeyê; Bikaranîna RAM: 20,5 GB; Mezinahiya daneya dawî ya li ser dîskê: 18,4 GB.
- TimescaleDB: 480K xalên daneyê serê çirkeyê; Bikaranîna RAM: 2,5 GB; Mezinahiya daneya dawî ya li ser dîskê: 52 GB.
Performansa InfluxDB ji 1,2M xalên daneyê di çirkeyê de ji bo rêzek demjimêrek 400K daket 330K xalên daneyê di çirkeyê de ji bo rêzek demjimêrek 4M. Ev li gorî pêşbazên din windahiyek performansê ya girîng e. Ka em li grafikên karanîna CPU binihêrin da ku sedema bingehîn a vê windabûnê fam bikin:

Li jor wêneyek dîmenek heye: VictoriaMetrics - Bikaranîna CPU-yê di dema ceribandina danasînê de ji bo rêzek demjimêrek bêhempa ya 4M.

Li jor wêneyek dîmenek heye: InfluxDB - Bikaranîna CPU-yê di dema ceribandina têxê de ji bo rêzikên demê yên yekta 4M.

Li jor wêneyek dîmenek heye: TimescaleDB - Bikaranîna CPU-yê di dema ceribandina têxê de ji bo rêzek demjimêrek bêhempa ya 4M.
VictoriaMetrics hema hema hemî hêza yekîneya pêvajoyê (CPU) bikar tîne. Daketina li dawiyê bi hevgirtinên LSM yên mayî re têkildar e piştî ku hemî dane hatine danîn.
InfluxDB tenê 8 ji 16 vCPU bikar tîne, dema ku TimsecaleDB 4 ji 16 vCPU bikar tîne. Çi grafikên wan ên hevpar hene? Parvekirina bilind iowait, ku dîsa kêşeya I/O nîşan dide.
TimescaleDB xwedan parek bilind e system. Em texmîn dikin ku hêza bilind bûye sedema gelek bangên pergalê an jî gelek .
Ka em li grafikên berbi dîskê binêrin:

Li jor wêneyek dîmenek heye: VictoriaMetrics - Bikaranîna band berdeya dîskê ji bo têxistina metrîkên bêhempa yên 4M.

Li jor wêneyek dîmenek heye: InfluxDB - Ji bo têxistina metrîkên bêhempa yên 4M bikar anîna firehiya dîskê.

Li jor wêneyek dîmenek heye: TimescaleDB - Ji bo têxistina metrîkên bêhempa yên 4M bikar anîna firehiya dîskê.
VictoriaMetrics di lûtkeyê de gihîştiye sînorê 120 MB / s, dema ku leza nivîsandinê ya navîn 40 MB / s bû. Ihtîmal e ku di dema lûtkeyê de gelek fusionên giran ên LSM hatine kirin.
InfluxDB dîsa li ser dîskê bi sînorê nivîsandinê 200 MB/s bi lûtkeya herî zêde 340 MB/s 120 MB/s karbidestiya nivîsandinê ya navîn diqelişe :)
TimescaleDB êdî dîskê tixûbdar nabe. Wusa dixuye ku ew ji hêla tiştek din ve bi rêjeya bilind ve girêdayî ye системной Barkirina CPU.
Ka em li grafikên karanîna IO binêrin:

Li jor dîmenek heye: VictoriaMetrics - Bikaranîna I/O di dema ceribandina têketinê de ji bo rêzek demjimêrek bêhempa ya 4M.

Li jor wêneyek dîmenek heye: InfluxDB - Bikaranîna I/O di dema ceribandina têxê de ji bo rêzek demjimêrek bêhempa ya 4M.

Li jor wêneyek dîmenek heye: TimescaleDB - Bikaranîna I/O di dema ceribandina têxê de ji bo rêzikên demê yên yekta 4M.
Nimûneyên karanîna IO-ê yên firehiya dîskê dişibînin - InfluxDB IO tixûbdar e, dema ku VictoriaMetrics û TimescaleDB xwedan çavkaniyên IO-yê yedek in.
40M rêzikên demê yên bêhempa
40M rêzikên demê yên bêhempa ji bo InfluxDB pir mezin bû :)
Encamên pîvanê:
- VictoriaMetrics: 1,7M xalên daneyê di çirkeyê de; Bikaranîna RAM: 29 GB; Bikaranîna cîhê dîskê: 17 GB.
- InfluxDB: Neqediya ji ber ku ji 60 GB RAM zêdetir hewce dike.
- TimescaleDB: 330K xalên daneyê di çirkeyê de, karanîna RAM: 2,5 GB; Bikaranîna cîhê dîskê: 84 GB.
TimescaleDB di 2,5 GB de karanîna RAM-ê ya bêhempa û domdar nîşan dide - heman wekî pîvanên bêhempa yên 4M û 400K.
VictoriaMetrics hêdî hêdî bi rêjeya 100 hezar xalên daneyê di çirkeyê de zêde bû heya ku hemî navên metrîk ên nîşankirî yên 40M hatin hilanîn. Dûv re wî rêjeyek danûstendinê ya domdar a 1,5-2,0M xalên daneyê di çirkeyê de bi dest xist, ji ber vê yekê encama dawîn 1,7M xalên daneyê di çirkeyê de bû.
Grafikên ji bo rêzikên demê yên yekta yên 40M dişibin grafikên rêzikên dema yekta yên 4M, ji ber vê yekê em dev ji wan berdin.
vebiguherin
- TSDB-yên nûjen dikarin bi mîlyonan rêzikên demkî yên bêhempa li ser serverek yekane pêvekêşan bikin. Di gotara din de, em ê biceribînin ka TSDB çiqasî di nav mîlyon rêzikên demê yên bêhempa de hilbijartinê pêk tîne.
- Kêmasiya karanîna CPU bi gelemperî tengahiyek I/O nîşan dide. Di heman demê de dibe ku destnîşan bike ku astengkirin pir hişk e, bi tenê çend kêşan dikarin di carekê de bimeşin.
- Kêşeya I/O heye, nemaze di hilanîna ne-SSD de, wekî amûrên bloka virtualkirî yên pêşkêşkerên ewr.
- VictoriaMetrics ji bo hilanîna I/O ya hêdî, kêm xweşbîniya çêtirîn peyda dike. Ew leza çêtirîn û rêjeya pêvekirina çêtirîn peyda dike.
Download û wê li ser daneyên xwe biceribînin. Binarya statîk a têkildar li vir heye .
Di vê yekê de bêtir li ser VictoriaMetrics bixwînin .
Nûvekirin: weşandin bi encamên dubare.
Nûvekirin #2: Her weha bixwînin .
Nûvekirin #3: !
Sohbeta Telegramê:
Source: www.habr.com
