Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Kuv xav kom koj nyeem cov ntawv sau tseg ntawm tsab ntawv tshaj tawm xyoo 2019 los ntawm Alexander Valyalkin "Mus optimizations hauv VictoriaMetrics"

VictoriaMetrics - DBMS ceev thiab scalable rau khaws cia thiab ua cov ntaub ntawv nyob rau hauv daim ntawv ntawm ib tug series ntawm lub sij hawm (cov ntaub ntawv cov ntaub ntawv lub sij hawm thiab ib tug txheej ntawm qhov tseem ceeb sib xws rau lub sij hawm no, piv txwv li, tau los ntawm lub sij hawm pov npav ntawm cov xwm txheej ntawm sensors los yog sau ntawm metrics).

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Ntawm no yog qhov txuas rau video ntawm daim ntawv qhia no - https://youtu.be/MZ5P21j_HLE

Cov swb

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Qhia rau peb txog koj tus kheej. Kuv yog Alexander Valyalkin. Ntawm no kuv tus account GitHub. Kuv mob siab rau Go thiab kev ua haujlwm zoo. Kuv tau sau ntau cov tsev qiv ntawv muaj txiaj ntsig thiab tsis muaj txiaj ntsig zoo. Lawv pib nrog ib yam fast, sau nrog quick ua ntej.

Tam sim no kuv tab tom ua haujlwm ntawm VictoriaMetrics. Nws yog dab tsi thiab kuv ua dab tsi nyob ntawd? Kuv yuav tham txog qhov no hauv qhov kev nthuav qhia no.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Lub ntsiab lus ntawm tsab ntawv ceeb toom yog raws li nram no:

  • Ua ntej, kuv yuav qhia koj tias VictoriaMetrics yog dab tsi.
  • Tom qab ntawd kuv yuav qhia koj tias lub sijhawm dab tsi yog.
  • Tom qab ntawd kuv yuav qhia koj li cas lub sij hawm series database ua haujlwm.
  • Tom ntej no, kuv yuav qhia koj txog cov database architecture: nws muaj dab tsi.
  • Thiab tom qab ntawd cia peb mus rau qhov kev ua kom zoo tshaj plaws uas VictoriaMetrics muaj. Qhov no yog qhov kev ua kom zoo rau qhov ntsuas qhov tsis sib haum thiab kev ua kom zoo rau kev siv bitset hauv Go.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Puas muaj leej twg hauv cov neeg tuaj saib paub tias VictoriaMetrics yog dab tsi? Wow, coob leej twb paub lawm. Nws yog ib txoj xov zoo. Rau cov neeg uas tsis paub, qhov no yog lub sij hawm series database. Nws yog raws li ClickHouse architecture, ntawm qee cov ntsiab lus ntawm ClickHouse kev siv. Piv txwv li, ntawm xws li: MergeTree, sib npaug ntawm kev suav ntawm txhua qhov muaj cov txheej txheem processor thiab kev ua haujlwm zoo los ntawm kev ua haujlwm ntawm cov ntaub ntawv thaiv uas tau muab tso rau hauv lub processor cache.

VictoriaMetrics muab cov ntaub ntawv compression zoo dua li lwm lub sij hawm series databases.

Nws ntsuas vertically - uas yog, koj tuaj yeem ntxiv ntau cov processors, ntau RAM ntawm ib lub computer. VictoriaMetrics yuav ua tiav siv cov peev txheej no thiab yuav txhim kho cov khoom tsim tawm.

VictoriaMetrics kuj ntsuas kab rov tav - uas yog, koj tuaj yeem ntxiv cov nodes ntxiv rau VictoriaMetrics pawg, thiab nws qhov kev ua tau zoo yuav nce yuav luag.

Raws li koj tau twv, VictoriaMetrics yog cov ntaub ntawv ceev ceev, vim kuv tsis tuaj yeem sau lwm tus. Thiab nws tau sau rau hauv Go, yog li kuv tham txog nws ntawm qhov kev sib ntsib no.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Leej twg paub tias lub sij hawm series yog dab tsi? Nws kuj paub coob leej ntau tus. Lub sij hawm series yog ib tug series ntawm khub (timestamp, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅), qhov twg cov khub no tau txheeb raws sijhawm. Tus nqi yog tus naj npawb ntab ntab - float64.

Txhua lub sij hawm series yog cim tshwj xeeb los ntawm tus yuam sij. Qhov tseem ceeb no muaj li cas? Nws muaj cov txheej txheem tsis muaj qhov khoob ntawm qhov tseem ceeb-tus nqi khub.

Ntawm no yog ib qho piv txwv ntawm lub sij hawm series. Qhov tseem ceeb ntawm no series yog ib daim ntawv teev cov khub: __name__="cpu_usage" yog lub npe metric, instance="my-server" - qhov no yog lub computer uas qhov ntsuas no tau sau, datacenter="us-east" - qhov no yog qhov chaw khaws ntaub ntawv uas lub computer no nyob.

Peb tau xaus nrog lub sij hawm series lub npe uas muaj peb qhov tseem ceeb-tus nqi khub. Qhov tseem ceeb no sib raug rau ib daim ntawv teev cov khub (timestamp, value). t1, t3, t3, ..., tN - Cov no yog cov ntawv teev sijhawm, 10, 20, 12, ..., 15 - cov nqi sib xws. Qhov no yog lub cpu-siv ntawm ib lub sij hawm muab rau ib tug muab series.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Qhov twg siv sij hawm series? Puas muaj leej twg muaj lub tswv yim?

  • Hauv DevOps, koj tuaj yeem ntsuas CPU, RAM, network, rps, tus lej yuam kev, thiab lwm yam.
  • IoT - peb tuaj yeem ntsuas kub, siab, thaj chaw tswj hwm thiab lwm yam.
  • Tsis tas li nyiaj txiag - peb tuaj yeem saib xyuas tus nqi rau txhua yam ntawm cov khoom lag luam thiab cov txiaj ntsig.
  • Tsis tas li ntawd, lub sijhawm series tuaj yeem siv los saib xyuas cov txheej txheem ntau lawm hauv cov chaw tsim khoom. Peb muaj cov neeg siv uas siv VictoriaMetrics los saib xyuas cua turbines, rau cov neeg hlau.
  • Lub sij hawm series kuj tseem muaj txiaj ntsig rau kev sau cov ntaub ntawv los ntawm cov sensors ntawm ntau yam khoom siv. Piv txwv li, rau lub cav; ntsuas lub log tsheb siab; rau ntsuas ceev, nrug; ntsuas kev siv roj av, thiab lwm yam.
  • Lub sij hawm series kuj tseem siv tau los saib xyuas lub dav hlau. Txhua lub dav hlau muaj lub thawv dub uas sau lub sijhawm rau ntau yam ntawm lub dav hlau kev noj qab haus huv. Lub sij hawm series kuj tseem siv nyob rau hauv kev lag luam aerospace.
  • Kev kho mob yog ntshav siab, mem tes, thiab lwm yam.

Tej zaum yuav muaj ntau daim ntawv thov uas kuv tsis nco qab txog, tab sis kuv vam tias koj nkag siab tias lub sij hawm series tau nquag siv nyob rau hauv lub ntiaj teb niaj hnub no. Thiab qhov ntim ntawm lawv siv tau loj hlob txhua xyoo.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Vim li cas koj thiaj xav tau lub sij hawm series database? Vim li cas koj tsis tuaj yeem siv cov ntaub ntawv sib txuas tsis tu ncua los khaws lub sijhawm?

