Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Molaim duit athscríbhinn na tuarascála déanach 2019 le Alexander Valyalkin a léamh “Go optimizations in VictoriaMetrics”

VictoriaMetrics — DBMS tapa agus inscálaithe chun sonraí a stóráil agus a phróiseáil i bhfoirm sraith ama (foirmíonn an taifead am agus sraith luachanna a fhreagraíonn don tréimhse seo, mar shampla, a fhaightear trí vótaíocht thréimhsiúil ar stádas braiteoirí nó trí bhailiú na méadracht).

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Seo nasc chuig físeán na tuarascála seo - https://youtu.be/MZ5P21j_HLE

Sleamhnáin

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Inis dúinn fút féin. Is mise Alexander Valyalkin. Anseo mo chuntas GitHub. Táim paiseanta faoi Go agus barrfheabhsú feidhmíochta. Scríobh mé go leor leabharlanna úsáideacha agus nach raibh chomh úsáideach. Tosaíonn siad le ceachtar acu fast, nó le quick réimír.

Tá mé ag obair ar VictoriaMetrics faoi láthair. Cad é agus cad atá á dhéanamh agam ann? Labhróidh mé faoi seo sa chur i láthair seo.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Seo a leanas achoimre na tuarascála:

  • Ar dtús, inseoidh mé duit cad é VictoriaMetrics.
  • Ansin inseoidh mé duit cén t-am sraithe.
  • Ansin inseoidh mé duit conas a oibríonn bunachar sonraí sraith ama.
  • Ansin, inseoidh mé duit faoi ailtireacht an bhunachair shonraí: cad atá ann.
  • Agus ansin déanaimis bogadh ar aghaidh chuig na leas iomlán a bhaint atá ag VictoriaMetrics. Is leas iomlán a bhaint é seo don innéacs inbhéartaithe agus leas iomlán a bhaint as cur i bhfeidhm bitset in Go.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

An bhfuil a fhios ag aon duine sa lucht féachana cad é VictoriaMetrics? Wow, tá a fhios ag go leor daoine cheana féin. Is dea-scéal é. Dóibh siúd nach bhfuil a fhios acu, is bunachar sonraí sraith ama é seo. Tá sé bunaithe ar ailtireacht ClickHouse, ar roinnt sonraí maidir le cur i bhfeidhm ClickHouse. Mar shampla, ar nós: MergeTree, ríomh comhthreomhar ar gach croíleacan próiseálaí atá ar fáil agus barrfheabhsú feidhmíochta trí oibriú ar bhlocanna sonraí a chuirtear i dtaisce an phróiseálaí.

Soláthraíonn VictoriaMetrics comhbhrú sonraí níos fearr ná bunachair shonraí sraith ama eile.

Scálaí sé go hingearach - is é sin, is féidir leat níos mó próiseálaithe, níos mó RAM a chur ar ríomhaire amháin. Bainfidh VictoriaMetrics úsáid rathúil as na hacmhainní seo atá ar fáil agus feabhsóidh siad táirgiúlacht líneach.

Déanann VictoriaMetrics scálaí go cothrománach freisin - is é sin, is féidir leat nóid bhreise a chur leis an gcnuasach VictoriaMetrics, agus méadóidh a fheidhmíocht beagnach go líneach.

Mar a cheap tú, is bunachar sonraí tapa é VictoriaMetrics, mar ní féidir liom daoine eile a scríobh. Agus tá sé scríofa in Téigh, mar sin táim ag caint faoi ag an gcruinniú seo.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Cé a fhios cad is sraith ama ann? Tá aithne aige ar a lán daoine freisin. Is sraith péirí é amshraith (timestamp, значение), áit a ndéantar na péirí seo a shórtáil de réir ama. Is é an luach uimhir snámhphointe – snámhphointe64.

Aithnítear eochair gach sraith ama. Cad atá san eochair seo? Tá sé comhdhéanta de shraith neamhfholamh de phéirí eochairluacha.

Seo sampla de shraith ama. Is é eochair na sraithe seo ná liosta péirí: __name__="cpu_usage" is ainm don méadrach, instance="my-server" - is é seo an ríomhaire ar a bhfuil an méadrach seo bailithe, datacenter="us-east" - is é seo an t-ionad sonraí ina bhfuil an ríomhaire seo suite.

Chríochnaíomar le hainm sraith ama comhdhéanta de thrí phéire eochairluacha. Freagraíonn an eochair seo do liosta péirí (timestamp, value). t1, t3, t3, ..., tN - is stampaí ama iad seo, 10, 20, 12, ..., 15 — na luachanna comhfhreagracha. Is é seo an cpu-úsáid ag am ar leith do shraith ar leith.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Cá háit is féidir sraith ama a úsáid? An bhfuil aon smaoineamh ag éinne?

  • In DevOps, is féidir leat LAP, RAM, líonra, rps, líon earráidí, etc.
  • IoT - is féidir linn teocht, brú, geo-chomhordanáidí agus rud éigin eile a thomhas.
  • Airgeadas freisin – is féidir linn monatóireacht a dhéanamh ar phraghsanna do gach cineál stoc agus airgeadra.
  • Ina theannta sin, is féidir sraith ama a úsáid chun monatóireacht a dhéanamh ar phróisis táirgthe i monarchana. Tá úsáideoirí againn a úsáideann VictoriaMetrics chun monatóireacht a dhéanamh ar thuirbíní gaoithe, le haghaidh róbait.
  • Tá sraitheanna ama úsáideach freisin chun faisnéis a bhailiú ó bhraiteoirí gléasanna éagsúla. Mar shampla, le haghaidh inneall; chun brú na mbonn a thomhas; le haghaidh luas a thomhas, achar; chun tomhaltas gásailín a thomhas, etc.
  • Is féidir sraith ama a úsáid freisin chun monatóireacht a dhéanamh ar aerárthaí. Tá bosca dubh ag gach aerárthach a bhailíonn sraith ama le haghaidh paraiméadair éagsúla de shláinte an aerárthaigh. Úsáidtear sraith ama freisin sa tionscal aeraspáis.
  • Is éard atá i gcúram sláinte ná brú fola, cuisle, etc.

B'fhéidir go bhfuil níos mó feidhmchlár ann a ndearna mé dearmad orthu, ach tá súil agam go dtuigeann tú go n-úsáidtear sraitheanna ama go gníomhach sa domhan nua-aimseartha. Agus tá líon na n-úsáid ag fás gach bliain.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Cén fáth a bhfuil bunachar sonraí sraith ama uait? Cén fáth nach féidir leat bunachar sonraí coibhneasta a úsáid chun sraitheanna ama a stóráil?

Toisc go mbíonn líon mór faisnéise de ghnáth sna sraitheanna ama, rud atá deacair a stóráil agus a phróiseáil i mbunachair shonraí traidisiúnta. Mar sin, bhí an chuma ar bhunachair shonraí speisialaithe do shraith ama. Stórálann na boinn seo pointí go héifeachtach (timestamp, value) leis an eochair tugtha. Soláthraíonn siad API chun sonraí stóráilte a léamh de réir eochrach, trí phéire eochairluacha amháin, nó trí phéirí eochairluacha iolracha, nó trí regexp. Mar shampla, ba mhaith leat an t-ualach LAP de do chuid seirbhísí go léir a fháil i lárionad sonraí i Meiriceá, ansin ní mór duit an cheist bhréige seo a úsáid.

