Augstas veiktspÄjas TSDB etalons VictoriaMetrics vs TimescaleDB vs InfluxDB
gadÄ tika salÄ«dzinÄti VictoriaMetrics, TimescaleDB un InfluxDB iepriekÅ”Äjais raksts datu kopÄ ar miljardu datu punktu, kas pieder 40 XNUMX unikÄlÄm laikrindÄm.
Pirms dažiem gadiem bija Zabbix laikmets. Katram tukÅ”a metÄla serverim bija ne vairÄk kÄ daži rÄdÄ«tÄji - CPU lietojums, RAM lietojums, diska lietojums un tÄ«kla lietojums. TÄdÄ veidÄ metrika no tÅ«kstoÅ”iem serveru var iekļauties 40 tÅ«kstoÅ”os unikÄlu laikrindu, un Zabbix var izmantot MySQL kÄ aizmuguri laikrindu datiem :)
PaÅ”laik vienatnÄ mezgls_eksportÄtÄjs ar noklusÄjuma konfigurÄcijÄm nodroÅ”ina vairÄk nekÄ 500 metrikas vidÄjÄ resursdatorÄ. Tur ir daudz eksportÄtÄjiem dažÄdÄm datu bÄzÄm, tÄ«mekļa serveriem, aparatÅ«ras sistÄmÄm utt. Tie visi nodroÅ”ina dažÄdus noderÄ«gus rÄdÄ«tÄjus. Visi arvien vairÄk lietojumprogrammu sÄk sev noteikt dažÄdus rÄdÄ«tÄjus. Ir Kubernetes ar klasteriem un podiem, kas atklÄj daudzus rÄdÄ«tÄjus. TÄ rezultÄtÄ serveri katram resursdatoram atklÄj tÅ«kstoÅ”iem unikÄlu metrikas. TÄtad unikÄlajai 40 K laikrindai vairs nav lielas jaudas. Tas kļūst par galveno, un ar to vajadzÄtu viegli rÄ«koties ar jebkuru modernu TSDB vienÄ serverÄ«.
KÄds Å”obrÄ«d ir lielais unikÄlo laikrindu skaits? DroÅ”i vien 400K vai 4M? Vai 40 m? SalÄ«dzinÄsim mÅ«sdienu TSDB ar Å”iem skaitļiem.
Etalona uzstÄdÄ«Å”ana
TSBS ir lielisks salÄ«dzinoÅ”Äs novÄrtÄÅ”anas rÄ«ks TSDB. Tas ļauj Ä£enerÄt patvaļīgu skaitu metrikas, nododot nepiecieÅ”amo laikrindu skaitu, dalÄ«tu ar 10 - karodziÅÅ” - mÄrogs (bijuÅ”ais -scale-var). 10 ir mÄrÄ«jumu (metriku) skaits, kas Ä£enerÄts katrÄ resursdatorÄ vai serverÄ«. Izmantojot TSBS etalonam, tika Ä£enerÄtas Å”Ädas datu kopas:
400 60 unikÄlas laikrindas, 3 sekunžu intervÄls starp datu punktiem, dati aptver visas 1.7 dienas, ~XNUMX B kopÄjais datu punktu skaits.
4 miljoni unikÄlas laika rindas, 600 sekunžu intervÄls, dati aptver 3 pilnas dienas, ~1.7 B kopÄjais datu punktu skaits.
40 miljoni unikÄlas laikrindas, 1 stunda, dati aptver 3 pilnas dienas, ~2.8 B kopÄjais datu punktu skaits.
Klients un serveris darbojÄs Ä«paÅ”Äs instancÄs n1-standarta-16 Google mÄkonÄ«. Å iem gadÄ«jumiem bija Å”Ädas konfigurÄcijas:
vCPU: 16
RAM: 60 GB
UzglabÄÅ”ana: standarta 1 TB HDD. Tas nodroÅ”ina 120 Mb/s lasÄ«Å”anas/rakstÄ«Å”anas caurlaidspÄju, 750 lasÄ«Å”anas operÄcijas sekundÄ un 1,5 K rakstÄ«Å”anas Ätrumu sekundÄ.
TSDB tika iegÅ«ti no oficiÄlajiem docker attÄliem un tika palaisti dockerÄ ar Å”ÄdÄm konfigurÄcijÄm:
VictoriaMetrics:
docker run -it --rm -v /mnt/disks/storage/vmetrics-data:/victoria-metrics-data -p 8080:8080 valyala/victoria-metrics
InfluxDB (-e) vÄrtÄ«bas ir nepiecieÅ”amas, lai atbalstÄ«tu lielu jaudu. Skatiet sÄ«kÄku informÄciju dokumentÄcija):
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
Datu ielÄdÄtÄjs tika palaists ar 16 paralÄliem pavedieniem.
Å ajÄ rakstÄ ir ietverti tikai ievietoÅ”anas etalonu rezultÄti. SelektÄ«vÄ etalona rezultÄti tiks publicÄti atseviÅ”Ä·Ä rakstÄ.
400 XNUMX unikÄlas laikrindas
SÄksim ar vienkÄrÅ”iem elementiem - 400K. Etalona rezultÄti:
VictoriaMetrics: 2,6 miljoni datu punktu sekundÄ; RAM lietojums: 3 GB; galÄ«gais datu apjoms diskÄ: 965 MB
InfluxDB: 1.2 miljoni datu punktu sekundÄ; RAM lietojums: 8.5 GB; galÄ«gais datu apjoms diskÄ: 1.6 GB
Laika skala: 849 2,5 datu punktu sekundÄ; RAM lietojums: 50 GB; galÄ«gais datu apjoms diskÄ: XNUMX GB
KÄ redzat no iepriekÅ” minÄtajiem rezultÄtiem, VictoriaMetrics uzvar ievietoÅ”anas veiktspÄjÄ un saspieÅ”anas pakÄpÄ. Laika skala uzvar RAM lietoÅ”anÄ, taÄu tÄ izmanto daudz vietas diskÄ - 29 baiti uz vienu datu punktu.
TÄlÄk ir sniegtas CPU lietojuma diagrammas katram TSDB etalona laikÄ:
IepriekÅ” ir ekrÄnuzÅÄmums: VictoriaMetrics ā CPU slodze ievietoÅ”anas pÄrbaudes laikÄ unikÄlai 400 K metrikai.
IepriekÅ” ir ekrÄnuzÅÄmums: InfluxDB ā CPU slodze ievietoÅ”anas pÄrbaudes laikÄ unikÄlai metrikai 400 K.
IepriekÅ” ir ekrÄnuzÅÄmums: TimescaleDB ā CPU slodze ievietoÅ”anas pÄrbaudes laikÄ unikÄlai 400 K metrikai.
VictoriaMetrics izmanto visus pieejamos vCPU, savukÄrt InfluxDB nepietiekami izmanto ~ 2 no 16 vCPU.
Laika skalÄ tiek izmantoti tikai 3ā4 no 16 vCPU. Liela iowait un sistÄmas proporcija TimescaleDB laika skalas grafikÄ norÄda uz vÄjo vietu ievades/izvades (I/O) apakÅ”sistÄmÄ. ApskatÄ«sim diska joslas platuma lietojuma grafikus:
IepriekÅ” ir ekrÄnuzÅÄmums: VictoriaMetrics ā diska joslas platuma lietojums unikÄlo metrikas 400 K ievietoÅ”anas testÄ.
IepriekÅ” ir ekrÄnuzÅÄmums: InfluxDB ā diska joslas platuma lietojums ievietoÅ”anas testÄ unikÄlai metrikai 400 K.
IepriekÅ” ir ekrÄnuzÅÄmums: TimescaleDB ā diska joslas platuma lietojums ievietoÅ”anas testÄ unikÄlai metrikai 400 K.
VictoriaMetrics ieraksta datus ar Ätrumu 20 Mb/s ar maksimumu lÄ«dz 45 Mb/s. Virsotnes atbilst lielai daļÄjai saplÅ«Å”anai kokÄ NVO.
InfluxDB ieraksta datus ar Ätrumu 160 MB/s, savukÄrt 1 TB disks bÅ«tu jÄierobežo rakstÄ«Å”anas caurlaidspÄja 120 MB/s.
TimescaleDB ir ierobežota rakstÄ«Å”anas caurlaidspÄja 120 Mb/s, taÄu dažreiz tas pÄrkÄpj Å”o ierobežojumu un sasniedz 220 Mb/s maksimÄlÄs vÄrtÄ«bÄs. Å Ä«s virsotnes atbilst nepietiekamas CPU izmantoÅ”anas ielejÄm iepriekÅ”ÄjÄ grafikÄ.
VictoriaMetrics: 2,2 miljoni datu punktu sekundÄ; RAM lietojums: 6 GB; galÄ«gais datu apjoms diskÄ: 3 GB.
InfluxDB: 330 20,5 datu punktu sekundÄ; RAM lietojums: 18,4 GB; galÄ«gais datu apjoms diskÄ: XNUMX GB.
TimescaleDB: 480 2,5 datu punktu sekundÄ; RAM lietojums: 52 GB; galÄ«gais datu apjoms diskÄ: XNUMX GB.
InfluxDB veiktspÄja ir samazinÄjusies no 1,2 miljoniem datu punktiem sekundÄ 400 330 laikrindai lÄ«dz 4 XNUMX datu punktiem sekundÄ XNUMX miljonu laika rindÄm. Tas ir ievÄrojams veiktspÄjas zudums salÄ«dzinÄjumÄ ar citiem konkurentiem. ApskatÄ«sim CPU izmantoÅ”anas diagrammas, lai saprastu Ŕī zaudÄjuma galveno cÄloni:
IepriekÅ” ir ekrÄnuzÅÄmums: VictoriaMetrics ā CPU lietojums ievietoÅ”anas testa laikÄ unikÄlai 4 M laikrindai.
IepriekÅ” ir ekrÄnuzÅÄmums: InfluxDB ā CPU lietojums ievietoÅ”anas testa laikÄ unikÄlai 4M laikrindai.
IepriekÅ” ir ekrÄnuzÅÄmums: TimescaleDB ā CPU lietojums ievietoÅ”anas testa laikÄ unikÄlai 4 M laikrindai.
VictoriaMetrics izmanto gandrÄ«z visu procesora (CPU) jaudu. Piliens beigÄs atbilst atlikuÅ”ajiem LSM sapludinÄjumiem pÄc visu datu ievietoÅ”anas.
InfluxDB izmanto tikai 8 no 16 vCPU, savukÄrt TimsecaleDB izmanto 4 no 16 vCPU. Kas kopÄ«gs viÅu grafikiem? Augsta daļa iowait, kas atkal norÄda uz I/O saÅ”aurinÄjumu.
TimescaleDB ir liela daļa system. MÄs pieÅemam, ka liela jauda izraisÄ«ja daudzus vai daudzus sistÄmas zvanus nelieli lapas defekti.
ApskatÄ«sim diska caurlaidspÄjas grafikus:
IepriekÅ” ir ekrÄnuzÅÄmums: VictoriaMetrics ā diska joslas platuma izmantoÅ”ana, lai ievietotu 4 M unikÄlus rÄdÄ«tÄjus.
IepriekÅ” ir ekrÄnuzÅÄmums: InfluxDB ā diska joslas platuma izmantoÅ”ana, lai ievietotu 4 M unikÄlus rÄdÄ«tÄjus.
IepriekÅ” ir ekrÄnuzÅÄmums: TimescaleDB ā diska joslas platuma izmantoÅ”ana, lai ievietotu 4 M unikÄlus rÄdÄ«tÄjus.
VictoriaMetrics maksimumÄ sasniedza 120 MB/s robežu, savukÄrt vidÄjais rakstÄ«Å”anas Ätrums bija 40 MB/s. VisticamÄk, ka pÄ«Ä·a laikÄ tika veiktas vairÄkas smagas LSM saplÅ«Å”anas.
InfluxDB atkal izspiež vidÄjo rakstÄ«Å”anas jaudu 200 MB/s ar maksimÄlo Ätrumu lÄ«dz 340 MB/s diskÄ ar rakstÄ«Å”anas ierobežojumu 120 MB/s :)
TimescaleDB vairs nav disks ierobežots. Å Ä·iet, ka to ierobežo kaut kas cits, kas saistÄ«ts ar lielo Ä«patsvaru ŃŠøŃŃŠµŠ¼Š½Š¾Š¹ CPU slodze.
IepriekÅ” ir ekrÄnuzÅÄmums: TimescaleDB ā I/O lietojums ievietoÅ”anas testa laikÄ unikÄlai 4M laika rindai.
IO izmantoÅ”anas modeļi atspoguļo diska joslas platuma modeļus ā InfluxDB ir ierobežots IO, savukÄrt VictoriaMetrics un TimescaleDB ir rezerves IO resursi.
40 miljoni unikÄlu laikrindu
40 miljoni unikÄlas laikrindas bija pÄrÄk lielas priekÅ” InfluxDB :)
Etalona rezultÄti:
VictoriaMetrics: 1,7 miljoni datu punktu sekundÄ; RAM lietojums: 29 GB; Diska vietas lietojums: 17 GB.
InfluxDB: nepabeidza, jo bija nepiecieÅ”ams vairÄk nekÄ 60 GB RAM.
TimescaleDB: 330 2,5 datu punktu sekundÄ, RAM lietojums: 84 GB; Diska vietas patÄriÅÅ”: XNUMX GB.
TimescaleDB parÄda ÄrkÄrtÄ«gi zemu un stabilu RAM lietojumu 2,5 GB apmÄrÄ ā tÄpat kÄ unikÄlajiem 4 M un 400 XNUMX metrikiem.
VictoriaMetrics lÄnÄm palielinÄjÄs ar Ätrumu 100 40 datu punktu sekundÄ, lÄ«dz tika apstrÄdÄti visi 1,5 miljoni marÄ·Äto metrikas nosaukumu. PÄc tam viÅÅ” sasniedza ilgstoÅ”u ievietoÅ”anas Ätrumu 2,0ā1,7 miljoni datu punktu sekundÄ, tÄpÄc gala rezultÄts bija XNUMX miljoni datu punktu sekundÄ.
Grafiki 40 miljoniem unikÄlu laika rindu ir lÄ«dzÄ«gi 4 miljonu unikÄlo laikrindu grafikiem, tÄpÄc izlaidÄ«sim tos.
Atzinumi
MÅ«sdienu TSDB spÄj apstrÄdÄt ieliktÅus miljoniem unikÄlu laikrindu vienÄ serverÄ«. NÄkamajÄ rakstÄ mÄs pÄrbaudÄ«sim, cik labi TSDB veic atlasi miljoniem unikÄlu laikrindu.
Nepietiekama CPU izmantoÅ”ana parasti norÄda uz I/O vÄjo vietu. Tas var arÄ« norÄdÄ«t, ka bloÄ·ÄÅ”ana ir pÄrÄk rupja, jo vienlaikus var darboties tikai daži pavedieni.
I/O saÅ”aurinÄjums pastÄv, jo Ä«paÅ”i krÄtuvÄ, kas nav SSD, piemÄram, mÄkoÅpakalpojumu sniedzÄju virtualizÄtÄs bloku ierÄ«cÄs.
VictoriaMetrics nodroÅ”ina vislabÄko optimizÄciju lÄnai, zemai I/O uzglabÄÅ”anai. Tas nodroÅ”ina vislabÄko Ätrumu un labÄko kompresijas pakÄpi.