Vim hais tias lub sij hawm series feem ntau muaj ntau cov ntaub ntawv, uas yog ib qho nyuaj rau khaws thiab txheej txheem nyob rau hauv cov pa databases. Yog li ntawd, tshwj xeeb databases rau lub sij hawm series tshwm. Cov hauv paus no zoo khaws cov ntsiab lus (timestamp, value) nrog tus yuam sij muab. Lawv muab API rau kev nyeem cov ntaub ntawv khaws cia los ntawm qhov tseem ceeb, los ntawm ib qho tseem ceeb-tus nqi khub, lossis los ntawm ntau qhov tseem ceeb-tus khub, lossis los ntawm regexp. Piv txwv li, koj xav nrhiav CPU load ntawm tag nrho koj cov kev pab cuam nyob rau hauv ib tug data center nyob rau hauv America, ces koj yuav tsum tau siv cov lus nug pseudo no.

Feem ntau lub sij hawm series databases muab cov lus nug tshwj xeeb vim lub sij hawm series SQL tsis zoo heev. Txawm hais tias muaj cov databases uas txhawb SQL, nws tsis haum heev. Lus nug xws li PromQL, InfluxQL, ntws, Q. Kuv vam tias ib tug neeg tau hnov ​​tsawg kawg ib yam ntawm cov lus no. Ntau tus neeg tau hnov ​​​​txog PromQL. Nov yog lus nug Prometheus.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Qhov no yog dab tsi niaj hnub no series database architecture zoo li siv VictoriaMetrics ua piv txwv.

Nws muaj ob ntu. Qhov no yog cia rau qhov inverted index thiab cia rau lub sij hawm series qhov tseem ceeb. Cov chaw khaws cia no raug cais tawm.

Thaum cov ntaub ntawv tshiab tuaj txog hauv cov ntaub ntawv, peb thawj zaug nkag mus rau qhov ntsuas inverted kom pom lub sijhawm teev tus cim rau ib qho teeb tsa. label=value rau ib tug muab metric. Peb pom tus cim no thiab txuag tus nqi hauv cov ntaub ntawv khaws cia.

Thaum ib qho kev thov los muab cov ntaub ntawv los ntawm TSDB, peb thawj zaug mus rau qhov ntsuas inverted. Wb tau txhua yam timeseries_ids cov ntaub ntawv uas phim cov teeb no label=value. Thiab ces peb tau txais tag nrho cov ntaub ntawv tsim nyog los ntawm cov ntaub ntawv warehouse, indexed los ntawm timeseries_ids.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Cia peb saib ib qho piv txwv ntawm yuav ua li cas lub sij hawm series database ua cov lus nug uas tuaj.

  • Ua ntej tshaj plaws nws tau txais txhua yam timeseries_ids los ntawm ib qho inverted index uas muaj cov khub muab label=value, los yog txaus siab rau ib qho kev qhia tsis tu ncua.
  • Tom qab ntawd nws retrieves tag nrho cov ntaub ntawv cov ntsiab lus los ntawm cov ntaub ntawv khaws cia ntawm ib lub sij hawm luv luv rau cov uas pom timeseries_ids.
  • Tom qab ntawd, cov ntaub ntawv khaws cia ua qee qhov kev suav ntawm cov ntaub ntawv cov ntsiab lus, raws li tus neeg siv qhov kev thov. Thiab tom qab ntawd nws rov qab teb.

Hauv qhov kev nthuav qhia no kuv yuav qhia koj txog thawj ntu. Nov yog kev tshawb nrhiav timeseries_ids los ntawm inverted index. Koj tuaj yeem saib txog ntu thib ob thiab thib peb tom qab VictoriaMetrics qhov chaw, lossis tos kom txog thaum kuv npaj lwm cov ntawv ceeb toom :)

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Cia peb mus rau qhov inverted index. Ntau tus yuav xav tias qhov no yooj yim. Leej twg paub qhov inverted index yog dab tsi thiab nws ua haujlwm li cas? Auj, tsis muaj neeg coob ntxiv lawm. Cia peb sim nkag siab tias nws yog dab tsi.

Nws yog qhov ua tau yooj yim. Nws tsuas yog phau ntawv txhais lus uas qhia tus yuam sij rau tus nqi. Tus yuam sij yog dab tsi? Ob peb label=valueqhov twg label ΠΈ value - cov no yog kab. Thiab qhov tseem ceeb yog ib txheej timeseries_ids, uas suav nrog cov khub muab label=value.

Inverted index tso cai rau koj kom sai nrhiav txhua yam timeseries_ids, uas tau muab label=value.

Nws kuj tso cai rau koj mus nrhiav tau sai timeseries_ids sij hawm series rau ob peb khub label=value, los yog rau cov khub niam txiv label=regexp. Qhov no tshwm sim li cas? Los ntawm kev nrhiav kev sib tshuam ntawm lub teeb timeseries_ids rau txhua khub label=value.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Cia peb saib ntau yam kev siv ntawm qhov inverted index. Cia peb pib nrog qhov yooj yim naive siv. Nws zoo li no.

muaj nuj nqi getMetricIDs tau txais ib daim ntawv teev cov hlua. Txhua kab muaj label=value. Qhov no muaj nuj nqi rov qab ib daim ntawv teev npe metricIDs.

Nws ua haujlwm li cas? Ntawm no peb muaj lub ntiaj teb hloov pauv hu ua invertedIndex. Nov yog phau ntawv txhais lus tsis tu ncua (map), uas yuav daim ntawv qhia txoj hlua rau hlais ints. Cov kab muaj label=value.

Kev ua haujlwm ua haujlwm: tau metricIDs rau thawj label=value, ces peb mus dhau txhua yam label=value, peb tau metricIDs rau lawv. Thiab hu rau lub luag haujlwm intersectInts, uas yuav tau tham hauv qab no. Thiab txoj haujlwm no rov qab qhov kev sib tshuam ntawm cov npe no.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Raws li koj tuaj yeem pom, kev siv qhov ntsuas inverted tsis yog qhov nyuaj heev. Tab sis qhov no yog kev siv dag zog yuam kev. Nws muaj qhov tsis zoo li cas? Lub ntsiab qhov tsis zoo ntawm qhov kev siv tsis zoo yog tias qhov ntsuas qhov hloov pauv tau khaws cia hauv RAM. Tom qab rov pib dua daim ntawv thov peb poob qhov ntsuas no. Tsis muaj kev txuag ntawm qhov ntsuas no rau disk. Xws li ib qho inverted index tsis zoo li yuav haum rau cov ntaub ntawv.

Qhov thib ob drawback kuj muaj feem xyuam rau kev nco. Lub inverted index yuav tsum haum rau RAM. Yog tias nws tshaj qhov loj ntawm RAM, ces pom tseeb peb yuav tau txais - tawm ntawm lub cim xeeb yuam kev. Thiab qhov program yuav tsis ua haujlwm.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Qhov teeb meem no tuaj yeem daws tau los ntawm kev npaj cov kev daws teeb meem xws li QibDB, lossis RocksDB.

Hauv luv luv, peb xav tau ib lub database uas tso cai rau peb ua peb txoj haujlwm sai.

  • Thawj qhov haujlwm yog kaw ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ mus rau lub database no. Nws ua qhov no sai heev, qhov twg ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ yog arbitrary hlua.
  • Qhov kev ua haujlwm thib ob yog kev tshawb nrhiav ceev rau tus nqi siv tus yuam sij muab.
  • Thiab qhov kev ua haujlwm thib peb yog kev tshawb nrhiav sai rau txhua qhov txiaj ntsig los ntawm qhov muab ua ntej.

LevelDB thiab RocksDB - cov ntaub ntawv no tau tsim los ntawm Google thiab Facebook. Thawj tuaj LevelDB. Tom qab ntawd cov hais mav los ntawm Facebook coj LevelDB thiab pib txhim kho nws, lawv ua RocksDB. Tam sim no yuav luag tag nrho cov ntaub ntawv sab hauv ua haujlwm ntawm RocksDB hauv Facebook, suav nrog cov uas tau raug xa mus rau RocksDB thiab MySQL. Lawv tis npe rau nws MyRocks.