Go hiondúil cuireann bunachair shonraí amshraitheanna sainteangacha fiosrúcháin ar fáil mar ní oireann amshraith SQL go han-mhaith. Cé go bhfuil bunachair shonraí ann a thacaíonn le SQL, níl sé an-oiriúnach. Teangacha ceist ar nós PromQL, InfluxQL, Flux, Q. Tá súil agam go bhfuil ar a laghad ceann amháin de na teangacha seo cloiste agam. Is dócha gur chuala go leor daoine faoi PromQL. Is é seo an teanga cheist Prometheus.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Seo an chuma atá ar ailtireacht bhunachar sonraí sraith ama nua-aimseartha ag baint úsáide as VictoriaMetrics mar shampla.

Tá sé comhdhéanta de dhá chuid. Is é seo an stóráil don innéacs inbhéartaithe agus stóráil do luachanna sraith ama. Tá na stórtha seo scartha.

Nuair a thagann taifead nua isteach sa bhunachar sonraí, déanaimid rochtain ar an innéacs inbhéartaithe ar dtús chun aitheantóir an tsraith ama do thacar ar leith a fháil label=value le haghaidh méadrach ar leith. Faighimid an t-aitheantóir seo agus sábhálann muid an luach sa stór sonraí.

Nuair a thagann iarratas chun sonraí a aisghabháil ó TSDB, téighimid chuig an innéacs inbhéartaithe ar dtús. A ligean ar a fháil gach rud timeseries_ids taifid a mheaitseálann an tacar seo label=value. Agus ansin faigheann muid na sonraí go léir is gá ón stóras sonraí, innéacsaithe ag timeseries_ids.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Breathnaímid ar shampla den chaoi a bpróiseálann bunachar sonraí sraith ama ceist roghnaithe isteach.

  • Ar an gcéad dul síos faigheann sí gach rud timeseries_ids ó innéacs inbhéartaithe ina bhfuil na péirí tugtha label=value, nó slonn rialta tugtha a shásamh.
  • Ansin aisghabhann sé na pointí sonraí go léir ón stóráil sonraí ag eatramh ama ar leith do na cinn aimsithe timeseries_ids.
  • Tar éis seo, déanann an bunachar sonraí roinnt ríomhaireachtaí ar na pointí sonraí seo, de réir iarratais an úsáideora. Agus ina dhiaidh sin filleann sé an freagra.

Sa chur i láthair seo inseoidh mé duit faoin gcéad chuid. Is cuardach é seo timeseries_ids de réir innéacs inbhéartaithe. Is féidir leat féachaint ar an dara cuid agus an tríú cuid níos déanaí Foinsí VictoriaMetrics, nó fan go dtí go n-ullmhóidh mé tuarascálacha eile :)

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Bogaimis ar aghaidh go dtí an t-innéacs inbhéartaithe. Is féidir go gceapann go leor go bhfuil sé seo simplí. Cé a bhfuil a fhios aige cad is innéacs inbhéartaithe ann agus conas a oibríonn sé? Ó, níl an oiread sin daoine ann anois. Déanaimis iarracht a thuiscint cad atá ann.

Tá sé simplí i ndáiríre. Níl ann ach foclóir a mhapálann eochair do luach. Cad is eochair ann? An lánúin seo label=valueI gcás ina label и value - is línte iad seo. Agus is sraith iad na luachanna timeseries_ids, lena n-áirítear an péire tugtha label=value.

Ceadaíonn innéacs inverted duit gach rud a fháil go tapa timeseries_ids, a thug label=value.

Ligeann sé duit freisin a fháil go tapa timeseries_ids sraith ama le haghaidh roinnt péirí label=value, nó do lánúin label=regexp. Conas a tharlaíonn sé seo? Trí áit a dtrasnaíonn an tacar a aimsiú timeseries_ids do gach péire label=value.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Breathnaímid ar fheidhmiúcháin éagsúla an innéacs inbhéartaithe. Let tús leis an gcur i bhfeidhm is simplí naive. Breathnaíonn sí mar seo.

Feidhm getMetricIDs Faigheann liosta teaghráin. Tá gach líne label=value. Filleann an fheidhm seo liosta metricIDs.

Conas a oibríonn sé? Anseo tá athróg dhomhanda againn ar a dtugtar invertedIndex. Is foclóir rialta é seo (map), a mhapálfaidh an téad chun ints a ghearradh. Tá an líne label=value.

Feidhm cur i bhfeidhm: a fháil metricIDs don chéad label=value, ansin téann muid trí gach rud eile label=value, faigheann muid é metricIDs dóibh. Agus glaoch ar an fheidhm intersectInts, a phléifear thíos. Agus filleann an fheidhm seo trasnaíocht na liostaí seo.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Mar a fheiceann tú, níl sé an-chasta innéacs inbhéartaithe a chur i bhfeidhm. Ach is cur i bhfeidhm naive é seo. Cad iad na míbhuntáistí a bhaineann leis? Is é an míbhuntáiste is mó a bhaineann le cur i bhfeidhm naive ná go stóráiltear innéacs inbhéartaithe den sórt sin i RAM. Tar éis an t-iarratas a atosú caillimid an t-innéacs seo. Níl aon shábháil ar an innéacs seo don diosca. Ní dócha go mbeidh innéacs inbhéartaithe den sórt sin oiriúnach do bhunachar sonraí.

Baineann an dara míbhuntáiste le cuimhne freisin. Caithfidh an t-innéacs inbhéartaithe luí isteach i RAM. Má sháraíonn sé an méid RAM, ansin ar ndóigh beidh muid a fháil - as earráid chuimhne. Agus ní oibreoidh an clár.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Is féidir an fhadhb seo a réiteach trí úsáid a bhaint as réitigh réamhdhéanta ar nós LeibhéalDBRocksDB.

I mbeagán focal, ní mór dúinn bunachar sonraí a ligeann dúinn trí oibríocht a dhéanamh go tapa.

  • Is é an chéad oibríocht a thaifeadadh ключ-значение chuig an mbunachar sonraí seo. Déanann sí é seo go han-tapa, áit a bhfuil ключ-значение is teaghráin treallach iad.
  • Is é an dara oibríocht ná cuardach tapa ar luach ag baint úsáide as eochair ar leith.
  • Agus is é an tríú oibríocht ná cuardach tapa ar gach luach trí réimír ar leith.

LevelDB agus RocksDB - d'fhorbair Google agus Facebook na bunachair shonraí seo. Tháinig LevelDB ar dtús. Ansin ghlac na guys ó Facebook LevelDB agus thosaigh siad ag feabhsú é, rinne siad RocksDB. Anois oibríonn beagnach gach bunachar sonraí inmheánach ar RocksDB taobh istigh de Facebook, lena n-áirítear iad siúd a aistríodh chuig RocksDB agus MySQL. D'ainmnigh siad é MyRocks.

Is féidir innéacs inbhéartaithe a chur i bhfeidhm ag baint úsáide as LevelDB. Conas é a dhéanamh? Sábhálann muid mar eochair label=value. Agus is é an luach aitheantóir na sraithe ama ina bhfuil an péire i láthair label=value.

Má tá go leor sraith ama againn le péire ar leith label=value, ansin beidh go leor sraitheanna sa bhunachar sonraí seo leis an eochair chéanna agus difriúil timeseries_ids. Chun liosta a fháil de gach timeseries_ids, a thosaíonn le seo label=prefix, déanaimid scanadh raoin a bhfuil an bunachar sonraí seo optamaithe dó. Is é sin, roghnóimid gach líne a thosaíonn label=prefix agus an gá a fháil timeseries_ids.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Seo cur i bhfeidhm samplach den chuma a bheadh ​​air in Go. Tá innéacs inbhéartaithe againn. Is é seo LevelDB.

Tá an fheidhm mar an gcéanna leis an gcur i bhfeidhm naive. Athdhéanann sé an cur i bhfeidhm naive beagnach líne ar líne. Is é an pointe amháin go bhfuil in ionad casadh go map rochtain againn ar an innéacs inverted. Faighimid na luachanna go léir don chéad label=value. Ansin téann muid tríd na péirí go léir atá fágtha label=value agus na tacair chomhfhreagracha de metricIDs a fháil dóibh. Ansin feicimid an crosbhealach.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Is cosúil go bhfuil gach rud ceart go leor, ach tá míbhuntáistí ag baint leis an réiteach seo. Chuir VictoriaMetrics innéacs inbhéartaithe i bhfeidhm ar dtús bunaithe ar LevelDB. Ach sa deireadh bhí orm é a thabhairt suas.

Cén fáth? Toisc go bhfuil LevelDB níos moille ná an cur i bhfeidhm naive. I gcur i bhfeidhm naive, nuair a thugtar eochair ar leith, a fháil againn láithreach an slice iomlán metricIDs. Is oibríocht an-tapa é seo - tá an slice iomlán réidh le húsáid.

I LevelDB, gach uair a dtugtar feidhm GetValues ní mór duit dul tríd na línte go léir a thosaíonn le label=value. Agus faigh an luach do gach líne timeseries_ids. De leithéid timeseries_ids bhailiú slice díobh seo timeseries_ids. Ar ndóigh, tá sé seo i bhfad níos moille ná rochtain a fháil ar léarscáil rialta le heochair.

Is é an dara míbhuntáiste ná go bhfuil LevelDB scríofa i C. Níl sé an-tapa glaoch ar fheidhmeanna C ó Go. Tógann sé na céadta nanoseconds. Níl sé seo an-tapa, mar i gcomparáid le glao feidhm rialta scríofa i dul, a thógann 1-5 nana-soicindí, is é an difríocht i bhfeidhmíocht na deich n-uaire. Do VictoriaMetrics bhí sé seo ina locht marfach :)

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Mar sin scríobh mé mo chur i bhfeidhm féin ar an innéacs inbhéartaithe. Agus ghlaoigh sé uirthi cumaisc.

Tá Mergeset bunaithe ar struchtúr sonraí MergeTree. Faightear an struchtúr sonraí seo ar iasacht ó ClickHouse. Ar ndóigh, ba cheart mergeset a bharrfheabhsú le haghaidh cuardach tapa timeseries_ids de réir na heochrach tugtha. Tá Mergeset scríofa go hiomlán in Go. Is féidir leat a fheiceáil foinsí VictoriaMetrics ar GitHub. Tá cur i bhfeidhm mergeset san fhillteán /lib/ mergeset. Is féidir leat triail a dhéanamh amach cad atá ar siúl ansin.

Tá an API mergeset an-chosúil le LevelDB agus RocksDB. Is é sin, ligeann sé duit taifid nua a shábháil go tapa ansin agus taifid a roghnú go tapa le réimír ar leith.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Déanfaimid labhairt faoi na míbhuntáistí a bhaineann le mergeset níos déanaí. Anois, déanaimis labhairt faoi na fadhbanna a d'eascair le VictoriaMetrics i dtáirgeadh agus innéacs inbhéartaithe á chur i bhfeidhm.

Cén fáth ar tháinig siad chun cinn?

Is é an chéad chúis leis an ráta ard churn. Aistrithe go Rúisis, is athrú go minic é seo i sraith ama. Seo nuair a thagann deireadh le sraith ama agus cuirtear tús le sraith nua, nó nuair a thosaíonn go leor sraith ama nua. Agus is minic a tharlaíonn sé seo.

Is é an dara chúis an líon mór de shraith ama. Ar dtús, nuair a bhí an tóir ar mhonatóireacht, bhí líon na sraitheanna ama beag. Mar shampla, le haghaidh gach ríomhaire is gá duit monatóireacht a dhéanamh ar LAP, cuimhne, líonra agus ualach diosca. 4 sraith ama do ríomhaire. Ligean le rá go bhfuil 100 ríomhaire agat agus 400 sraith ama. Is beag é seo.

Le himeacht ama, thuig daoine go bhféadfadh siad faisnéis níos gráinneach a thomhas. Mar shampla, déan an t-ualach a thomhas ní ar an bpróiseálaí ar fad, ach ar leithligh ó chroílár gach próiseálaí. Má tá 40 croí próiseálaí agat, tá 40 uair níos mó sraith ama agat chun ualach próiseálaí a thomhas.

Ach ní hé sin go léir. Is féidir go mbeadh roinnt stát ag gach croí próiseálaí, mar shampla díomhaoin, nuair a bhíonn sé díomhaoin. Agus freisin ag obair i spás úsáideora, ag obair i spás eithne agus stáit eile. Agus is féidir gach stát den sórt sin a thomhas freisin mar shraith ama ar leithligh. Méadaíonn sé seo freisin ar líon na sraitheanna ag 7-8 huaire.

Ó mhéadracht amháin fuaireamar 40 x 8 = 320 méadracht do ríomhaire amháin. Méadaigh faoi 100, faighimid 32 in ionad 000.

Ansin tháinig Kubernetes chomh maith. Agus d'éirigh sé níos measa mar is féidir le Kubernetes go leor seirbhísí éagsúla a óstáil. Tá go leor pods i ngach seirbhís i Kubernetes. Agus ní mór monatóireacht a dhéanamh ar seo go léir. Ina theannta sin, tá imscaradh leanúnach againn ar leaganacha nua de do sheirbhísí. I gcás gach leagan nua, ní mór sraith ama nua a chruthú. Mar thoradh air sin, méadaíonn líon na sraitheanna ama go heaspónantúil agus táimid ag tabhairt aghaidhe ar an bhfadhb a bhaineann le líon mór sraitheanna ama, ar a dtugtar ard-cairdineacht. Déileálann VictoriaMetrics leis go rathúil i gcomparáid le bunachair shonraí sraith ama eile.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Breathnaímis ar an ráta ard maistreáin. Cad is cúis le ráta maolaithe ard i dtáirgeadh? Toisc go mbíonn bríonna áirithe lipéid agus clibeanna ag athrú i gcónaí.