Ib qho inverted index tuaj yeem siv tau siv LevelDB. Yuav ua li cas? Peb txuag raws li tus yuam sij label=value. Thiab tus nqi yog tus cim ntawm lub sij hawm series uas tus khub tam sim no label=value.

Yog hais tias peb muaj ntau lub sij hawm series nrog ib tug muab khub label=value, ces yuav muaj ntau kab nyob rau hauv no database nrog tib tus yuam sij thiab txawv timeseries_ids. Kom tau ib daim ntawv teev tag nrho timeseries_ids, uas pib nrog qhov no label=prefix, peb ua ntau yam scan rau qhov database no optimized. Ntawd yog, peb xaiv txhua kab uas pib nrog label=prefix thiab tau txais qhov tsim nyog timeseries_ids.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Nov yog ib qho piv txwv ntawm qhov nws yuav zoo li hauv Go. Peb muaj inverted index. Qhov no yog LevelDB.

Lub luag haujlwm yog tib yam li rau kev ua tsis ncaj ncees. Nws rov ua qhov kev coj ua tsis ncaj ncees yuav luag kab los ntawm kab. Lub ntsiab lus tsuas yog tias tsis tig mus map peb nkag mus rau qhov inverted index. Peb tau txais tag nrho cov txiaj ntsig rau thawj zaug label=value. Tom qab ntawd peb mus dhau tag nrho cov khub uas tseem tshuav label=value thiab tau txais cov kab sib txuas ntawm metricIDs rau lawv. Tom qab ntawd peb nrhiav kev sib tshuam.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Txhua yam zoo li zoo, tab sis muaj qhov tsis zoo rau qhov kev daws teeb meem no. VictoriaMetrics tau pib siv qhov ntsuas qhov hloov pauv raws li LevelDB. Tab sis thaum kawg kuv yuav tsum tso nws.

Vim li cas? Vim tias LevelDB qeeb dua li qhov kev siv tsis zoo. Nyob rau hauv ib tug naive siv, muab ib qho tseem ceeb, peb tam sim ntawd retrieve tag nrho daim metricIDs. Qhov no yog kev ua haujlwm ceev heev - tag nrho cov hlais yog npaj rau kev siv.

Hauv LevelDB, txhua zaus hu ua haujlwm GetValues koj yuav tsum mus dhau tag nrho cov kab uas pib nrog label=value. Thiab tau txais tus nqi rau txhua kab timeseries_ids. Ntawm qhov ntawd timeseries_ids sau ib daim ntawm cov no timeseries_ids. Pom tseeb, qhov no qeeb qeeb dua li tsuas yog nkag mus rau daim ntawv qhia ib txwm muaj los ntawm qhov tseem ceeb.

Qhov teeb meem thib ob yog tias LevelDB tau sau rau hauv C. Hu rau C ua haujlwm ntawm Go tsis nrawm heev. Nws yuav siv ntau pua nanoseconds. Qhov no tsis yog ceev heev, vim hais tias piv rau ib txwm muaj nuj nqi hu rau hauv mus, uas yuav siv sij hawm 1-5 nanoseconds, qhov sib txawv ntawm kev ua tau zoo yog kaum ntawm lub sij hawm. Rau VictoriaMetrics qhov no yog qhov tsis txaus ntseeg :)

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Yog li kuv sau kuv tus kheej qhov kev siv ntawm qhov inverted index. Thiab nws hu nws ua ke.

Mergeset yog raws li MergeTree cov ntaub ntawv qauv. Cov ntaub ntawv no yog qiv los ntawm ClickHouse. Obviously, mergeset yuav tsum tau optimized rau ceev nrhiav timeseries_ids raws li tus yuam sij muab. Mergeset tau sau tag nrho hauv Go. Koj pom tau VictoriaMetrics qhov chaw ntawm GitHub. Qhov kev siv ntawm mergeset yog nyob rau hauv daim ntawv tais ceev tseg /lib/mergeset. Koj tuaj yeem sim xyuas seb yuav ua li cas rau qhov ntawd.

API mergeset zoo ib yam li LevelDB thiab RocksDB. Ntawd yog, nws tso cai rau koj kom ceev cov ntaub ntawv tshiab nyob ntawd thiab xaiv cov ntaub ntawv sai sai los ntawm qhov muab ua ntej.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Peb mam li tham txog qhov tsis zoo ntawm kev sib koom ua ke tom qab. Tam sim no cia peb tham txog dab tsi teeb meem tshwm sim nrog VictoriaMetrics hauv kev tsim khoom thaum siv qhov ntsuas inverted.

Vim li cas lawv thiaj li tshwm sim?

Thawj qhov laj thawj yog qhov siab churn. Txhais ua Lavxias teb sab, qhov no yog ib tug nquag hloov nyob rau hauv lub sij hawm series. Qhov no yog thaum lub sij hawm series xaus thiab ib tug tshiab series pib, los yog ntau lub sij hawm tshiab pib. Thiab qhov no tshwm sim ntau zaus.

Qhov thib ob yog vim li cas yog qhov loj ntawm lub sij hawm series. Thaum pib, thaum kev soj ntsuam tau txais kev muaj koob meej, cov sij hawm series yog me me. Piv txwv li, rau txhua lub computer koj yuav tsum tau saib xyuas CPU, nco, network thiab disk load. 4 lub sij hawm series rau ib lub computer. Wb hais tias koj muaj 100 computers thiab 400 lub sij hawm series. Qhov no tsawg heev.

Nyob rau tib lub sijhawm, tib neeg xav tias lawv tuaj yeem ntsuas cov ntaub ntawv ntau dua. Piv txwv li, ntsuas lub load tsis yog ntawm tag nrho cov processor, tab sis cais ntawm txhua tus processor core. Yog tias koj muaj 40 processor cores, ces koj muaj 40 zaus ntau lub sij hawm los ntsuas processor load.

Tab sis qhov ntawd tsis yog tag nrho. Txhua tus tub ntxhais processor tuaj yeem muaj ntau lub xeev, xws li idle, thaum nws tsis ua haujlwm. Thiab tseem ua haujlwm hauv cov neeg siv qhov chaw, ua haujlwm hauv kernel chaw thiab lwm lub xeev. Thiab txhua lub xeev no kuj tuaj yeem ntsuas raws li lub sijhawm sib cais. Qhov no ntxiv rau cov kab ntau ntxiv los ntawm 7-8 zaug.

Los ntawm ib qho kev ntsuas peb tau txais 40 x 8 = 320 metrics rau ib lub computer xwb. Muab faib los ntawm 100, peb tau txais 32 tsis yog 000.

Ces Kubernetes tuaj nrog. Thiab nws tau phem dua vim Kubernetes tuaj yeem tuav ntau yam kev pabcuam. Txhua qhov kev pabcuam hauv Kubernetes muaj ntau lub pods. Thiab tag nrho cov no yuav tsum tau saib xyuas. Tsis tas li ntawd, peb muaj kev xa mus tas li ntawm cov ntawv tshiab ntawm koj cov kev pabcuam. Rau txhua qhov tshiab, lub sijhawm tshiab yuav tsum tau tsim. Yog li ntawd, tus naj npawb ntawm lub sij hawm series loj hlob exponentially thiab peb tau ntsib nrog cov teeb meem ntawm ntau lub sij hawm series, uas yog hu ua high-cardinality. VictoriaMetrics copes nrog nws ntse piv rau lwm lub sij hawm series databases.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Cia peb saib ze dua ntawm qhov siab churn. Dab tsi ua rau lub siab churn tus nqi hauv kev tsim khoom? Vim tias qee lub ntsiab lus ntawm daim ntawv lo thiab cim npe hloov tas li.