Mar shampla, a ghlacadh Kubernetes, a bhfuil an coincheap deployment, i.e. nuair a bheidh leagan nua de d’iarratas á rolladh amach. Ar chúis éigin, chinn forbróirí Kubernetes an t-aitheantas imscartha a chur leis an lipéad.

Cad ba chúis leis seo? Thairis sin, le gach imscaradh nua, cuirtear isteach ar na sean-sraitheanna ama go léir, agus ina ionad sin, tosaíonn sraitheanna ama nua le luach lipéad nua deployment_id. Is féidir na céadta mílte agus fiú na milliúin sraitheanna den sórt sin a bheith ann.

Is é an rud is tábhachtaí faoi seo go léir ná go dtagann méadú ar líon iomlán na sraitheanna ama, ach tá líon na sraitheanna ama atá gníomhach faoi láthair agus a fhaigheann sonraí fós seasmhach. Tugtar ráta ard churn ar an stát seo.

Is í an phríomhfhadhb a bhaineann le ráta maolaithe ard ná luas cuardaigh seasta a chinntiú do gach sraith ama do thacar áirithe lipéad thar eatramh ama áirithe. De ghnáth is é seo an t-eatramh ama don uair dheireanach nó an lá deiridh.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Conas an fhadhb seo a réiteach? Seo an chéad rogha. Déantar é seo chun an t-innéacs inbhéartaithe a roinnt ina chodanna neamhspleácha le himeacht ama. Is é sin, roinnt eatramh ama a théann, críochnaíonn muid ag obair leis an innéacs inverted reatha. Agus cruthaigh innéacs inbhéartaithe nua. Gabhann eatramh ama eile, cruthaímid ceann eile agus ceann eile.

Agus nuair a dhéantar sampláil ó na hinnéacsanna inbhéartaithe seo, aimsímid sraith innéacsanna inbhéartaithe a thagann laistigh den eatramh tugtha. Agus, dá réir sin, roghnaímid id na sraithe ama as sin.

Sábhálann sé seo acmhainní mar ní gá dúinn breathnú ar chodanna nach dtagann laistigh den eatramh a thugtar. Is é sin, de ghnáth, má roghnaímid sonraí don uair dheireanach, ansin le haghaidh tréimhsí ama roimhe sin ní dhéanaimid iarratais.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Tá rogha eile ann chun an fhadhb seo a réiteach. Déantar é seo chun liosta ar leith d'aitheantais de shraitheanna ama a tharla an lá sin a stóráil do gach lá.

Is é an buntáiste a bhaineann leis an réiteach seo ná an réiteach roimhe seo ná nach ndéanaimid dúbailt ar fhaisnéis sraith ama nach n-imíonn le himeacht ama. Bíonn siad i láthair i gcónaí agus ní athraíonn siad.

Is é an míbhuntáiste go bhfuil réiteach den sórt sin níos deacra a chur i bhfeidhm agus níos deacra a dhífhabhtú. Agus roghnaigh VictoriaMetrics an réiteach seo. Seo mar a tharla sé go stairiúil. Feidhmíonn an réiteach seo go maith freisin i gcomparáid leis an gceann roimhe seo. Toisc nár cuireadh an réiteach seo i bhfeidhm mar gheall ar an bhfíric go bhfuil sé riachtanach sonraí a dhúbailt i ngach deighilt le haghaidh sraitheanna ama nach n-athraíonn, i.e. nach n-imíonn siad le himeacht ama. Bhí VictoriaMetrics optamaithe go príomha le haghaidh tomhaltas spás diosca, agus rinne an cur i bhfeidhm roimhe seo tomhaltas spás diosca níos measa. Ach tá an cur i bhfeidhm seo níos oiriúnaí chun tomhaltas spás diosca a íoslaghdú, mar sin roghnaíodh é.

Bhí orm troid léi. Ba é an streachailt ná go gcaithfidh tú fós líon i bhfad níos mó a roghnú sa chur i bhfeidhm seo timeseries_ids le haghaidh sonraí ná nuair a bhíonn an t-innéacs inbhéartaithe deighilte.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Conas a réitigh muid an fhadhb seo? Réitíomar é ar bhealach bunaidh - trí roinnt aitheantóirí sraitheanna ama a stóráil i ngach iontráil innéacs inbhéartaithe seachas aitheantóir amháin. Is é sin, tá eochair againn label=value, a tharlaíonn i ngach sraith ama. Agus anois táimid shábháil roinnt timeseries_ids in aon iontráil amháin.

Seo sampla. Roimhe seo bhí N iontrálacha againn, ach anois tá iontráil amháin againn a bhfuil a réimír mar an gcéanna leis na cinn eile go léir. Maidir leis an iontráil roimhe seo, tá na haitheantais sraith ama ar fad sa luach.

D'fhág sé seo gur féidir luas scanadh innéacs inbhéartaithe den sórt sin a mhéadú suas le 10 n-uaire. Agus lig sé dúinn tomhaltas cuimhne a laghdú don taisce, mar anois stórálaimid an teaghrán label=value ach uair amháin sa taisce le chéile N uair. Agus is féidir leis an líne seo a bheith mór má stóráil tú línte fada i do chuid clibeanna agus lipéid, ar maith le Kubernetes iad a shove ann.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Rogha eile chun cuardach a bhrostú ar innéacs inbhéartaithe ná bearradh. Roinnt innéacsanna inbhéartaithe a chruthú in ionad ceann amháin agus sonraí a roinnt eatarthu le heochair. Seo sraith key=value gal. Is é sin le rá, faighimid roinnt innéacsanna inbhéartaithe neamhspleácha, ar féidir linn iad a fhiosrú go comhthreomhar ar roinnt próiseálaithe. Níor cheadaigh feidhmithe roimhe seo ach oibriú i mód próiseálaí aonair, i.e. sonraí a scanadh ar chroílár amháin. Ligeann an réiteach seo duit sonraí a scanadh ar roinnt croíleacáin ag an am céanna, mar is maith le ClickHouse a dhéanamh. Is é seo atá beartaithe againn a chur i bhfeidhm.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Anois, déanaimis filleadh ar ár gcaorach - chuig an bhfeidhm trasnaithe timeseries_ids. Déanaimis machnamh ar na feidhmeanna a d'fhéadfadh a bheith ann. Ceadaíonn an fheidhm seo duit a fháil timeseries_ids le haghaidh sraith ar leith label=value.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Is é an chéad rogha ná cur chun feidhme naive. Dhá lúb neadaithe. Anseo gheobhaidh muid an t-ionchur feidhme intersectInts dhá shlis - a и b. Ag an aschur, ba cheart go gcuirfeadh sé trasna na slisní seo ar ais chugainn.

Breathnaíonn cur i bhfeidhm naive mar seo. ite againn thar gach luach ó slice a, taobh istigh den lúb seo téann muid tríd na luachanna uile de slice b. Agus déanaimid comparáid idir iad. Má mheaitseálann siad, ansin tá crosbhealach aimsithe againn. Agus é a shábháil i result.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Cad iad na míbhuntáistí? Is í an chastacht chearnach a phríomh-mhíbhuntáiste. Mar shampla, má tá do thoisí slice a и b milliún ag an am, ansin ní bheidh an fheidhm seo ar ais freagra a thabhairt duit. Toisc go gcaithfidh sé trilliún atriallta a dhéanamh, rud atá go leor fiú le haghaidh ríomhairí nua-aimseartha.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Tá an dara cur i bhfeidhm bunaithe ar léarscáil. Cruthaímid léarscáil. Chuireamar na luachanna go léir ó slisne isteach sa léarscáil seo a. Ansin téann muid trí slice i lúb ar leith b. Agus déanaimid seiceáil an bhfuil an luach seo ó slice b sa léarscáil. Má tá sé ann, cuir leis an toradh é.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Cad iad na buntáistí? Is é an buntáiste nach bhfuil ach castacht líneach ann. Is é sin, déanfaidh an fheidhm a fhorghníomhú i bhfad níos tapúla le haghaidh slices níos mó. Maidir le slisne milliún, déanfar an fheidhm seo i 2 mhilliún atriall, i gcomparáid le trilliún atriallta na feidhme roimhe seo.

Is é an buntáiste a bhaineann leis ná go dteastaíonn níos mó cuimhne ón bhfeidhm seo chun an léarscáil seo a chruthú.

Is é an dara míbhuntáiste an forchostas mór do hashing. Níl an míbhuntáiste seo an-soiléir. Agus dúinne ní raibh sé an-soiléir freisin, mar sin ar dtús i VictoriaMetrics bhí cur i bhfeidhm na dtrasnaíonn trí léarscáil. Ach ansin léirigh próifíliú go gcaitear am an phríomhphróiseálaí ag scríobh chuig an léarscáil agus ag seiceáil an bhfuil luach sa léarscáil seo.

Cén fáth a gcuirtear am LAP amú sna háiteanna seo? Toisc go ndéanann Go oibríocht hashing ar na línte seo. Is é sin, ríomhann sé hash na heochrach chun rochtain a fháil ansin ar innéacs ar leith sa HashMap. Críochnaítear an oibríocht ríomh hash i ndeicheanna nanascoicindí. Tá sé seo mall do VictoriaMetrics.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Chinn mé bitset a chur i bhfeidhm optamaithe go sonrach don chás seo. Seo an chuma atá ar an dtrasnaíonn dhá shlisne anois. Anseo cruthaímid bitset. Cuirimid eilimintí ón gcéad slice leis. Ansin déanaimid seiceáil ar láithreacht na n-eilimintí seo sa dara slice. Agus iad a chur leis an toradh. Is é sin, tá sé beagnach aon difriúil ón sampla roimhe seo. Is é an t-aon rud anseo ná gur chuireamar feidhmeanna saincheaptha in ionad rochtain ar léarscáil add и has.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Ar an gcéad amharc, is cosúil gur chóir go n-oibreodh sé seo níos moille, dá mba rud é gur úsáideadh léarscáil caighdeánach ann roimhe seo, agus ansin tugtar roinnt feidhmeanna eile, ach léiríonn próifíliú go n-oibríonn an rud seo 10 n-uaire níos tapúla ná an léarscáil caighdeánach i gcás VictoriaMetrics.

Ina theannta sin, úsáideann sé cuimhne i bhfad níos lú i gcomparáid le cur i bhfeidhm léarscáil. Toisc go bhfuil muid ag stóráil giotán anseo in ionad luachanna ocht-beart.

Is é an míbhuntáiste a bhaineann leis an gcur chun feidhme seo ná nach bhfuil sé chomh soiléir, nach bhfuil sé fánach.

Míbhuntáiste eile nach bhféadfadh go leor a thabhairt faoi deara ná go bhféadfadh sé nach n-oibreoidh an cur i bhfeidhm seo go maith i gcásanna áirithe. Is é sin, tá sé optamaithe le haghaidh cás ar leith, don chás seo ina dtrasnaíonn ids sraith ama VictoriaMetrics. Ní chiallaíonn sé seo go bhfuil sé oiriúnach do gach cás. Má úsáidtear é go mícheart, ní bhfaighidh muid méadú feidhmíochta, ach earráid as cuimhne agus moilliú ar fheidhmíocht.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Déanaimis machnamh ar chur i bhfeidhm an struchtúir seo. Más mian leat breathnú, tá sé suite sna foinsí VictoriaMetrics, san fhillteán lib/uint64set. Tá sé optamaithe go sonrach le haghaidh cás VictoriaMetrics, áit timeseries_id Is luach 64-giotán é, áit a bhfuil an chéad 32 giotán seasta go bunúsach agus gan ach na 32 giotán deiridh a athrú.

Ní stóráiltear an struchtúr sonraí seo ar dhiosca, ní oibríonn sé ach i gcuimhne.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Seo é a API. Níl sé an-chasta. Tá an API in oiriúint go sonrach do shampla ar leith d’úsáid VictoriaMetrics. Is é sin, níl aon fheidhmeanna gan ghá anseo. Seo iad na feidhmeanna a úsáideann VictoriaMetrics go sainráite.

Tá feidhmeanna ann add, a chuireann luachanna nua leis. Tá feidhm has, a sheiceálann le haghaidh luachanna nua. Agus tá feidhm del, a bhaintear luachanna. Tá feidhm chúntóra ann len, a thugann ar ais méid na sraithe. Feidhm clone Cluain Eois go leor. Agus feidhm appendto athraíonn an tacar seo ina slisne timeseries_ids.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Seo an chuma atá ar chur i bhfeidhm an struchtúir sonraí seo. Tá dhá ghné ag an tacar:

  • ItemsCount Is réimse cabhrach é chun líon na n-eilimintí i sraith a thabhairt ar ais go tapa. D’fhéadfaí é a dhéanamh gan an réimse cúnta seo, ach b’éigean é a chur leis anseo mar is minic a cheistíonn VictoriaMetrics fad an bhiséid ina halgartaim.

  • Is é an dara réimse buckets. Is é seo an slice as an struchtúr bucket32. Stórálann gach struchtúr hi Gort. Is iad seo na 32 giotán uachtaracha. Agus dhá shlisne - b16his и buckets de bucket16 struchtúir.

Stóráiltear na 16 giotán barr den dara cuid den struchtúr 64-giotán anseo. Agus anseo stóráiltear bitsets do na 16 giotán níos ísle de gach beart.

Bucket64 comhdhéanta de eagar uint64. Ríomhtar an fad trí na tairisigh seo a úsáid. I gceann bucket16 is féidir uasmhéid a stóráil 2^16=65536 giotán. Má roinneann tú é seo ar 8, is é 8 cilibheart é. Má roinneann tú ar 8 arís, is é 1000 é uint64 brí. Is é sin Bucket16 – is é seo ár struchtúr 8 gcileabairt.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Breathnaímid ar conas a chuirtear i bhfeidhm ceann de mhodhanna an struchtúir seo chun luach nua a chur leis.