Piv txwv li, coj Kubernetes, uas muaj lub tswv yim deployment, i.e. thaum ib tug tshiab version ntawm koj daim ntawv thov raug dov tawm. Rau qee qhov laj thawj, Kubernetes cov neeg tsim khoom tau txiav txim siab ntxiv qhov xa tawm ID rau daim ntawv lo.

Qhov no ua rau dab tsi? Ntxiv mus, nrog rau txhua qhov kev xa tawm tshiab, txhua lub sijhawm qub raug cuam tshuam, thiab hloov ntawm lawv, lub sijhawm tshiab pib nrog tus nqi ntawv tshiab. deployment_id. Muaj peev xwm muaj ntau pua txhiab thiab ntau lab tus kab li no.

Qhov tseem ceeb ntawm tag nrho cov no yog tias tag nrho cov sij hawm series loj hlob, tab sis tus naj npawb ntawm cov sij hawm series uas tam sim no nquag nquag thiab tau txais cov ntaub ntawv tseem nyob tas li. Lub xeev no hu ua high churn rate.

Qhov teeb meem tseem ceeb ntawm tus nqi churn siab yog los xyuas kom meej qhov kev tshawb nrhiav tas li rau txhua lub sij hawm series rau ib pawg ntawm cov ntawv sau rau ib lub sij hawm luv luv. Feem ntau qhov no yog lub sijhawm luv rau teev dhau los lossis hnub kawg.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Yuav daws qhov teeb meem no li cas? Nov yog thawj qhov kev xaiv. Qhov no yog los faib cov inverted index mus rau hauv qhov chaw ywj pheej nyob rau lub sijhawm. Ntawd yog, qee lub sijhawm dhau mus, peb ua tiav kev ua haujlwm nrog qhov ntsuas ntsuas tam sim no. Thiab tsim ib qho tshiab inverted index. Lwm lub sij hawm luv dhau, peb tsim lwm qhov thiab lwm qhov.

Thiab thaum ua piv txwv los ntawm cov inverted indices, peb pom ib txheej inverted indices uas poob nyob rau hauv lub sij hawm muab. Thiab, raws li, peb xaiv tus id ntawm lub sij hawm series los ntawm muaj.

Qhov no txuag cov peev txheej vim peb tsis tas yuav saib cov khoom uas tsis poob rau hauv lub sijhawm muab. Ntawd yog, feem ntau, yog tias peb xaiv cov ntaub ntawv rau lub sijhawm dhau los, tom qab ntawd rau lub sijhawm dhau los peb hla kev thov.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Muaj lwm txoj hauv kev los daws qhov teeb meem no. Qhov no yog khaws cia rau txhua hnub ib daim ntawv teev npe cais ntawm lub sijhawm ua haujlwm uas tshwm sim rau hnub ntawd.

Qhov zoo ntawm qhov kev daws teeb meem no dhau los ntawm kev daws teeb meem yav dhau los yog tias peb tsis theej lub sijhawm cov ntaub ntawv uas tsis ploj mus dhau sijhawm. Lawv niaj hnub tam sim no thiab tsis hloov.

Qhov tsis zoo yog tias qhov kev daws teeb meem no nyuaj rau kev siv thiab nyuaj rau kev debug. Thiab VictoriaMetrics xaiv qhov kev daws teeb meem no. Qhov no yog li cas nws tshwm sim keeb kwm. Cov tshuaj no kuj ua tau zoo piv rau yav dhau los. Vim tias qhov kev daws teeb meem no tsis tau siv los ntawm qhov tseeb tias nws yog ib qho tsim nyog yuav tsum tau luam cov ntaub ntawv hauv txhua qhov muab faib rau lub sijhawm uas tsis hloov pauv, piv txwv li uas tsis ploj mus dhau sijhawm. VictoriaMetrics feem ntau tau ua kom zoo rau qhov chaw siv disk, thiab kev siv yav dhau los ua rau qhov chaw siv disk tsis zoo. Tab sis qhov kev siv no yog qhov zoo dua rau kev txo qis qhov chaw siv disk, yog li nws tau xaiv.

Kuv yuav tsum tau tawm tsam nws. Qhov kev tawm tsam yog tias hauv qhov kev siv no koj tseem yuav tsum xaiv tus lej loj dua timeseries_ids rau cov ntaub ntawv tshaj li thaum lub inverted index yog lub sij hawm partitioned.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Peb daws tau qhov teeb meem no li cas? Peb daws nws hauv txoj hauv kev qub - los ntawm kev khaws cia ob peb lub sijhawm cov cim cim hauv txhua qhov kev nkag mus rau qhov ntsuas tsis tau ntawm ib tus cim. Qhov ntawd yog, peb muaj tus yuam sij label=value, uas tshwm sim nyob rau hauv txhua lub sij hawm series. Thiab tam sim no peb txuag ob peb timeseries_ids hauv ib qhov nkag.

Nov yog piv txwv. Yav dhau los peb muaj N nkag, tab sis tam sim no peb muaj ib qho kev nkag uas nws ua ntej yog tib yam li lwm tus. Rau qhov nkag dhau los, tus nqi muaj tag nrho cov sij hawm series ids.

Qhov no ua rau nws muaj peev xwm ua kom lub scanning ceev ntawm xws li inverted index mus txog 10 zaug. Thiab nws tau tso cai rau peb txo qis kev siv lub cim xeeb rau lub cache, vim tam sim no peb khaws cov hlua label=value tsuas yog ib zaug hauv cache ua ke N zaug. Thiab cov kab no tuaj yeem loj yog tias koj khaws cov kab ntev hauv koj cov ntawv cim npe thiab cov ntawv lo, uas Kubernetes nyiam txav mus rau ntawd.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Lwm qhov kev xaiv rau kev ua kom nrawm rau kev tshawb nrhiav ntawm qhov ntsuas inverted yog sharding. Tsim ob peb inverted indexes es tsis txhob ntawm ib tug thiab sharding cov ntaub ntawv ntawm lawv los ntawm qhov tseem ceeb. Qhov no yog ib txheej key=value chav. Ntawd yog, peb tau txais ntau qhov kev ywj pheej inverted indexes, uas peb tuaj yeem nug ua ke ntawm ntau lub processors. Cov kev siv yav dhau los tsuas yog tso cai rau kev ua haujlwm hauv ib hom txheej txheem, piv txwv li, luam theej duab cov ntaub ntawv ntawm ib qho tseem ceeb. Qhov kev daws teeb meem no tso cai rau koj los luam theej duab cov ntaub ntawv ntawm ob peb cores ib zaug, raws li ClickHouse nyiam ua. Nov yog qhov peb npaj yuav siv.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Tam sim no cia peb rov qab mus rau peb cov yaj - mus rau txoj haujlwm kev sib tshuam timeseries_ids. Cia peb xav txog yam kev siv yuav muaj. Qhov no muaj nuj nqi tso cai rau koj mus nrhiav timeseries_ids rau ib tug muab label=value.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Thawj qhov kev xaiv yog kev ua tsis ncaj ncees. Ob lub nested loops. Ntawm no peb tau txais cov lus qhia ua haujlwm intersectInts ob daim - a ΠΈ b. Ntawm cov zis, nws yuav tsum rov qab los rau peb qhov kev sib tshuam ntawm cov hlais no.

Ib qho kev siv dag zog zoo li no. Peb iterate tshaj tag nrho cov nqi ntawm daim a, hauv lub voj no peb mus dhau tag nrho cov txiaj ntsig ntawm daim hlais b. Thiab peb muab piv rau lawv. Yog tias lawv phim, ces peb tau pom kev sib tshuam. Thiab txuag nws hauv result.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Dab tsi yog qhov tsis zoo? Quadratic complexity yog nws lub ntsiab drawback. Piv txwv li, yog tias koj qhov ntev yog hlais a ΠΈ b ib lab ntawm ib zaug, ces qhov haujlwm no yuav tsis rov qab teb rau koj. Vim hais tias nws yuav xav ua ib trillion iterations, uas yog ntau heev txawm rau niaj hnub computers.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Qhov kev siv thib ob yog nyob ntawm daim ntawv qhia. Peb tsim daim ntawv qhia. Peb muab tag nrho cov txiaj ntsig los ntawm hlais rau hauv daim ntawv qhia no a. Tom qab ntawd peb hla lub hlais hauv ib lub voj voog cais b. Thiab peb xyuas seb tus nqi no yog los ntawm daim b hauv daim ntawv qhia. Yog tias muaj, ces ntxiv rau qhov tshwm sim.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Cov txiaj ntsig yog dab tsi? Qhov kom zoo dua yog tias tsuas muaj linear complexity. Ntawd yog, txoj haujlwm yuav ua tiav sai dua rau cov hlais loj. Rau ib lab-loj daim hlais, qhov haujlwm no yuav ua tiav hauv 2 lab iterations, tsis zoo li trillion iterations ntawm cov haujlwm dhau los.

Lub downside yog tias qhov no muaj nuj nqi yuav tsum tau ntau lub cim xeeb los tsim daim ntawv qhia no.

Qhov thib ob drawback yog lub loj overhead rau hashing. Qhov teeb meem no tsis pom tseeb heev. Thiab rau peb nws kuj tsis pom tseeb, yog li thaum xub thawj hauv VictoriaMetrics kev siv ntawm kev sib tshuam yog los ntawm daim ntawv qhia. Tab sis tom qab ntawd profiling tau pom tias lub sijhawm ua haujlwm tseem ceeb yog siv sau rau hauv daim ntawv qhia thiab kuaj xyuas qhov muaj nuj nqis hauv daim ntawv qhia no.

Vim li cas CPU lub sij hawm nkim nyob rau hauv cov chaw no? Vim Go ua haujlwm hashing ntawm cov kab no. Ntawd yog, nws suav cov hash ntawm tus yuam sij thiaj li nkag mus rau nws ntawm qhov muab ntsuas hauv HashMap. Lub hash suav ua haujlwm tiav hauv kaum tawm nanoseconds. Qhov no qeeb rau VictoriaMetrics.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Kuv txiav txim siab los siv ib qho bitset optimized tshwj xeeb rau rooj plaub no. Qhov no yog qhov kev sib tshuam ntawm ob lub hlais tam sim no zoo li. Ntawm no peb tsim ib tug bitset. Peb ntxiv cov ntsiab lus ntawm thawj daim rau nws. Tom qab ntawd peb txheeb xyuas qhov muaj cov ntsiab lus no hauv daim thib ob. Thiab ntxiv lawv rau qhov tshwm sim. Ntawd yog, nws yuav luag tsis txawv ntawm qhov piv txwv yav dhau los. Qhov tsuas yog qhov ntawm no yog tias peb hloov kev nkag mus rau daim ntawv qhia nrog kev cai ua haujlwm add ΠΈ has.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Thaum xub thawj siab ib muag, nws zoo nkaus li tias qhov no yuav tsum ua haujlwm qeeb, yog tias yav dhau los daim ntawv qhia tus qauv tau siv nyob ntawd, thiab tom qab ntawd qee qhov haujlwm tau hu ua, tab sis profileing qhia tau hais tias qhov no ua haujlwm 10 npaug sai dua li daim ntawv qhia tus qauv hauv VictoriaMetrics.

Tsis tas li ntawd, nws siv ntau lub cim xeeb tsawg dua piv rau kev siv daim ntawv qhia. Vim tias peb khaws cov khoom ntawm no es tsis yog yim-byte qhov tseem ceeb.

Qhov tsis zoo ntawm qhov kev siv no yog tias nws tsis pom tseeb, tsis yog qhov tsis tseem ceeb.

Lwm qhov teeb meem uas ntau tus yuav tsis pom yog tias qhov kev siv no yuav tsis ua haujlwm zoo hauv qee kis. Ntawd yog, nws tau ua kom zoo rau ib qho xwm txheej tshwj xeeb, rau qhov xwm txheej no ntawm kev sib tshuam ntawm VictoriaMetrics time series ids. Qhov no tsis txhais hais tias nws haum rau txhua rooj plaub. Yog tias nws siv tsis raug, peb yuav tsis tau txais kev ua haujlwm nce ntxiv, tab sis qhov tsis nco qab thiab ua haujlwm qeeb.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Cia peb xav txog qhov kev siv ntawm cov qauv no. Yog tias koj xav saib, nws nyob hauv VictoriaMetrics qhov chaw, hauv daim nplaub tshev lib/uint64set. Nws yog optimized tshwj xeeb rau cov ntaub ntawv VictoriaMetrics, qhov twg timeseries_id yog tus nqi 64-ntsis, qhov twg thawj 32 khoom yog qhov pib tas li thiab tsuas yog qhov kawg 32 khoom hloov.

Cov qauv ntaub ntawv no tsis yog khaws cia rau hauv disk, nws tsuas yog ua haujlwm hauv nco.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Ntawm no yog nws API. Nws tsis nyuaj heev. API tau tsim tshwj xeeb rau ib qho piv txwv tshwj xeeb ntawm kev siv VictoriaMetrics. Ntawd yog, tsis muaj cov haujlwm tsis tsim nyog ntawm no. Nov yog cov haujlwm uas tau siv los ntawm VictoriaMetrics.

Muaj kev ua haujlwm add, uas ntxiv cov txiaj ntsig tshiab. Muaj ib txoj haujlwm has, uas kuaj xyuas cov nqi tshiab. Thiab muaj kev ua haujlwm del, uas tshem tawm qhov tseem ceeb. Muaj ib txoj haujlwm pab len, uas rov qab qhov loj ntawm lub teeb. Muaj nuj nqi clone clones ntau. Thiab muaj nuj nqi appendto converts cov txheej no mus hlais timeseries_ids.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Qhov no yog qhov kev siv ntawm cov ntaub ntawv no zoo li. set muaj ob yam:

  • ItemsCount yog tus pab teb kom sai sai rov qab cov naj npawb ntawm cov ntsiab lus hauv ib txheej. Nws yuav ua tau yam tsis muaj qhov chaw pabcuam no, tab sis nws yuav tsum tau muab ntxiv ntawm no vim VictoriaMetrics feem ntau nug txog qhov ntev me ntsis hauv nws cov algorithms.

  • Qhov thib ob yog buckets. Qhov no yog hlais los ntawm cov qauv bucket32. Txhua tus qauv khw muag khoom hi teb. Cov no yog cov sab sauv 32 ntsis. Thiab ob daim - b16his ΠΈ buckets los ntawm bucket16 cov qauv.

Sab saum toj 16 khoom ntawm qhov thib ob ntawm 64-ntsis qauv yog khaws cia ntawm no. Thiab ntawm no bitsets khaws cia rau qis dua 16 khoom ntawm txhua byte.