Tosaíonn sé ar fad le uint64 bríonna. Ríomhaimid na 32 giotán uachtaracha, ríomhaimid na 32 giotán is ísle. A ligean ar dul tríd gach rud buckets. Déanaimid comparáid idir na 32 giotán is fearr i ngach buicéad leis an luach atá á chur leis. Agus má mheaitseálann siad, ansin tugaimid an fheidhm add i struchtúr b32 buckets. Agus cuir na 32 giotán níos ísle ann. Agus má d'fhill sé true, ansin ciallaíonn sé seo gur chuir muid luach den sórt sin ann agus nach raibh a leithéid de luach againn. Má fhilleann sé false, ansin bhí a leithéid de bhrí ann cheana féin. Ansin déanaimid méadú ar líon na n-eilimintí sa struchtúr.

Mura bhfuil an ceann atá uait aimsithe againn bucket leis an ardluach riachtanach, tugaimid an fheidhm mar sin addAlloc, rud a tháirgfidh ceann nua bucket, ag cur leis an struchtúr buicéad.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Is é seo cur i bhfeidhm na feidhme b32.add. Tá sé cosúil leis an gcur i bhfeidhm roimhe seo. Ríomhaimid na 16 ghiotán is suntasaí, na 16 ghiotán is suntasaí.

Ansin téann muid tríd na 16 giotán uachtaracha go léir. Faighimid cipíní. Agus má tá meaitseáil ann, tugaimid an modh cuir leis, a bhreithneoidh muid ar an gcéad leathanach eile bucket16.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Agus is é anseo an leibhéal is ísle, ba chóir a uasmhéadú oiread agus is féidir. Táimid ag ríomh le haghaidh uint64 luach id i giotán slice agus freisin bitmask. Is masc é seo le haghaidh luach tugtha 64-giotán, ar féidir a úsáid chun láithreacht an ghiotán seo a sheiceáil, nó é a shocrú. Déanaimid seiceáil féachaint an bhfuil an giotán seo socraithe agus é a shocrú, agus láithreacht a thabhairt ar ais. Is é seo ár gcur i bhfeidhm, rud a chuir ar ár gcumas oibriú na n-aitheantas trasnaithe de shraith ama a bhrostú 10 n-uaire i gcomparáid le gnáthléarscáileanna.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Chomh maith leis an leas iomlán a bhaint seo, tá go leor optimizations eile ag VictoriaMetrics. Cuireadh an chuid is mó de na optimizations seo ar chúis, ach tar éis próifíliú a dhéanamh ar an gcód i dtáirgeadh.

Is é seo an príomh-riail leas iomlán a bhaint - ná cuir leas iomlán a bhaint ag glacadh leis go mbeidh tranglam anseo, mar d'fhéadfadh sé a sheal amach nach mbeidh scrogall ann. Is gnách go ndíghrádaíonn optamú cáilíocht an chóid. Dá bhrí sin, is fiú a bharrfheabhsú ach amháin tar éis próifíliú agus b'fhearr i dtáirgeadh, ionas gur sonraí fíor é seo. Má tá suim ag aon duine, is féidir leat breathnú ar an cód foinse VictoriaMetrics agus iniúchadh a dhéanamh ar leas iomlán a bhaint eile atá ann.

Téigh optimizations i VictoriaMetrics. Alexander Valyalkin

Tá ceist agam faoi bitset. An-chosúil le cur i bhfeidhm bool veicteoir C++, giotán optamaithe. An ndearna tú an cur i bhfeidhm as sin?

Ní hea, ní as sin. Agus an giotánset seo á chur i bhfeidhm, bhí mé faoi threoir ag eolas ar struchtúr na sraitheanna ama ids seo, a úsáidtear i VictoriaMetrics. Agus tá a struchtúr den sórt sin go bhfuil na 32 giotán uachtaracha go bunúsach tairiseach. Tá na 32 giotán níos ísle faoi réir athraithe. Dá ísle an beagán, is minice is féidir é a athrú. Dá bhrí sin, tá an cur chun feidhme seo optamaithe go sonrach don struchtúr sonraí seo. Tá cur chun feidhme C++, chomh fada agus is eol dom, optamaithe don chás ginearálta. Má dhéanann tú leas iomlán a bhaint as an gcás ginearálta, ciallaíonn sé seo nach mbeidh sé mar an rogha is fearr do chás ar leith.

Molaim duit freisin féachaint ar thuarascáil Alexey Milovid. Thart ar mhí ó shin, labhair sé faoi leas iomlán a bhaint i ClickHouse le haghaidh speisialtóirí sonracha. Deir sé go díreach, sa chás ginearálta, go bhfuil cur chun feidhme C++ nó cur i bhfeidhm éigin eile curtha in oiriúint chun oibriú go maith ar an meán in ospidéal. D'fhéadfadh sé feidhmiú níos measa ná cur i bhfeidhm eolas-shonrach cosúil leis an gceann atá againne, áit a bhfuil a fhios againn go bhfuil na 32 giotán is fearr seasmhach den chuid is mó.

Tá an dara ceist agam. Cad é an difríocht bhunúsach ó InfluxDB?

Tá go leor difríochtaí bunúsacha ann. I dtéarmaí feidhmíochta agus tomhaltas cuimhne, léiríonn InfluxDB i dtástálacha tomhaltas cuimhne 10 n-uaire níos mó le haghaidh sraith ama ard-cardinality, nuair a bhíonn go leor acu, mar shampla, na milliúin. Mar shampla, ídíonn VictoriaMetrics 1 GB in aghaidh an mhilliúin sraitheanna gníomhacha, agus ídíonn InfluxDB 10 GB. Agus sin difríocht mhór.

Is é an dara difríocht bhunúsach ná go bhfuil teangacha fiosrúcháin aisteacha ag InfluxDB - Flux agus InfluxQL. Níl siad an-áisiúil chun oibriú le sraith ama i gcomparáid le PromQL, a fhaigheann tacaíocht ó VictoriaMetrics. Is teanga cheistiúcháin ó Prometheus í PromQL.

Agus is é difríocht amháin eile ná go bhfuil samhail sonraí beagán aisteach ag InfluxDB, áit ar féidir le gach líne roinnt réimsí a stóráil le sraith clibeanna éagsúla. Roinntear na línte seo i dtáblaí éagsúla tuilleadh. Déanann na deacrachtaí breise seo obair níos casta leis an mbunachar sonraí seo ina dhiaidh sin. Tá sé deacair tacaíocht agus tuiscint a fháil.