Bucket64 muaj ib qho array uint64. Qhov ntev yog xam los ntawm cov khoom no. Hauv ib bucket16 qhov siab tshaj plaws tuaj yeem khaws cia 2^16=65536 me ntsis. Yog tias koj faib qhov no los ntawm 8, ces nws yog 8 kilobytes. Yog tias koj faib los ntawm 8 dua, nws yog 1000 uint64 lub ntsiab lus. Qhov ntawd yog Bucket16 - qhov no yog peb cov qauv 8-kilobyte.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Cia peb saib yuav ua li cas ib qho ntawm cov qauv no rau kev ntxiv tus nqi tshiab yog siv.

Nws tag nrho pib nrog uint64 lub ntsiab lus. Peb xam lub sab sauv 32 ntsis, peb xam qhov qis 32 ntsis. Cia peb mus dhau txhua yam buckets. Peb piv cov saum toj kawg nkaus 32 khoom hauv txhua lub thoob nrog tus nqi ntxiv. Thiab yog tias lawv phim, ces peb hu rau lub luag haujlwm add hauv b32 buckets. Thiab ntxiv qhov qis 32 ntsis nyob ntawd. Thiab yog tias nws rov qab los true, ces qhov no txhais tau hais tias peb ntxiv xws li tus nqi muaj thiab peb tsis muaj tus nqi li ntawd. Yog nws rov qab los false, ces lub ntsiab lus ntawd twb muaj lawm. Tom qab ntawd peb nce tus naj npawb ntawm cov ntsiab lus hauv cov qauv.

Yog tias peb tsis pom qhov koj xav tau bucket nrog rau qhov xav tau hi-tus nqi, ces peb hu rau qhov ua haujlwm addAlloc, uas yuav tsim ib qho tshiab bucket, ntxiv rau lub thoob qauv.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Qhov no yog qhov kev siv ntawm kev ua haujlwm b32.add. Nws zoo ib yam li kev siv yav dhau los. Peb suav qhov tseem ceeb tshaj plaws 16 khoom, qhov tsawg kawg nkaus 16 khoom.

Tom qab ntawd peb mus txog tag nrho cov saum toj 16 khoom. Peb nrhiav kev sib tw. Thiab yog tias muaj kev sib tw, peb hu rau txoj kev ntxiv, uas peb yuav xav txog ntawm nplooj ntawv tom ntej rau bucket16.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Thiab ntawm no yog qib qis tshaj plaws, uas yuav tsum tau kho kom zoo kom ntau li ntau tau. Peb xam rau uint64 id nqi nyob rau hauv daim me ntsis thiab kuj bitmask. Qhov no yog lub npog ntsej muag rau tus nqi 64-ntsis, uas tuaj yeem siv los txheeb xyuas qhov muaj qhov me me, lossis teeb tsa. Peb kuaj xyuas seb qhov me me no puas tau teeb tsa thiab teeb tsa, thiab rov qab muaj nyob. Qhov no yog peb qhov kev siv, uas tau tso cai rau peb kom ua tiav kev ua haujlwm ntawm kev sib tshuam ids ntawm lub sij hawm series los ntawm 10 npaug piv rau cov paib qhia.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Ntxiv rau qhov kev ua kom zoo dua no, VictoriaMetrics muaj ntau lwm yam kev ua kom zoo. Feem ntau ntawm cov optimizations tau ntxiv rau qhov laj thawj, tab sis tom qab profileing cov cai hauv ntau lawm.

Qhov no yog txoj cai tseem ceeb ntawm optimization - tsis txhob ntxiv optimization piv txwv tias yuav muaj ib tug bottleneck ntawm no, vim hais tias nws yuav tig tawm yuav tsis muaj ib tug bottleneck nyob rau ntawd. Optimization feem ntau degrades qhov zoo ntawm cov cai. Yog li ntawd, nws yog tsim nyog optimizing tsuas yog tom qab profileing thiab nyiam dua nyob rau hauv ntau lawm, thiaj li hais tias qhov no yog cov ntaub ntawv tiag tiag. Yog tias leej twg txaus siab, koj tuaj yeem saib VictoriaMetrics qhov chaws thiab tshawb nrhiav lwm qhov kev ua kom zoo dua uas nyob ntawd.

Mus optimizations hauv VictoriaMetrics. Alexander Valyalkin

Kuv muaj lus nug txog bitset. Zoo ib yam li C ++ vector bool siv, optimized bitset. Koj puas tau coj qhov kev siv los ntawm qhov ntawd?

Tsis yog, tsis yog los ntawm qhov ntawd. Thaum siv cov khoom siv no, kuv tau coj los ntawm kev paub txog cov qauv ntawm cov ids timeseries, uas yog siv hauv VictoriaMetrics. Thiab lawv cov qauv yog xws li cov 32 cov khoom sab saud yog qhov tseem ceeb tas li. Qhov qis 32 ntsis yuav raug hloov. Qhov qis me ntsis, ntau zaus nws tuaj yeem hloov pauv. Yog li ntawd, qhov kev siv no yog tshwj xeeb optimized rau cov ntaub ntawv qauv. Qhov kev siv C ++, raws li kuv paub, yog optimized rau cov ntaub ntawv dav dav. Yog tias koj ua kom zoo rau cov ntaub ntawv dav dav, qhov no txhais tau tias nws yuav tsis yog qhov zoo tshaj plaws rau ib rooj plaub tshwj xeeb.

Kuv kuj qhia koj kom saib daim ntawv tshaj tawm ntawm Alexey Milovid. Txog ib hlis dhau los, nws tau tham txog kev ua kom zoo dua hauv ClickHouse rau qhov tshwj xeeb tshwj xeeb. Nws tsuas yog hais tias feem ntau, kev siv C ++ lossis qee qhov kev siv tau raug kho kom ua haujlwm tau zoo nyob nruab nrab hauv tsev kho mob. Nws yuav ua tau phem tshaj qhov kev paub txog kev ua raws li peb li, qhov uas peb paub tias 32 cov khoom feem ntau tsis tas li.

Kuv muaj lus nug thib ob. Dab tsi yog qhov txawv ntawm InfluxDB?

Muaj ntau yam sib txawv. Nyob rau hauv cov nqe lus ntawm kev ua tau zoo thiab nco noj, InfluxDB nyob rau hauv cov kev ntsuam xyuas qhia 10 lub sij hawm ntau nco noj rau siab cardinality lub sij hawm series, thaum koj muaj ntau ntawm lawv, piv txwv li, lab. Piv txwv li, VictoriaMetrics siv 1 GB rau ib lab kab ua haujlwm, thaum InfluxDB siv 10 GB. Thiab qhov ntawd yog qhov sib txawv loj.

Qhov thib ob tseem ceeb sib txawv yog tias InfluxDB muaj cov lus nug txawv txawv - Flux thiab InfluxQL. Lawv tsis yooj yim heev rau kev ua hauj lwm nrog lub sij hawm series piv rau PromQL, uas yog txhawb nqa los ntawm VictoriaMetrics. PromQL yog lus nug los ntawm Prometheus.

Thiab ib qho sib txawv ntxiv yog tias InfluxDB muaj cov qauv ntaub ntawv txawv me ntsis, qhov twg txhua kab tuaj yeem khaws ntau daim teb nrog cov cim sib txawv. Cov kab no tau muab faib ua ntau lub rooj. Cov teeb meem ntxiv no nyuaj rau kev ua haujlwm tom qab nrog cov ntaub ntawv no. Nws nyuaj rau kev txhawb nqa thiab nkag siab.

Hauv VictoriaMetrics txhua yam yooj yim dua. Nyob ntawd, txhua lub sij hawm series yog qhov tseem ceeb-tus nqi. Tus nqi yog ib pawg ntawm cov ntsiab lus - (timestamp, value), thiab qhov tseem ceeb yog lub teeb label=value. Tsis muaj kev sib cais ntawm cov teb thiab kev ntsuas. Nws tso cai rau koj xaiv cov ntaub ntawv thiab tom qab ntawd sib txuas, ntxiv, rho tawm, sib faib, faib, tsis zoo li InfluxDB qhov twg kev suav ntawm cov kab sib txawv tseem tsis tau siv raws li kuv paub. Txawm hais tias lawv tau ua tiav, nws yog qhov nyuaj, koj yuav tsum tau sau ntau code.

Kuv muaj lus nug kom meej. Kuv puas tau nkag siab qhov tseeb tias muaj qee yam teeb meem uas koj tau tham txog, qhov kev ntsuas rov qab no tsis haum rau hauv kev nco, yog li muaj kev faib tawm?

Ua ntej, kuv tau pom ib qho kev ua tsis ncaj ncees ntawm qhov kev ntsuas rov qab ntawm tus qauv Go daim ntawv qhia. Qhov kev siv no tsis tsim nyog rau cov ntaub ntawv vim tias qhov ntsuas qhov hloov pauv tsis tau khaws cia rau hauv disk, thiab cov ntaub ntawv yuav tsum khaws cia rau disk kom cov ntaub ntawv no tseem muaj thaum rov pib dua. Hauv qhov kev siv no, thaum koj rov pib dua daim ntawv thov, koj qhov inverted index yuav ploj mus. Thiab koj yuav plam kev nkag mus rau tag nrho cov ntaub ntawv vim koj yuav nrhiav tsis tau.

Nyob zoo! Ua tsaug rau daim ntawv qhia! Kuv lub npe yog Pavel. Kuv tuaj ntawm Wildberries. Kuv muaj ob peb lo lus nug rau koj. Lo lus nug ib. Koj puas xav tias yog tias koj tau xaiv lub hauv paus ntsiab lus sib txawv thaum tsim cov architecture ntawm koj daim ntawv thov thiab muab faib cov ntaub ntawv dhau sijhawm, tej zaum koj yuav muaj peev xwm cuam tshuam cov ntaub ntawv thaum tshawb nrhiav, tsuas yog nyob ntawm qhov tseeb tias ib qho muab faib muaj cov ntaub ntawv rau ib qho. lub sij hawm ntawm lub sij hawm, uas yog, nyob rau hauv ib lub sij hawm luv luv thiab koj yuav tsis tau txhawj txog qhov tseeb hais tias koj tej pieces yog txawv? Nqe Lus Nug 2 - txij li thaum koj tab tom siv cov txheej txheem zoo sib xws nrog bitset thiab lwm yam, tej zaum koj sim siv cov lus qhia processor? Tej zaum koj tau sim zoo li no?

Kuv mam teb tus thib ob tam sim ntawd. Peb tseem tsis tau mus txog qhov ntawd. Tab sis yog tias tsim nyog, peb yuav mus txog ntawd. Thiab thawj tus, lo lus nug yog dab tsi?

Koj tau tham txog ob qhov xwm txheej. Thiab lawv tau hais tias lawv xaiv qhov thib ob nrog kev siv ntau dua. Thiab lawv tsis nyiam thawj tus, qhov twg cov ntaub ntawv muab faib los ntawm lub sijhawm.

Yog lawm. Hauv thawj kis, tag nrho cov ntim ntawm qhov ntsuas yuav loj dua, vim tias hauv txhua qhov kev faib tawm peb yuav tsum khaws cov ntaub ntawv duplicate rau cov sij hawm uas txuas ntxiv los ntawm tag nrho cov kev faib tawm no. Thiab yog hais tias koj lub sij hawm series churn tus nqi yog me me, piv txwv li tib lub series yog tas li siv, ces nyob rau hauv thawj rooj plaub peb yuav poob ntau npaum li cas ntawm qhov chaw disk nyob rau hauv lub thib ob rooj plaub.

Thiab yog li - yog, lub sij hawm muab faib yog ib qho kev xaiv zoo. Prometheus siv nws. Tab sis Prometheus muaj lwm qhov tsis zoo. Thaum sib sau ua ke cov ntaub ntawv no, nws yuav tsum tau khaws cia hauv cov ntaub ntawv meta rau txhua daim ntawv lo thiab lub sijhawm. Yog li ntawd, yog hais tias cov ntaub ntawv uas nws merges loj, ces nco noj nce heev thaum lub sij hawm merging, tsis zoo li VictoriaMetrics. Thaum sib koom ua ke, VictoriaMetrics tsis haus nco txhua; tsuas yog ob peb kilobytes tau noj, tsis hais qhov loj ntawm cov ntaub ntawv sib koom ua ke.

Cov algorithm koj siv siv lub cim xeeb. Nws marks timeseries tags uas muaj nuj nqis. Thiab txoj kev no koj txheeb xyuas qhov sib koom ua ke hauv ib cov ntaub ntawv array thiab hauv lwm qhov. Thiab koj nkag siab seb qhov kev sib tshuam tshwm sim los yog tsis. Feem ntau, databases siv cursors thiab iterators uas khaws lawv cov ntsiab lus tam sim no thiab khiav los ntawm cov ntaub ntawv txheeb vim qhov yooj yim ntawm cov haujlwm no.

Vim li cas peb tsis siv tus cursor los hla cov ntaub ntawv?

Muaj.

Peb khaws sorted kab hauv LevelDB lossis mergeset. Peb tuaj yeem txav tus cursor thiab nrhiav kev sib tshuam. Vim li cas peb tsis siv nws? Vim nws qeeb. Vim tias tus cursors txhais tau hais tias koj yuav tsum tau hu ua haujlwm rau txhua kab. Kev ua haujlwm hu yog 5 nanoseconds. Thiab yog tias koj muaj 100 kab, ces nws hloov tawm tias peb siv ib nrab thib ob tsuas yog hu rau lub luag haujlwm.

Muaj ib yam li ntawd, yog. Thiab kuv lo lus nug kawg. Lo lus nug yuav suab txawv me ntsis. Vim li cas nws thiaj li tsis tuaj yeem nyeem tag nrho cov kev sib sau tsim nyog thaum lub sijhawm cov ntaub ntawv tuaj txog thiab khaws cia rau hauv daim ntawv xav tau? Vim li cas thiaj txuag cov ntim loj hauv qee lub tshuab xws li VictoriaMetrics, ClickHouse, thiab lwm yam, thiab tom qab ntawd siv sijhawm ntau rau lawv?

Kuv mam li muab piv txwv kom meej dua. Cia peb hais tias lub tshuab ua si me me ua haujlwm li cas? Nws sau qhov kev ncua deb uas koj tau mus ncig, txhua lub sijhawm ntxiv rau ib qho nqi, thiab qhov thib ob - lub sijhawm. Thiab faib. Thiab tau txais qhov nruab nrab ceev. Koj tuaj yeem ua ib yam nkaus. Ntxiv tag nrho cov ntsiab lus tsim nyog ntawm ya.

Okay, kuv nkag siab cov lus nug. Koj tus qauv muaj nws qhov chaw. Yog tias koj paub dab tsi aggregates koj xav tau, ces qhov no yog qhov zoo tshaj plaws kev siv. Tab sis qhov teeb meem yog tias tib neeg txuag cov kev ntsuas no, qee cov ntaub ntawv hauv ClickHouse thiab lawv tseem tsis tau paub tias lawv yuav sib sau ua ke thiab lim lawv li cas yav tom ntej, yog li lawv yuav tsum khaws tag nrho cov ntaub ntawv nyoos. Tab sis yog tias koj paub tias koj yuav tsum xam ib yam dab tsi hauv nruab nrab, yog vim li cas ho tsis xam nws es tsis txhob khaws cia ib pawg ntawm cov nqi nyoos muaj? Tab sis qhov no tsuas yog koj paub tseeb tias koj xav tau dab tsi.