I VictoriaMetrics tá gach rud i bhfad níos simplí. Tá eochairluach ag gach sraith ama. Is sraith pointí é an luach - (timestamp, value), agus is í an eochair an tacar label=value. Níl aon deighilt idir réimsí agus tomhais. Ligeann sé duit aon sonraí a roghnú agus ansin a chur le chéile, a shuimiú, a dhealú, a iolrú, a roinnt, murab ionann agus InfluxDB áit nach bhfuil ríomhanna idir sraitheanna éagsúla curtha i bhfeidhm fós chomh fada agus is eol dom. Fiú má chuirtear i bhfeidhm iad, tá sé deacair, caithfidh tú a lán cód a scríobh.

Tá ceist shoiléiriú agam. Ar thuig mé i gceart go raibh fadhb de shaghas éigin ann ar labhair tú faoi, nach bhfuil an t-innéacs inbhéartaithe seo oiriúnach don chuimhne, agus mar sin tá deighilt ann?

Ar dtús, thaispeáin mé cur i bhfeidhm naive ar innéacs inverted ar léarscáil Go caighdeánach. Níl an cur i bhfeidhm seo oiriúnach do bhunachair shonraí toisc nach bhfuil an t-innéacs inbhéartaithe seo sábháilte ar diosca, agus ní mór an bunachar sonraí a shábháil ar diosca ionas go mbeidh na sonraí seo fós ar fáil nuair a atosófar. Sa chur i bhfeidhm seo, nuair a atosóidh tú an feidhmchlár, imeoidh d’innéacs inbhéartaithe. Agus caillfidh tú rochtain ar na sonraí go léir mar ní bheidh tú in ann é a fháil.

Dia dhuit! Go raibh maith agat as an tuairisc! Pavel is ainm dom. Is as Wildberries mé. Tá cúpla ceist agam duit. Ceist a haon. An gceapann tú, dá mba rud é gur roghnaigh tú prionsabal difriúil agus ailtireacht d'fheidhmchláir á tógáil agat agus má rinne tú na sonraí a dheighilt le himeacht ama, b'fhéidir go mbeifeá in ann sonraí a thrasnú agus tú ag cuardach, bunaithe ar dheighilt amháin amháin go bhfuil sonraí le haghaidh ceann amháin tréimhse ama , is é sin, in aon eatramh ama amháin agus ní bheadh ​​ort a bheith buartha faoi go bhfuil do chuid píosaí scaipthe ar bhealach difriúil? Ceist uimhir 2 - ós rud é go bhfuil algartam den chineál céanna á chur i bhfeidhm agat le bitset agus gach rud eile, ansin b'fhéidir gur bhain tú triail as treoracha próiseálaí a úsáid? B'fhéidir go bhfuil tú iarracht optimizations den sórt sin?

Freagróidh mé an dara ceann láithreach. Níl an pointe sin bainte amach againn fós. Ach más gá, bainfimid ann. Agus an chéad cheann, cad a bhí an cheist?

Phléigh tú dhá chás. Agus dúirt siad gur roghnaigh siad an dara ceann le cur i bhfeidhm níos casta. Agus níorbh fhearr leo an chéad cheann, áit a ndéantar na sonraí a dheighilt in am.

Tá. Sa chéad chás, bheadh ​​toirt iomlán an innéacs níos mó, mar i ngach críochdheighilt bheadh ​​orainn sonraí dúblacha a stóráil le haghaidh na sraitheanna ama sin a leanann trí na deighiltí seo go léir. Agus má tá do ráta maistreáin sraith ama beag, i.e. úsáidtear an tsraith chéanna i gcónaí, ansin sa chéad chás chaillfimid i bhfad níos mó spáis dioscaí i gcomparáid leis an dara cás.

Agus mar sin - tá, is rogha maith é deighilt ama. Úsáideann Prometheus é. Ach tá míbhuntáiste eile ag Prometheus. Agus na píosaí sonraí seo á gcumasc, caithfidh sé meiteaisnéis a choinneáil i gcuimhne do gach lipéad agus sraith ama. Dá bhrí sin, má tá na píosaí sonraí a chumasc sé mór, ansin méadaíonn tomhaltas cuimhne go mór le linn an chumaisc, murab ionann agus VictoriaMetrics. Nuair a dhéantar cumasc, ní itheann VictoriaMetrics cuimhne ar chor ar bith; ní chaitear ach cúpla cilibheart, beag beann ar mhéid na bpíosaí sonraí cumaiscthe.

Úsáideann an algartam atá á úsáid agat cuimhne. Marcálann sé clibeanna amseries ina bhfuil luachanna. Agus ar an mbealach seo déanann tú seiceáil le haghaidh láithreacht péireáilte in eagar sonraí amháin agus i gceann eile. Agus tuigeann tú cé acu a tharla nó nach ea a chéile. Go hiondúil, cuireann bunachair shonraí cúrsóirí agus aitritheoirí i bhfeidhm a stórálann a n-ábhar reatha agus a ritheann trí na sonraí sórtáilte mar gheall ar chastacht shimplí na n-oibríochtaí seo.

Cén fáth nach n-úsáidimid cúrsóirí chun sonraí a thrasnú?

Is ea.

Stórálaimid sraitheanna sórtáilte in LevelDB nó mergeset. Is féidir linn an cúrsóir a bhogadh agus an crosbhealach a fháil. Cén fáth nach n-úsáidimid é? Toisc go bhfuil sé mall. Toisc go gciallaíonn cúrsóirí gur gá duit feidhm a ghlaoch do gach líne. Is ionann glao feidhme agus 5 nana-soicind. Agus má tá tú 100 línte, ansin casadh sé amach go gcaithfimid leath soicind ach glaoch ar an fheidhm.

Tá a leithéid ann, sea. Agus mo cheist dheireanach. Féadfaidh an cheist fuaime beagán aisteach. Cén fáth nach féidir na comhiomláin riachtanacha go léir a léamh faoi láthair a thagann na sonraí agus iad a shábháil san fhoirm riachtanach? Cén fáth a shábháil méideanna ollmhóra i roinnt córas cosúil le VictoriaMetrics, ClickHouse, etc, agus ansin go leor ama a chaitheamh orthu?

Tabharfaidh mé sampla chun é a dhéanamh níos soiléire. Ligean le rá conas a oibríonn luasmhéadair bréagán beag? Taifeadann sé an fad a thaistil tú, an t-am ar fad á chur le luach amháin, agus an dara ceann - am. Agus roinneann. Agus faigheann meánluas. Is féidir leat a dhéanamh mar gheall ar an rud céanna. Cuir suas na fíricí riachtanacha go léir ar an eitilt.

Ceart go leor, tuigim an cheist. Tá a áit ag do shampla. Má tá a fhios agat cad iad na comhiomláin a theastaíonn uait, is é seo an cur i bhfeidhm is fearr. Ach is í an fhadhb atá ann ná go sábhálann daoine na méadrachtaí seo, roinnt sonraí i ClickHouse agus níl a fhios acu fós conas a dhéanfaidh siad iad a chomhiomlánú agus a scagadh amach anseo, agus mar sin caithfidh siad na sonraí amh go léir a shábháil. Ach má tá a fhios agat go gcaithfidh tú rud éigin a ríomh ar an meán, ansin cén fáth nach ríomh tú é in ionad a bunch de luachanna amh a stóráil ann? Ach níl sé seo ach amháin má tá a fhios agat go díreach cad atá uait.