Los ntawm txoj kev, databases rau khaws cia lub sij hawm series txhawb suav cov aggregates. Piv txwv li, Prometheus txhawb nqa cov cai kaw tseg. Ntawd yog, qhov no tuaj yeem ua tau yog tias koj paub tias koj xav tau dab tsi units. VictoriaMetrics tseem tsis tau muaj qhov no, tab sis nws feem ntau yog ua ntej los ntawm Prometheus, uas qhov no tuaj yeem ua tiav hauv cov kev cai recoding.

Piv txwv li, hauv kuv txoj haujlwm dhau los kuv yuav tsum suav cov xwm txheej hauv lub qhov rais swb dhau teev dhau los. Qhov teeb meem yog tias kuv yuav tsum tau ua qhov kev cai siv hauv Go, piv txwv li ib qho kev pabcuam rau suav cov khoom no. Qhov kev pabcuam no yog qhov kawg tsis tseem ceeb, vim nws nyuaj rau kev suav. Kev siv yuav yooj yim yog tias koj xav tau suav qee qhov sib sau ua ke ntawm lub sijhawm teem sijhawm. Yog tias koj xav suav cov xwm txheej hauv lub qhov rais zawv zawg, ces nws tsis yooj yim li nws zoo li. Kuv xav tias qhov no tseem tsis tau ua tiav hauv ClickHouse lossis hauv cov ntaub ntawv teev sijhawm, vim tias nws nyuaj rau kev siv.

Thiab ib lo lus nug ntxiv. Peb tsuas yog tham txog qhov nruab nrab, thiab kuv nco qab tias muaj ib zaug zoo li Graphite nrog Carbon backend. Thiab nws paub yuav ua li cas nyias tawm cov ntaub ntawv qub, uas yog, tawm ib taw tes rau ib feeb, ib qho taw tes rau ib teev, thiab lwm yam. Hauv txoj cai, qhov no yooj yim heev yog tias peb xav tau cov ntaub ntawv nyoos, kuj hais lus, rau ib hlis, thiab txhua yam ua tau. yuav thinned tawm. Tab sis Prometheus thiab VictoriaMetrics tsis txhawb qhov kev ua haujlwm no. Puas yog nws npaj los txhawb nws? Yog tsis yog vim li cas ho tsis?

Ua tsaug rau cov lus nug. Peb cov neeg siv nug cov lus nug no tsis tu ncua. Lawv nug thaum twg peb yuav ntxiv kev txhawb nqa rau downsampling. Muaj ob peb teeb meem ntawm no. Ua ntej, txhua tus neeg siv nkag siab downsampling ib yam dab tsi txawv: ib tug neeg xav kom tau txais ib qho arbitrary point ntawm ib lub sij hawm muab, ib tug neeg xav siab tshaj plaws, yam tsawg kawg nkaus, nruab nrab qhov tseem ceeb. Yog tias ntau lub tshuab sau cov ntaub ntawv rau koj cov ntaub ntawv, ces koj tsis tuaj yeem muab tag nrho ua ke. Tej zaum nws yuav yog tias txhua qhov system xav tau nyias nyias. Thiab qhov no yog qhov nyuaj rau kev siv.

Thiab qhov thib ob yog tias VictoriaMetrics, zoo li ClickHouse, tau ua kom zoo rau kev ua haujlwm nrog cov ntaub ntawv nyoos loj, yog li nws tuaj yeem shovel ib txhiab kab hauv tsawg dua li ob yog tias koj muaj ntau lub cores hauv koj lub cev. Kev ntsuas lub sij hawm series cov ntsiab lus hauv VictoriaMetrics - 50 cov ntsiab lus ib ob rau ib tus tub ntxhais. Thiab qhov kev ua tau zoo no ntsuas rau cov cores uas twb muaj lawm. Qhov ntawd yog, yog tias koj muaj 000 cores, piv txwv li, koj yuav luam theej ib lab cov ntsiab lus ib ob. Thiab cov cuab yeej no ntawm VictoriaMetrics thiab ClickHouse txo qhov kev xav tau ntawm downsamling.

Lwm qhov tshwj xeeb yog VictoriaMetrics ua haujlwm tau zoo ntawm cov ntaub ntawv no. Compression ntawm qhov nruab nrab hauv kev tsim khoom yog los ntawm 0,4 mus rau 0,8 bytes ib point. Txhua lub ntsiab lus yog lub sijhawm teev + tus nqi. Thiab nws yog compressed rau hauv tsawg dua ib byte ntawm qhov nruab nrab.

Sergey. Kuv muaj lus nug. Lub sijhawm sau ntawv quantum tsawg kawg yog dab tsi?

Ib millisecond. Peb nyuam qhuav muaj kev sib tham nrog lwm lub sij hawm series database developers. Lawv lub sij hawm tsawg kawg yog ib ob. Thiab hauv Graphite, piv txwv li, nws kuj yog ib thib ob. Hauv OpenTSDB nws kuj yog ib thib ob. InfluxDB muaj nanosecond precision. Hauv VictoriaMetrics nws yog ib millisecond, vim hais tias hauv Prometheus nws yog ib millisecond. Thiab VictoriaMetrics yog Ameslikas tsim los ua tej thaj chaw deb cia rau Prometheus. Tab sis tam sim no nws tuaj yeem txuag cov ntaub ntawv los ntawm lwm lub tshuab.

Tus neeg uas kuv tau hais los hais tias lawv muaj qhov tseeb thib ob-rau-thib ob - qhov ntawd txaus rau lawv vim tias nws nyob ntawm hom ntaub ntawv uas tau muab khaws cia rau hauv lub sijhawm series database. Yog tias qhov no yog DevOps cov ntaub ntawv lossis cov ntaub ntawv los ntawm cov txheej txheem, qhov twg koj sau nws ntawm 30 vib nas this, ib feeb, ces qhov tseeb thib ob yog txaus, koj tsis xav tau dab tsi tsawg dua. Thiab yog tias koj sau cov ntaub ntawv no los ntawm kev lag luam ntau zaus, koj xav tau nanosecond raug.

Millisecond raug nyob rau hauv VictoriaMetrics kuj tseem haum rau DevOps rooj plaub, thiab tuaj yeem tsim nyog rau feem ntau ntawm cov xwm txheej uas kuv tau hais thaum pib ntawm tsab ntawv ceeb toom. Qhov tsuas yog qhov uas nws yuav tsis haum yog siab zaus trading tshuab.

Ua tsaug! Thiab lwm lo lus nug. Dab tsi yog compatibility hauv PromQL?

Tag nrho rov qab compatibility. VictoriaMetrics txhawb nqa PromQL. Tsis tas li ntawd, nws ntxiv kev ua haujlwm siab ntxiv hauv PromQL, uas yog hu ua MetricsQL. Muaj kev sib tham hauv YouTube txog qhov kev ua haujlwm txuas ntxiv no. Kuv hais lus ntawm Monitoring Meetup nyob rau lub caij nplooj ntoos hlav hauv St.

Telegram channel VictoriaMetrics.

Tsuas yog cov neeg siv sau npe tuaj yeem koom nrog hauv daim ntawv ntsuam xyuas. Kos npe rau hauvthov.

Dab tsi yog txwv tsis pub koj los ntawm kev hloov mus rau VictoriaMetrics raws li koj lub sijhawm ntev cia rau Prometheus? (Sau hauv cov lus, Kuv yuav ntxiv nws rau qhov kev xaiv tsa))

  • 71,4%Kuv tsis siv Prometheus 5

  • 28,6%Tsis paub txog VictoriaMetrics2

7 cov neeg siv pov npav. 12 cov neeg siv txwv tsis pub siv.

Tau qhov twg los: www.hab.com

Ntxiv ib saib