Dála an scéil, tacaíonn bunachair shonraí le haghaidh sraith ama a stóráil le comhiomlán a chomhaireamh. Mar shampla, tacaíonn Prometheus rialacha taifeadta. Is é sin, is féidir é seo a dhéanamh má tá a fhios agat cad iad na haonaid a bheidh uait. Níl sé seo ag VictoriaMetrics fós, ach is gnách go dtéann Prometheus roimhe, inar féidir é seo a dhéanamh sna rialacha taifeadta.

Mar shampla, i mo phost roimhe seo bhí orm líon na n-imeachtaí a chomhaireamh i bhfuinneog sleamhnáin thar an uair dheireanach. Is í an fhadhb atá ann go raibh orm cur i bhfeidhm saincheaptha a dhéanamh in Go, i.e. seirbhís chun an rud seo a chomhaireamh. Bhí an tseirbhís seo neamh-fhánach ar deireadh thiar, toisc go bhfuil sé deacair a ríomh. Is féidir an cur i bhfeidhm a bheith simplí más gá duit roinnt comhiomláin a chomhaireamh ag tréimhsí ama socraithe. Más mian leat imeachtaí a chomhaireamh i bhfuinneog sleamhnáin, níl sé chomh simplí agus is cosúil. Sílim nach bhfuil sé seo curtha i bhfeidhm go fóill i ClickHouse nó i bunachair shonraí timeseries, toisc go bhfuil sé deacair a chur i bhfeidhm.

Agus ceist amháin eile. Ní raibh muid ach ag caint ar an meánú, agus chuimhnigh mé go raibh a leithéid de rud ann uair amháin agus Graphite with a Carbon backend. Agus bhí a fhios aige conas sean-shonraí a tanaí amach, is é sin, fág pointe amháin in aghaidh an nóiméid, pointe amháin in aghaidh na huaire, etc. I bprionsabal, tá sé seo áisiúil go leor má theastaíonn sonraí amh, réasúnta ag labhairt, ar feadh míosa, agus is féidir le gach rud eile. a bheith tanaithe amach . Ach ní thacaíonn Prometheus agus VictoriaMetrics leis an bhfeidhmiúlacht seo. An bhfuil sé beartaithe tacú leis? Mura bhfuil, cén fáth nach bhfuil?

Go raibh maith agat as an gceist. Cuireann ár n-úsáideoirí an cheist seo go tréimhsiúil. Fiafraíonn siad cathain a chuirfimid tacaíocht ar fáil don íosshampláil. Tá roinnt fadhbanna anseo. Ar an gcéad dul síos, tuigeann gach úsáideoir downsampling rud éigin difriúil: tá duine ag iarraidh aon phointe treallach a fháil ar eatramh ar leith, tá duine ag iarraidh uasluachanna, íosta, meánluachanna. Má scríobhann go leor córas sonraí chuig do bhunachar sonraí, ní féidir leat é a chnapshuim le chéile. D’fhéadfadh go mbeadh tanúchán difriúil ag teastáil ó gach córas. Agus tá sé seo deacair a chur i bhfeidhm.

Agus is é an dara rud ná go bhfuil VictoriaMetrics, cosúil le ClickHouse, optamaithe chun oibriú le líon mór sonraí amh, ionas gur féidir leis billiún líne a shluasaid i níos lú ná soicind má tá go leor croíleacáin agat i do chóras. Scanadh pointí sraith ama i VictoriaMetrics – 50 pointe in aghaidh an tsoicind in aghaidh an chroí. Agus is ionann an fheidhmíocht seo agus na croíleacáin atá ann cheana féin. Is é sin, má tá 000 croí agat, mar shampla, scanadhfidh tú billiún pointe in aghaidh an tsoicind. Agus laghdaíonn an mhaoin seo de chuid VictoriaMetrics agus ClickHouse an gá atá le híosshamhlú.

Gné eile ná go ndéanann VictoriaMetrics na sonraí seo a chomhbhrú go héifeachtach. Tá comhbhrú ar an meán i dtáirgeadh ó 0,4 go 0,8 bytes in aghaidh an phointe. Is stampa ama + luach gach pointe. Agus tá sé comhbhrúite i níos lú ná beart amháin ar an meán.

Sergey. Tá ceist agam. Cad é an íosmhéid ama taifeadta?

milleasoicind amháin. Bhí comhrá againn le déanaí le forbróirí bunachar sonraí sraith ama eile. Is é an t-íosmhéid ama a bhíonn acu ná soicind amháin. Agus i Graphite, mar shampla, is soicind amháin é freisin. In OpenTSDB is soicind amháin é freisin. Tá cruinneas nanosecond ag InfluxDB. I VictoriaMetrics tá sé aon milleasoicind, mar i Prometheus tá sé aon milleasoicind. Agus forbraíodh VictoriaMetrics ar dtús mar chianstóráil do Prometheus. Ach anois is féidir é a shábháil sonraí ó chórais eile.

Deir an duine ar labhair mé leis go bhfuil cruinneas soicind go soicind acu - is leor sin dóibh mar braitheann sé ar an gcineál sonraí atá á stóráil sa bhunachar sonraí sraith ama. Más sonraí DevOps nó sonraí ó bhonneagar é seo, ina mbailíonn tú é ag eatraimh 30 soicind, in aghaidh an nóiméid, is leor an dara cruinneas, ní gá duit aon rud níos lú. Agus má bhailíonn tú na sonraí seo ó chórais trádála ardmhinicíochta, ansin is gá duit cruinneas nanosecond.

Tá cruinneas millisecond in VictoriaMetrics oiriúnach freisin do chás DevOps, agus féadann sé a bheith oiriúnach don chuid is mó de na cásanna a luaigh mé ag tús na tuarascála. Is é an t-aon rud nach bhféadfadh sé a bheith oiriúnach ná córais trádála ardmhinicíochta.

Go raibh maith agat! Agus ceist eile. Cad é comhoiriúnacht i PromQL?

Comhoiriúnacht iomlán ar gcúl. Tacaíonn VictoriaMetrics go hiomlán le PromQL. Ina theannta sin, cuireann sé feidhmiúlacht chun cinn breise i PromQL, ar a dtugtar MetricsQL. Tá caint ar YouTube faoin bhfeidhmiúlacht leathnaithe seo. Labhair mé ag an Meetup Monatóireachta san earrach i St Petersburg.

Cainéal teileagram VictoriaMetrics.

Ní féidir ach le húsáideoirí cláraithe páirt a ghlacadh sa suirbhé. Sínigh isteach, le do thoil.

Cad atá ag cur bac ort aistriú go VictoriaMetrics mar do stóras fadtéarmach do Prometheus? (Scríobh sna tuairimí, cuirfidh mé leis an vótaíocht é))

  • 71,4%Ní úsáidim Prometheus5

  • 28,6%Ní raibh a fhios agam faoi VictoriaMetrics2

Vótáil 7 úsáideoir. Staon 12 úsáideoir.

Foinse: will.com

Add a comment