Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

M na-atụ aro ka ị gụọ transcript nke ngwụcha 2019 akụkọ Alexander Valyalkin "Go optimizations in VictoriaMetrics"

VictoriaMetrics - DBMS ngwa ngwa na scalable maka ịchekwa na nhazi data n'ụdị usoro oge (ihe ndekọ ahụ na-emepụta oge na ụkpụrụ nke kwekọrọ n'oge a, dịka ọmụmaatụ, nwetara site na ntuli aka oge nke ọnọdụ nke sensọ ma ọ bụ nchịkọta metrik).

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Nke a bụ njikọ na vidiyo akụkọ a - https://youtu.be/MZ5P21j_HLE

Ihe ngosi

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Gwa anyị gbasara onwe gị. Abụ m Alexander Vallyalkin. Ebe a akaụntụ GitHub m. Enwere m mmasị maka Go na nkwalite arụmọrụ. M dere ọtụtụ ihe bara uru na ọ bụghị nnukwu ụlọ akwụkwọ bara uru. Ha na-amalite na nke ọ bụla fast, ma ọ bụ ya na quick prefix.

Ana m arụ ọrụ ugbu a na VictoriaMetrics. Kedu ihe ọ bụ na gịnị ka m na-eme ebe ahụ? M ga-ekwu maka nke a na ngosi a.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Nkọwa nke akụkọ a bụ nke a:

  • Mbụ, m ga-agwa gị ihe VictoriaMetrics bụ.
  • Mgbe ahụ, m ga-agwa gị ihe usoro oge bụ.
  • Mgbe ahụ, m ga-agwa gị ka usoro nchekwa data usoro oge si arụ ọrụ.
  • Na-esote, m ga-agwa gị banyere ihe owuwu nchekwa data: ihe ọ mejupụtara.
  • Ma ka anyị gaa n'ihu na njikarịcha nke VictoriaMetrics nwere. Nke a bụ njikarịcha maka ntụgharị ntụgharị na nkwalite maka mmejuputa bitset na Go.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Onwere onye na-ege ntị mara ihe VictoriaMetrics bụ? Chaị, ọtụtụ mmadụ amaworị. Ọ bụ ozi ọma. Maka ndị na-amaghị, nke a bụ nchekwa data usoro oge. Ọ dabere na ụlọ ọrụ ClickHouse, na nkọwa ụfọdụ nke mmejuputa ClickHouse. Dịka ọmụmaatụ, na dị ka: MergeTree, ngụkọta ọnụ na cores processor niile dị na njikarịcha arụmọrụ site na ịrụ ọrụ na ngọngọ data etinyere na cache processor.

VictoriaMetrics na-enye mkpakọ data ka mma karịa ọdụ data usoro oge ndị ọzọ.

Ọ na-agbakọ n'ụzọ kwụ ọtọ - ya bụ, ị nwere ike itinyekwu processors, karịa RAM n'otu kọmputa. VictoriaMetrics ga-eji akụrụngwa ndị a dịnụ mee ihe nke ọma ma ga-akwalite mmepụta ahịrị.

VictoriaMetrics nwekwara akpịrịkpa kwụ ọtọ - ya bụ, ị nwere ike ịgbakwunye ọnụ ọnụ na ụyọkọ VictoriaMetrics, arụmọrụ ya ga-abawanye n'ahịrị.

Dị ka ị chere, VictoriaMetrics bụ nchekwa data ngwa ngwa, n'ihi na enweghị m ike ide ndị ọzọ. Edekwara ya na Go, yabụ m na-ekwu maka ya na nzukọ a.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Kedu onye maara ihe usoro oge bụ? Ọ makwa ọtụtụ mmadụ. Usoro oge bụ usoro ụzọ abụọ (timestamp, значение), ebe a na-ahazi ụzọ abụọ a site na oge. Ọnụ ahịa ya bụ nọmba na-ese n'elu mmiri - float64.

A na-amata usoro oge ọ bụla pụrụ iche site na igodo. Kedu ihe igodo a nwere? Ọ nwere otu ụzọ ụzọ igodo-uru na-adịghị efu.

Nke a bụ ọmụmaatụ nke usoro oge. Igodo nke usoro isiokwu a bụ ndepụta nke ụzọ abụọ: __name__="cpu_usage" bụ aha metric, instance="my-server" - nke a bụ kọmputa a na-anakọta metric a, datacenter="us-east" - nke a bụ ebe data ebe kọmputa a dị.

Anyị mechiri aha usoro oge nke nwere ụzọ ụzọ isi uru atọ. Igodo a dabara na ndepụta ụzọ abụọ (timestamp, value). t1, t3, t3, ..., tN - ndị a bụ oge ochie, 10, 20, 12, ..., 15 - ụkpụrụ kwekọrọ. Nke a bụ ojiji cpu n'oge enyere maka usoro enyere.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Ebee ka enwere ike iji usoro oge? Ọ nwere onye nwere echiche ọ bụla?

  • Na DevOps, ị nwere ike tụọ CPU, RAM, netwọkụ, rps, nọmba njehie, wdg.
  • IoT - anyị nwere ike tụọ okpomọkụ, nrụgide, nhazi geo na ihe ọzọ.
  • Nakwa ego - anyị nwere ike nyochaa ọnụahịa maka ụdị ebuka na ego niile.
  • Tụkwasị na nke a, enwere ike iji usoro oge na-enyocha usoro mmepụta ihe na ụlọ ọrụ mmepụta ihe. Anyị nwere ndị ọrụ na-eji VictoriaMetrics na-enyocha turbin ikuku, maka robots.
  • Usoro oge bara uru maka ịnakọta ozi sitere na sensọ nke ngwaọrụ dị iche iche. Dịka ọmụmaatụ, maka injin; maka ịlele nrụgide taya; maka ịlele ọsọ, anya; maka ịlele oriri mmanụ ụgbọala, wdg.
  • Enwere ike iji usoro oge nyochaa ụgbọ elu. Ụgbọ elu ọ bụla nwere igbe ojii na-anakọta usoro oge maka ọnọdụ dị iche iche nke ahụike ụgbọ elu. A na-ejikwa usoro oge eme ihe na ụlọ ọrụ ikuku.
  • Nlekọta ahụike bụ ọbara mgbali elu, pulse, wdg.

Enwere ike ịnwe ngwa ndị ọzọ m chefuru, mana enwere m olileanya na ị ghọtara na usoro oge na-arụsi ọrụ ike na ụwa nke oge a. Na olu nke ojiji ha na-eto eto kwa afọ.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Kedu ihe kpatara ịchọrọ nchekwa data usoro oge? Kedu ihe kpatara na ịnweghị ike iji nchekwa data mmekọrịta oge niile iji chekwaa usoro oge?

N'ihi na usoro oge na-enwekarị ozi buru ibu, bụ nke siri ike ịchekwa na nhazi na ọdụ data nkịtị. Ya mere, ọpụrụiche ọdụ data maka usoro oge pụtara. Ntọala ndị a na-echekwa isi ihe nke ọma (timestamp, value) ya na igodo enyere. Ha na-enye API maka ịgụ data echekwara site na igodo, site na otu ụzọ uru igodo, ma ọ bụ site na ọtụtụ ụzọ isi uru, ma ọ bụ site na regexp. Dịka ọmụmaatụ, ịchọrọ ịchọta ibu CPU nke ọrụ gị niile na ebe data dị na America, mgbe ahụ ịkwesịrị iji ajụjụ pseudo a.

A na-emekarị ọdụ data usoro oge na-enye asụsụ ajụjụ pụrụ iche n'ihi na usoro oge SQL adabaghị nke ọma. Agbanyeghị na enwere ọdụ data na-akwado SQL, ọ dabara nke ọma. Asụsụ ajụjụ dị ka PromQL, InfluxQL, asọpụta, Q. Enwere m olileanya na mmadụ anụla opekata mpe otu n'ime asụsụ ndị a. Ọtụtụ ndị mmadụ anụla maka PromQL. Nke a bụ asụsụ ajụjụ Prometheus.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Nke a bụ ihe nhazi nchekwa data usoro oge ọgbara ọhụrụ dị ka iji VictoriaMetrics dịka ọmụmaatụ.

Ọ nwere akụkụ abụọ. Nke a bụ ebe nchekwa maka ndeksi tụgharịrị na nchekwa maka ụkpụrụ usoro oge. E kewapụrụ ebe nchekwa ndị a.

Mgbe ndekọ ọhụrụ batara na nchekwa data, anyị na-ebu ụzọ nweta index tụgharịrị ka ịchọta ihe nchọpụta usoro oge maka otu enyere. label=value maka metric nyere. Anyị na-achọta ihe nchọpụta a wee chekwaa uru na ụlọ ahịa data.

Mgbe arịrịọ na-abịa iji weghachite data site na TSDB, anyị na-ebu ụzọ gaa na ndeksi atụgharị. Ka anyị nweta ihe niile timeseries_ids ndekọ na-adakọ na nke a label=value. Ma mgbe ahụ, anyị na-enweta data niile dị mkpa site na ụlọ nkwakọba ihe data, nke edepụtara ya timeseries_ids.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Ka anyị lelee ọmụmaatụ otu usoro nchekwa data usoro oge si ahazi ajụjụ ahọpụtara na-abata.

  • Nke mbụ, ọ na-enweta ihe niile timeseries_ids site na ndeksi tụgharịa nke nwere ụzọ abụọ enyere label=value, ma ọ bụ mejuo okwu e nyere mgbe niile.
  • Mgbe ahụ ọ na-eweghachite isi data niile na nchekwa data n'otu oge maka ndị achọtara timeseries_ids.
  • Mgbe nke a gasịrị, nchekwa data na-eme ụfọdụ mgbako na isi data ndị a, dịka arịrịọ onye ọrụ si dị. Ma mgbe nke ahụ gasịrị ọ na-eweghachi azịza.

N'ihe ngosi a, m ga-agwa gị gbasara akụkụ nke mbụ. Nke a bụ ọchụchọ timeseries_ids site na ntụgharị ntụgharị. Ị nwere ike ilele ihe gbasara akụkụ nke abụọ na akụkụ nke atọ ma emechaa Isi mmalite VictoriaMetrics, ma ọ bụ chere ruo mgbe m kwadebere akụkọ ndị ọzọ :)

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Ka anyị gaa n'ihu na ndeksi tụgharịrị. Ọtụtụ nwere ike iche na nke a dị mfe. Ònye maara ihe inverted index bụ na otú o si arụ ọrụ? Oh, ọ bụghị ọtụtụ mmadụ ọzọ. Ka anyị gbalịa ịghọta ihe ọ bụ.

Ọ dị mfe n'ezie. Ọ bụ naanị akwụkwọ ọkọwa okwu na-esetịpụ igodo maka uru. Kedu ihe bụ igodo? Di na nwunye a label=valueebe label и value - ndị a bụ ahịrị. Na ụkpụrụ bụ a set timeseries_ids, nke gụnyere ụzọ enyere label=value.

Ndekọ ntụgharị na-enye gị ohere ịchọta ihe niile ngwa ngwa timeseries_ids, nke nyere label=value.

Ọ na-enye gị ohere ịchọta ngwa ngwa timeseries_ids usoro oge maka ọtụtụ ụzọ abụọ label=value, ma ọ bụ maka ndị di na nwunye label=regexp. Kedu ka nke a si eme? Site na ịchọta nkwụsị nke setịpụ timeseries_ids maka nke ọ bụla ụzọ label=value.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Ka anyị leba anya na mmejuputa iwu dị iche iche nke index tụgharịrị. Ka anyị bido na mmejuputa ihe nfe kacha dị mfe. Ọ dị ka nke a.

ọrụ getMetricIDs na-enweta ndepụta nke eriri. Ahịrị ọ bụla nwere label=value. Ọrụ a na-eweghachite ndepụta metricIDs.

Kedu ka o si arụ ọrụ? N'ebe a, anyị nwere mgbanwe zuru ụwa ọnụ a na-akpọ invertedIndex. Nke a bụ akwụkwọ ọkọwa okwu oge niile (map), nke ga-esetịpụ eriri iji bee ints. Ahịrị nwere label=value.

Mmejuputa ọrụ: nweta metricIDs maka nke mbụ label=value, mgbe ahụ, anyị na-agafe ihe ọ bụla ọzọ label=value, anyị nwetara ya metricIDs maka ha. Ma kpọọ ọrụ ahụ intersectInts, nke a ga-atụle n'okpuru. Na ọrụ a na-eweghachite nkwụsị nke ndepụta ndị a.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Dị ka ị na-ahụ, imejuputa ihe ntụgharị ntụgharị adịghị mgbagwoju anya. Mana nke a bụ mmejuputa atumatu. Kedu ihe ọghọm ọ nwere? Ihe ọghọm dị na mmejuputa atumatu ahụ bụ na a na-echekwa ụdị ntụgharị ntụgharị dị otú ahụ na RAM. Mgbe ịmalitegharịrị ngwa ahụ, anyị na-atụfu ndeksi a. Enweghị nchekwa nke ndeksi a na diski. Ndekọ ndeksi dị otú ahụ enweghị ike ịdị mma maka nchekwa data.

Ihe ndọghachi azụ nke abụọ na-emetụtakwa ebe nchekwa. Ndekọ atụgharịrị ga-adaba na RAM. Ọ bụrụ na ọ gafere nha RAM, mgbe ahụ o doro anya na anyị ga-enweta - pụọ na njehie ebe nchekwa. Na mmemme agaghị arụ ọrụ.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Enwere ike idozi nsogbu a site na iji ihe edozi edozi dị ka Ọkwa DB, ma ọ bụ RocksDB.

Na nkenke, anyị chọrọ nchekwa data nke na-enye anyị ohere ime ọrụ atọ ngwa ngwa.

  • Ọrụ mbụ bụ ndekọ ключ-значение na nchekwa data a. Ọ na-eme nke a ngwa ngwa, ebe ключ-значение bụ ụdọ aka ike.
  • Ọrụ nke abụọ bụ ịchọ ngwa ngwa maka uru site na iji igodo enyere.
  • Na ọrụ nke atọ bụ ngwa ngwa ịchọ ụkpụrụ niile site na prefix nyere.

LevelDB na RocksDB - Google na Facebook mepụtara ọdụ data ndị a. Nke mbụ bịara LevelDB. Mgbe ahụ ụmụ okorobịa si Facebook were LevelDB ma malite imeziwanye ya, ha mere RocksDB. Ugbu a ihe fọrọ nke nta ka ọ bụrụ ọdụ data niile dị n'ime na-arụ ọrụ na RocksDB n'ime Facebook, gụnyere ndị ebufegoro na RocksDB na MySQL. Ha kpọrọ ya aha MyRocks.

Enwere ike iji LevelDB mejuputa ndeksi tụgharịrị. Kedu ka esi eme ya? Anyị na-echekwa dị ka igodo label=value. Na uru bụ njirimara nke usoro oge ebe ụzọ abụọ dị label=value.

Ọ bụrụ na anyị nwere ọtụtụ oge usoro na a nyere ụzọ label=value, mgbe ahụ, a ga-enwe ọtụtụ ahịrị na nchekwa data a nwere otu igodo na dị iche iche timeseries_ids. Iji nweta ndepụta niile timeseries_ids, nke na-amalite na nke a label=prefix, anyị na-eme nyocha nke oke nke emebere nchekwa data a kachasị maka ya. Ya bụ, anyị na-ahọrọ ahịrị niile na-amalite na label=prefix ma nweta ihe dị mkpa timeseries_ids.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Nke a bụ ihe nlele mmejuputa ihe ọ ga-adị na Go. Anyị nwere ntụzịaka atụgharịrị. Nke a bụ LevelDB.

Ọrụ ahụ bụ otu maka mmejuputa ihe efu. Ọ na-emeghachi mmejuputa naive fọrọ nke nta ka ọ bụrụ ahịrị n'ahịrị. Naanị ihe bụ na kama ịtụgharị uche map anyị nweta inverted index. Anyị na-enweta ụkpụrụ niile maka nke mbụ label=value. Mgbe ahụ, anyị na-agafe ụzọ abụọ fọdụrụnụ label=value ma nweta ha metricIDs kwekọrọ. Mgbe ahụ, anyị na-ahụ nkwụsịtụ.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Ihe niile dị ka ọ dị mma, mana enwere ihe ndọghachi azụ na ngwọta a. VictoriaMetrics buru ụzọ mejuputa ndeksi tụgharịrị dabere na LevelDB. Ma n'ikpeazụ m ga-ahapụ ya.

Gịnị kpatara? N'ihi na LevelDB dị nwayọọ karịa mmejuputa iwu. N'ime mmejuputa ihe na-enweghị isi, nyere igodo enyere, anyị na-eweghachite mpekere ahụ ozugbo metricIDs. Nke a bụ ọrụ dị oke ngwa ngwa - iberi dum dị njikere maka ojiji.

Na LevelDB, oge ọ bụla a na-akpọ ọrụ GetValues ịkwesịrị ịgafe ahịrị niile na-amalite label=value. Ma nweta uru maka ahịrị ọ bụla timeseries_ids. Nke dị otú ahụ timeseries_ids na-anakọta a iberi nke ndị a timeseries_ids. N'ụzọ doro anya, nke a dị nnọọ nwayọọ karịa nanị iji igodo iji nweta maapụ oge niile.

Ihe ndọghachi azụ nke abụọ bụ na e dere LevelDB na C. Ịkpọ ọrụ C site na Go adịghị ngwa ngwa. Ọ na-ewe narị nanoseconds. Nke a adịghị ngwa ngwa, n'ihi na e jiri ya tụnyere oku na-arụ ọrụ mgbe niile edere na-aga, nke na-ewe 1-5 nanoseconds, ọdịiche dị na arụmọrụ bụ ugboro iri. Maka VictoriaMetrics nke a bụ ntụpọ na-egbu egbu :)

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

N'ihi ya, m dere mmejuputa iwu nke m nke ntụgharị index. O we kpọ ya ngwakọta.

Mergeset dabere na nhazi data MergeTree. Ebitere usoro data a site na ClickHouse. N'ụzọ doro anya, mergeset kwesịrị ịkwalite maka ịchọ ngwa ngwa timeseries_ids dịka igodo enyere. Edere Mergeset kpamkpam na Go. Ị nwere ike ịhụ Isi mmalite VictoriaMetrics na GitHub. Mmejuputa nke mergeset dị na nchekwa /lib/mergeset. Ị nwere ike ịgbalị ịchọpụta ihe na-eme ebe ahụ.

API mergeset yiri LevelDB na RocksDB. Ya bụ, ọ na-enye gị ohere ịchekwa ndekọ ọhụrụ ngwa ngwa n'ebe ahụ wee họrọ ndekọ ngwa ngwa site na prefix nyere.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Anyị ga-ekwu maka ọghọm dị na njikọta ọnụ ma emechaa. Ugbu a, ka anyị kwuo banyere nsogbu ndị bilitere na VictoriaMetrics na mmepụta mgbe ị na-emejuputa ndezigharị ntụgharị.

Gịnị mere ha ji bilie?

Ihe mbụ kpatara ya bụ ọnụ ọgụgụ dị elu. Asụgharị n'asụsụ Russian, nke a bụ mgbanwe na-emekarị n'usoro oge. Nke a bụ mgbe usoro oge gwụchara wee malite usoro ọhụrụ, ma ọ bụ ọtụtụ usoro oge ọhụrụ ga-amalite. Nke a na-emekwa ọtụtụ mgbe.

Ihe nke abụọ kpatara ya bụ ọnụ ọgụgụ buru ibu nke usoro oge. Na mbido, mgbe nlekota na-enweta ewu ewu, ọnụ ọgụgụ nke usoro oge dị ntakịrị. Dịka ọmụmaatụ, maka kọmpụta ọ bụla ịkwesịrị inyocha CPU, ebe nchekwa, netwọkụ na ibu diski. 4 usoro oge kwa kọmputa. Ka anyị kwuo na ị nwere kọmputa 100 na usoro oge 400. Nke a dị ntakịrị.

Ka oge na-aga, ndị mmadụ achọpụtala na ha nwere ike ịlele ozi granular ọzọ. Dịka ọmụmaatụ, tụọ ibu ọ bụghị nke processor dum, mana iche iche nke isi ihe nrụpụta ọ bụla. Ọ bụrụ na ị nwere cores processor 40, mgbe ahụ ị nwere usoro oge 40 karịa iji tụọ ibu processor.

Ma ọ bụghị naanị nke ahụ. Isi processor ọ bụla nwere ike inwe ọtụtụ steeti, dị ka enweghị ọrụ, mgbe ọ na-adịghị arụ ọrụ. Na-arụkwa ọrụ na oghere onye ọrụ, rụọ ọrụ na oghere kernel na steeti ndị ọzọ. Enwere ike tụọ ọnọdụ nke ọ bụla dị ka usoro oge dị iche iche. Nke a na-abawanye ọnụọgụ nke ahịrị site ugboro 7-8.

Site na otu metric anyị nwetara 40 x 8 = 320 metrics maka naanị otu kọmputa. N'ịba ụba site na 100, anyị na-enweta 32 kama 000.

Mgbe ahụ Kubernetes bịara. Ọ ka njọ n'ihi na Kubernetes nwere ike ịnabata ọtụtụ ọrụ dị iche iche. Ọrụ ọ bụla na Kubernetes nwere ọtụtụ pọd. Na ihe a niile kwesịrị ka a nyochaa. Na mgbakwunye, anyị na-ebunye ụdị ọrụ gị mgbe niile. Maka ụdị ọhụrụ ọ bụla, a ga-emepụta usoro oge ọhụrụ. N'ihi ya, ọnụ ọgụgụ nke usoro oge na-eto eto nke ukwuu na anyị na-eche nsogbu nke ọnụ ọgụgụ dị ukwuu nke usoro oge, nke a na-akpọ high-cardinality. VictoriaMetrics na-anagide ya nke ọma ma e jiri ya tụnyere ọdụ data usoro oge ndị ọzọ.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Ka anyị lebakwuo anya na ọnụ ọgụgụ dị elu. Kedu ihe na-ebute ọnụ ọgụgụ dị elu na mmepụta? N'ihi na ụfọdụ pụtara aha na mkpado na-agbanwe mgbe niile.

Dịka ọmụmaatụ, were Kubernetes, nke nwere echiche deployment, ya bụ mgbe ewepụtara ụdị ngwa ọhụrụ gị. N'ihi ihe ụfọdụ, ndị mmepe Kubernetes kpebiri ịgbakwunye id nke mbughari na labelụ.

Gịnị ka nke a butere? Ọzọkwa, na ntinye ọhụrụ ọ bụla, a na-akwụsị usoro oge ochie niile, ma kama ha, usoro oge ọhụrụ na-amalite site na uru akara ọhụrụ. deployment_id. Enwere ike inwe ọtụtụ narị puku na ọbụna ọtụtụ nde ahịrị ndị dị otú ahụ.

Ihe dị mkpa banyere ihe ndị a niile bụ na ọnụ ọgụgụ nke usoro oge na-eto eto, ma ọnụ ọgụgụ nke usoro oge na-arụ ọrụ ugbu a na ịnweta data na-anọgide na-adịgide adịgide. A na-akpọ steeti a ọnụ ọgụgụ dị elu.

Isi nsogbu nke ọnụ ọgụgụ churn dị elu bụ ịhụ na ọ na-achọ ọsọ ọsọ oge niile maka usoro akara ngosi enyere n'ime oge ụfọdụ. Na-emekarị nke a bụ oge etiti oge maka elekere ikpeazụ ma ọ bụ ụbọchị ikpeazụ.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Kedu ka esi edozi nsogbu a? Nke a bụ nhọrọ mbụ. Nke a bụ iji kewaa ntụzịaka atụgharịrị ka ọ bụrụ akụkụ kwụụrụ onwe ya ka oge na-aga. Ya bụ, oge ụfọdụ na-agafe agafe, anyị na-arụ ọrụ na index inverted dị ugbu a. Ma mepụta ndezigharị atụgharịrị ọhụrụ. Ogologo oge ọzọ na-agafe, anyị na-eke ọzọ na nke ọzọ.

Na mgbe ị na-elele site na indices ndị a tụgharịrị, anyị na-ahụ ndepụta ntụaka tụgharịrị na-adaba n'ime oge enyere. Ma, ya mere, anyị na-ahọrọ id nke usoro oge site n'ebe ahụ.

Nke a na-echekwa akụrụngwa n'ihi na anyị ekwesịghị ilele akụkụ ndị na-adaghị n'ime oge enyere. Nke ahụ bụ, na-emekarị, ọ bụrụ na anyị họrọ data maka elekere ikpeazụ, mgbe ahụ maka oge oge gara aga anyị na-awụpụ arịrịọ.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Enwere nhọrọ ọzọ iji dozie nsogbu a. Nke a bụ iji chekwaa ụbọchị ọ bụla ndepụta ids nke usoro oge dị iche iche mere n'ụbọchị ahụ.

Uru nke ngwọta a karịa ngwọta gara aga bụ na anyị adịghị emepụtaghachi ozi usoro oge nke na-adịghị apụ n'anya ka oge na-aga. Ha na-adị mgbe niile, ha anaghị agbanwe agbanwe.

Ihe ọghọm bụ na ihe ngwọta dị otú ahụ siri ike karị iji mejuputa ma na-esikwu ike imezi ya. Na VictoriaMetrics họọrọ ngwọta a. Otú a ka o si mee n'akụkọ ihe mere eme. Ihe ngwọta a na-arụkwa ọrụ nke ọma ma e jiri ya tụnyere nke gara aga. N'ihi na emebeghị ihe ngwọta a n'ihi eziokwu ahụ bụ na ọ dị mkpa ịmegharị data na nkebi ọ bụla maka usoro oge na-adịghị agbanwe agbanwe, ya bụ nke na-adịghị akwụsị n'oge. VictoriaMetrics bụ nke kachasị maka oriri ohere diski, na mmejuputa iwu gara aga mere ka oriri ohere diski ka njọ. Mana mmejuputa a ka mma maka ibelata ohere ohere diski, yabụ ahọpụtara ya.

Aghaghị m ịlụso ya ọgụ. Mgbagwoju anya bụ na na mmejuputa a ka ị ka kwesịrị ịhọrọ ọnụọgụ buru ibu timeseries_ids n'ihi na data karịa mgbe inverted index bụ oge partitioned.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Olee otú anyị si dozie nsogbu a? Anyị doziri ya n'ụzọ mbụ - site n'ịkwakọba ihe nchọpụta usoro oge dị iche iche n'ime ntinye ndenye ntụgharị ọ bụla kama otu njirimara. Ya bụ, anyị nwere igodo label=value, nke na-eme n'usoro oge ọ bụla. Ma ugbu a, anyị na-azọpụta ọtụtụ timeseries_ids n'otu ntinye.

Nke a bụ ihe atụ. Na mbụ anyị nwere ndenye N, mana ugbu a, anyị nwere otu ntinye nke prefix ya bụ otu ihe ndị ọzọ niile. Maka ntinye gara aga, uru ahụ nwere ids usoro oge niile.

Nke a mere ka o kwe omume ịbawanye ọsọ nyocha nke index tụgharịrị ruo ugboro iri. Ma o kwere ka anyị belata oriri ebe nchekwa maka cache, n'ihi na ugbu a, anyị na-echekwa eriri label=value naanị otu ugboro na cache ọnụ N ugboro. Na ahịrị a nwere ike ibu ibu ma ọ bụrụ na ị na-echekwa ogologo ahịrị na mkpado na akara gị, nke Kubernetes na-enwe mmasị ịkwanye ebe ahụ.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Nhọrọ ọzọ maka ime ngwa ngwa n'ịchọ ihe na ndeksi tụgharịrị bụ sharding. Ịmepụta ọtụtụ ndetu aha tụgharịrị kama otu yana iji igodo kesaa data n'etiti ha. Nke a bụ set key=value uzuoku. Ya bụ, anyị na-enweta ọtụtụ ndetu ntụgharị nke nọọrọ onwe ha, nke anyị nwere ike jụọ ajụjụ n'otu n'otu n'ọtụtụ nhazi. Mmejuputa iwu ndị gara aga kwere ka ịrụ ọrụ n'ụdị otu-processor, ya bụ, nyocha data na naanị otu isi. Ihe ngwọta a na-enye gị ohere inyocha data na ọtụtụ cores n'otu oge, dị ka ClickHouse nwere mmasị ime. Nke a bụ ihe anyị na-eme atụmatụ ime.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Ugbu a, ka anyị laghachi na atụrụ anyị - na ọrụ nkwụsịtụ timeseries_ids. Ka anyị tụlee ihe mmejuputa iwu nwere ike ịbụ. Ọrụ a na-enye gị ohere ịchọta timeseries_ids maka otu setịpụ label=value.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Nhọrọ nke mbụ bụ mmejuputa atumatu. Loops abụọ akwụkwụ. N'ebe a, anyị na-enweta ntinye ọrụ intersectInts iberibe abụọ - a и b. Na mmepụta, ọ kwesịrị ịlaghachikwute anyị na nkwụsị nke mpekere ndị a.

Mmejuputa ihe na-enweghị isi dị ka nke a. Anyị na-enyocha ụkpụrụ niile site na iberi a, N'ime nke a akaghị anyị na-aga site niile ụkpụrụ nke iberi b. Anyị na-atụnyere ha. Ọ bụrụ na ha dakọtara, mgbe ahụ, anyị achọtala njikọ. Ma chekwaa ya n'ime result.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Kedu ihe ọghọm dị? Ihe mgbagwoju anya anọ bụ isi ihe ndọghachi azụ ya. Dịka ọmụmaatụ, ọ bụrụ na akụkụ gị bụ iberi a и b otu nde n'otu oge, ọrụ a agaghị eweghachi gị azịza. N'ihi na ọ ga-adị mkpa ịme otu puku ijeri ugboro ugboro, nke dị ukwuu ọbụna maka kọmputa nke oge a.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Mmejuputa iwu nke abụọ gbadoro ụkwụ na maapụ. Anyị na-emepụta map. Anyị na-etinye ụkpụrụ niile sitere na ibe n'ime maapụ a a. Mgbe ahụ, anyị na-agafe ibe na akaghị iche b. Anyị na-elele ma uru a sitere na iberi b na map. Ọ bụrụ na ọ dị, tinyezie ya na nsonaazụ ya.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Kedu uru ọ bara? Uru ya bụ na enwere naanị mgbagwoju anya ahịrị. Ya bụ, ọrụ ahụ ga-eme ngwa ngwa maka mpekere buru ibu. Maka iberi nha nde, ọrụ a ga-eme n'ime nde iri abụọ, na-emegide nrụgharị trillion nke ọrụ gara aga.

Ihe dị ala bụ na ọrụ a chọrọ ebe nchekwa ka ukwuu iji mepụta maapụ a.

Ihe ndọghachi azụ nke abụọ bụ nnukwu ego maka hashing. Ihe ndọghachi azụ a abụghị ihe doro anya. Na anyị na ọ bụghịkwa nke ukwuu doro anya, ya mere na mbụ na VictoriaMetrics mmejuputa iwu nke intersection bụ site na map. Mana profaịlụ gosipụtara na a na-eji oge isi ihe na-ede na maapụ ma lelee ọnụnọ nke uru na maapụ a.

Gịnị kpatara na oge CPU na-ala n'iyi n'ebe ndị a? N'ihi na Go na-arụ ọrụ hashing n'ahịrị ndị a. Ya bụ, ọ na-agbakọ hash nke igodo ahụ ka ị nweta ya na ndeksi enyere na HashMap. A na-arụ ọrụ mgbako hash n'ime iri iri nanoseconds. Nke a dị nwayọ maka VictoriaMetrics.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Ekpebiri m imejuputa bitset kachasị mma maka ikpe a. Nke a bụ ihe njikọ nke mpekere abụọ dị ugbu a dị ka. N'ebe a, anyị na-emepụta bitset. Anyị na-agbakwunye ihe ndị sitere na iberi mbụ na ya. Mgbe ahụ, anyị na-elele ọnụnọ nke ihe ndị a na ibe nke abụọ. Ma tinye ha na nsonaazụ ya. Ya bụ, ọ fọrọ nke nta ka ọ dị iche na ihe atụ gara aga. Naanị ihe dị ebe a bụ na anyị jiri ọrụ omenala dochie ohere ịnweta maapụ add и has.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

N'ileghachi anya na mbụ, ọ dị ka nke a kwesịrị ịrụ ọrụ nwayọọ nwayọọ, ma ọ bụrụ na a na-eji map ọkọlọtọ mee ihe n'ebe ahụ, mgbe ahụ, a na-akpọ ụfọdụ ọrụ ndị ọzọ, ma profaịlụ na-egosi na ihe a na-arụ ọrụ ugboro 10 ngwa ngwa karịa map ọkọlọtọ n'ihe banyere VictoriaMetrics.

Na mgbakwunye, ọ na-eji ebe nchekwa dị obere ma e jiri ya tụnyere mmejuputa map. N'ihi na anyị na-echekwa ibe n'ibe ebe a kama ụkpụrụ asatọ-byte.

Ihe ọghọm nke mmejuputa a bụ na ọ bụghị ihe doro anya, ọ bụghị obere ihe.

Ihe ndọghachi azụ ọzọ nke ọtụtụ ndị nwere ike ọ gaghị achọpụta bụ na mmejuputa a nwere ike ọ gaghị arụ ọrụ nke ọma n'ọnọdụ ụfọdụ. Ya bụ, a na-ahazi ya maka otu okwu, maka nke a nke njikọ nke oge VictoriaMetrics ids. Nke a apụtaghị na ọ dabara maka ikpe niile. Ọ bụrụ na ejiri ya na-ezighi ezi, anyị agaghị enweta mmụba arụmọrụ, mana njehie na-enweghị ebe nchekwa yana mbelata arụmọrụ.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Ka anyị tụlee mmejuputa atumatu a. Ọ bụrụ na ịchọrọ ile anya, ọ dị na isi mmalite VictoriaMetrics, na nchekwa lib/uint64set. A na-ahazi ya nke ọma maka ikpe VictoriaMetrics, ebe timeseries_id bụ uru 64-bit, ebe 32 ibe n'ibe mbụ na-agbanwe agbanwe na naanị 32 ibe n'ibe ikpeazụ na-agbanwe.

A naghị echekwa usoro data a na diski, ọ na-arụ ọrụ naanị na ebe nchekwa.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Nke a bụ API ya. Ọ bụghị ihe mgbagwoju anya. Emebere API ahụ kpọmkwem ka ọ bụrụ ihe atụ akọwapụtara nke iji VictoriaMetrics. Ya bụ, ọ dịghị ọrụ na-adịghị mkpa ebe a. Nke a bụ ọrụ VictoriaMetrics na-eji nke ọma.

Enwere ọrụ add, nke na-agbakwụnye ụkpụrụ ọhụrụ. Enwere ọrụ has, nke na-enyocha ụkpụrụ ọhụrụ. Ma enwere ọrụ del, nke na-ewepụ ụkpụrụ. Enwere ọrụ inyeaka len, nke na-eweghachi nha nke setịpụrụ. Ọrụ clone clones ọtụtụ. Na ọrụ appendto na-atụgharị ntọala a ka ọ bụrụ iberi timeseries_ids.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Nke a bụ ihe mmejuputa usoro data a dị ka. set nwere ihe abụọ:

  • ItemsCount bụ mpaghara enyemaka iji weghachi ọnụ ọgụgụ nke ihe dị na setịpụ ngwa ngwa. Ọ ga-ekwe omume ịme na-enweghị mpaghara inyeaka a, mana a ga-agbakwunye ya ebe a n'ihi na VictoriaMetrics na-ajụkarị ogologo bitset na algọridim ya.

  • Ugbo nke abụọ bụ buckets. Nke a bụ iberi site na nhazi ahụ bucket32. Ihe owuwu ọ bụla na-echekwa hi ubi. Ndị a bụ ibe 32 nke elu. Na mpekere abụọ - b16his и buckets si bucket16 ihe owuwu.

A na-echekwa ibe 16 kacha elu nke akụkụ nke abụọ nke usoro 64-bit ebe a. Ebe a na-echekwa bitsets maka obere 16 bit nke ọ bụla byte.

Bucket64 mejupụtara n'usoro uint64. A na-agbakọ ogologo oge site na iji ihe ndị a. Na otu bucket16 enwere ike ịchekwa kacha 2^16=65536 bit. Ọ bụrụ na ị kewaa nke a site na 8, mgbe ahụ ọ bụ 8 kilobytes. Ọ bụrụ na ị kewaa 8 ọzọ, ọ bụ 1000 uint64 pụtara. Ya bụ Bucket16 – Nke a bụ usoro 8-kilobyte anyị.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Ka anyị leba anya ka otu n'ime ụzọ nke usoro a maka ịgbakwunye uru ọhụrụ si emejuputa.

Ihe niile na-amalite na uint64 pụtara. Anyị na-agbakọ nke elu 32 ibe n'ibe, anyị gbakọọ ala 32-bit. Ka anyị gafee ihe niile buckets. Anyị na-atụnyere ibe n'elu 32 n'ime bọket ọ bụla na uru a na-agbakwunye. Ma ọ bụrụ na ha dakọtara, mgbe ahụ anyị na-akpọ ọrụ ahụ add n'usoro b32 buckets. Ma tinye obere 32 ibe n'ebe ahụ. Ma ọ bụrụ na ọ laghachiri true, mgbe ahụ, nke a pụtara na anyị gbakwunyere uru dị otú ahụ n'ebe ahụ ma anyị enweghị uru dị otú ahụ. Ọ bụrụ na ọ laghachi azụ false, mgbe ahụ nkọwa dị otú ahụ adịlarị. Mgbe ahụ, anyị na-abawanye ọnụ ọgụgụ nke ihe dị na nhazi ahụ.

Ọ bụrụ na anyị ahụghị nke ị chọrọ bucket na mkpa hi-uru, mgbe ahụ anyị na-akpọ ọrụ addAlloc, nke ga-emepụta nke ọhụrụ bucket, na-agbakwunye ya na nhazi nke ịwụ.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Nke a bụ mmejuputa ọrụ ahụ b32.add. Ọ dị ka mmejuputa atumatu gara aga. Anyị na-agbakọ 16 ibe n'ibe kacha mkpa, nke kacha nta 16 bits.

Mgbe ahụ, anyị na-aga site na niile elu 16 ibe n'ibe. Anyị na-ahụ ọkụ. Ma ọ bụrụ na enwere egwuregwu, anyị na-akpọ usoro mgbakwunye, nke anyị ga-atụle na ibe na-esote bucket16.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Na ebe a bụ ọkwa kachasị ala, nke kwesịrị ịkwalite dị ka o kwere mee. Anyị na-agbakọ maka uint64 uru id na iberi ibe yana kwa bitmask. Nke a bụ ihe nkpuchi maka uru 64-bit enyere, nke enwere ike iji lelee ọnụnọ nke ntakịrị a, ma ọ bụ tọọ ya. Anyị na-eleba anya ịhụ ma edobere ntakịrị a ma tọọ ya, wee laghachi ọnụnọ. Nke a bụ mmejuputa iwu anyị, nke nyere anyị ohere ime ka ọrụ nke intersecting ids nke usoro oge dị ngwa site na ugboro iri ma e jiri ya tụnyere maapụ ndị a na-ahụkarị.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Na mgbakwunye na njikarịcha a, VictoriaMetrics nwere ọtụtụ njikarịcha ndị ọzọ. Ọtụtụ n'ime njikarịcha ndị a agbakwunyere maka ihe kpatara ya, mana mgbe emechara koodu ahụ na mmepụta.

Nke a bụ isi iwu nke njikarịcha - agbakwunyela njikarịcha na-eche na a ga-enwe nkụchi ebe a, n'ihi na ọ nwere ike pụta na ọ gaghị enwe ihe mgbochi ebe ahụ. Njikarịrị na-emebikarị ogo koodu. Ya mere, ọ bara uru ịkwalite naanị mgbe profaịlụ na ọkacha mma na mmepụta, nke mere na nke a bụ ezigbo data. Ọ bụrụ na onye ọ bụla nwere mmasị, ị nwere ike lelee koodu isi iyi VictoriaMetrics wee chọpụta njikarịcha ndị ọzọ dị ebe ahụ.

Gaa nkwalite na VictoriaMetrics. Alexander Valyakin

Enwere m ajụjụ gbasara bitset. Yiri nnọọ ka mmejuputa vector bool C++, nke kachasị bitset. Ị si ebe ahụ wepụta mmemme ahụ?

Mba, ọ bụghị site n'ebe ahụ. Mgbe m na-emejuputa bitset a, ihe ọmụma gbasara usoro nke usoro oge ids ndị a na-eduzi na VictoriaMetrics. Na usoro ha bụ nke na ibe 32 nke elu na-adịgide adịgide. Obere 32 bit nwere ike ịgbanwe. Na obere ntakịrị, ka ọ na-enwekarị ike ịgbanwe. Ya mere, a na-ahazi mmejuputa a kapịrị ọnụ maka nhazi data a. Mmejuputa C ++, dị ka m maara, bụ nke kachasị maka ikpe izugbe. Ọ bụrụ na ị na-ebuli maka ikpe izugbe, nke a pụtara na ọ gaghị abụ ihe kachasị mma maka otu ikpe.

M na-adụ ọdụ ka ị na-ekiri akụkọ Alexey Milovid. Ihe dị ka otu ọnwa gara aga, o kwuru banyere njikarịcha na ClickHouse maka ọkachamara pụrụ iche. Ọ na-ekwu naanị na n'ozuzu, a na-ahazi C ++ ma ọ bụ mmejuputa ọzọ ka ọ rụọ ọrụ nke ọma na nkezi n'ụlọ ọgwụ. Ọ nwere ike ịrụ ọrụ dị njọ karịa mmejuputa ihe ọmụma akọwapụtara dị ka nke anyị, ebe anyị maara na ibe 32 kacha elu na-abụkarị mgbe niile.

Enwere m ajụjụ nke abụọ. Kedu ihe bụ isi ihe dị iche na InfluxDB?

E nwere ọtụtụ isi ihe dị iche. N'ihe gbasara arụmọrụ na oriri ebe nchekwa, InfluxDB na ule na-egosi 10 ugboro ugboro oriri ebe nchekwa maka usoro oge cardinality dị elu, mgbe ị nwere ọtụtụ n'ime ha, dịka ọmụmaatụ, ọtụtụ nde. Dịka ọmụmaatụ, VictoriaMetrics na-eri 1 GB kwa nde ahịrị na-arụ ọrụ, ebe InfluxDB na-eri 10 GB. Na nke ahụ bụ nnukwu ọdịiche.

Ọdịiche dị mkpa nke abụọ bụ na InfluxDB nwere asụsụ ajụjụ dị iche - Flux na InfluxQL. Ha na-adịghị nnọọ adaba n'ihi na-arụ ọrụ na oge usoro tụnyere PromQL, nke VictoriaMetrics na-akwado. PromQL bụ asụsụ ajụjụ sitere na Prometheus.

Otu ihe dị iche bụ na InfluxDB nwere ụdị data dịtụ iche, ebe ahịrị ọ bụla nwere ike ịchekwa ọtụtụ ubi nwere mkpado dị iche. A na-ekekwa ahịrị ndị a gaa na tebụl dị iche iche. Nsogbu ndị a agbakwunyere na-akpaghasị ọrụ na-esote na nchekwa data a. O siri ike ịkwado na ịghọta.

Na VictoriaMetrics ihe niile dị mfe karị. N'ebe ahụ, usoro oge ọ bụla bụ isi-uru. Uru ya bụ isi ihe - (timestamp, value), na isi ihe bụ set label=value. Enweghị nkewa n'etiti mpaghara na nha. Ọ na-enye gị ohere ịhọrọ data ọ bụla wee jikọta, gbakwunye, wepụ, mụbaa, kewaa, n'adịghị ka InfluxDB ebe a na-emejuputa ngụkọ n'etiti ahịrị dị iche iche dịka m maara. Ọbụlagodi na etinyere ha, ọ siri ike, ị ga-ede ọtụtụ koodu.

Enwere m ajụjụ na-edo anya. Aghọtara m nke ọma na enwere ụdị nsogbu ị na-ekwu maka ya, na ndetu a tụgharịrị adabaghị na ebe nchekwa, yabụ enwere ikewa ebe ahụ?

Nke mbu, egosiri m mmejuputa ihe nleba anya nke index gbaghariri na maapụ Go ọkọlọtọ. Mmejuputa iwu a adabaghị maka ọdụ data n'ihi na echekwaghị index a tụgharịrị na diski, yana nchekwa data ga-echekwa na diski ka data a wee dịrị ma malitegharịa. Na mmejuputa atumatu, mgbe ibidogharia ngwa a, ndenye aha atụgharị ga-apụ n'anya. Ị ga-atụfu ohere ịnweta data niile n'ihi na ị gaghị enwe ike ịchọta ya.

Nnọọ! Daalụ maka akụkọ ahụ! Aha m bụ Pavel. Esi m Wildberries. Enwere m ajụjụ ole na ole maka gị. Ajụjụ nke mbụ. Ị chere na ọ bụrụ na ị họrọla ụkpụrụ dị iche mgbe ị na-ewu ụlọ nke ngwa gị wee kewaa data ahụ ka oge na-aga, mgbe ahụ ikekwe ị gaara enwe ike ịmekọrịta data mgbe ị na-achọ, dabere naanị na otu akụkụ nwere data maka otu. oge , ya bụ, n'otu oge etiti oge na ị gaghị echegbu onwe gị banyere eziokwu ahụ bụ na mpempe akwụkwọ gị na-agbasasị iche? Nọmba ajụjụ 2 - ebe ị na-emejuputa algọridim yiri ya na bitset na ihe ọ bụla ọzọ, mgbe ahụ ị nwara iji ntuziaka nhazi? Ma eleghị anya, ị nwara ụdị nkwalite ahụ?

Aga m aza nke abụọ ozugbo. Anyị erubeghị ebe ahụ. Ma ọ bụrụ na ọ dị mkpa, anyị ga-eru ebe ahụ. Na nke mbụ, gịnị bụ ajụjụ?

Ị tụlere ihe atụ abụọ. Ma ha kwuru na ha họọrọ nke abụọ nke nwere mgbagwoju anya mmejuputa iwu. Ma ha ahọrọghị nke mbụ, ebe a na-ekewa data site na oge.

Ee. N'okwu nke mbụ, ọnụ ọgụgụ zuru ezu nke index ga-ebuwanye ibu, n'ihi na na nkebi ọ bụla anyị ga-echekwa data oyiri maka usoro oge ndị ahụ na-aga n'ihu na nkebi ndị a niile. Ma ọ bụrụ na ọnụ ọgụgụ churn usoro oge gị dị ntakịrị, ya bụ, a na-eji otu usoro ahụ eme ihe mgbe niile, mgbe ahụ na nke mbụ anyị ga-atụfu ọtụtụ ihe na ọnụ ọgụgụ nke ohere diski ma e jiri ya tụnyere nke abụọ.

Ya mere - ee, nkewa oge bụ nhọrọ dị mma. Prometheus na-eji ya. Ma Prometheus nwere ihe ndọghachi azụ ọzọ. Mgbe ị na-ejikọta ibe data ndị a, ọ kwesịrị idowe ozi meta nke ebe nchekwa maka aha na usoro oge niile. Ya mere, ọ bụrụ na iberibe data ọ na-ejikọta buru ibu, mgbe ahụ oriri ebe nchekwa na-abawanye nke ukwuu n'oge njikọta, n'adịghị ka VictoriaMetrics. Mgbe ị na-ejikọta, VictoriaMetrics anaghị eri ebe nchekwa ma ọlị; ọ bụ naanị kilobytes ole na ole ka a na-eri, n'agbanyeghị nha nke data jikọtara ọnụ.

Algọridim ị na-eji na-eji ebe nchekwa. Ọ na-aka akara mkpado usoro oge nwere ụkpụrụ. N'ụzọ dị otú a, ị na-elele ọnụnọ jikọtara ọnụ na otu data n'usoro yana ọzọ. Ị ghọtara ma intersect mere ma ọ bụ na ọ bụghị. Dịka, ọdụ data na-arụ ọrụ cursors na ndị na-emegharị ihe na-echekwa ọdịnaya ha dị ugbu a ma na-agba ọsọ site na data ahaziri n'ihi mgbagwoju anya dị mfe nke ọrụ ndị a.

Gịnị kpatara na anyị anaghị eji cursors gafere data?

Ee.

Anyị na-echekwa ahịrị ahịrị na LevelDB ma ọ bụ mergeset. Anyị nwere ike ibugharị cursor wee chọta njikọ. Gịnị kpatara na anyị anaghị eji ya? N'ihi na ọ dị nwayọọ. N'ihi na cursors pụtara na ịkwesịrị ịkpọ ọrụ maka ahịrị ọ bụla. Oku ọrụ bụ 5 nanoseconds. Ma ọ bụrụ na ị nwere ahịrị 100, mgbe ahụ ọ na-apụta na anyị na-eji ọkara nke abụọ na-akpọ ọrụ ahụ.

Enwere ihe dị otú ahụ, ee. Na ajụjụ ikpeazụ m. Ajụjụ ahụ nwere ike ịdịtụ ntakịrị. Kedu ihe kpatara na ọ gaghị ekwe omume ịgụ mkpokọta niile dị mkpa n'oge data rutere wee chekwaa ha n'ụdị achọrọ? Kedu ihe kpatara ịchekwa nnukwu mpịakọta na ụfọdụ sistemụ dị ka VictoriaMetrics, ClickHouse, wdg, wee na-etinye oge dị ukwuu na ha?

M ga-enye ihe atụ iji mee ka ọ dokwuo anya. Ka anyị kwuo kedu ka obere ọsọ ọsọ egwuregwu ụmụaka si arụ ọrụ? Ọ na-edekọ anya ị gara, na-agbakwunye ya mgbe niile na otu uru, na nke abụọ - oge. Na nkewa. Na-enweta nkezi ọsọ. Ị nwere ike ime otu ihe ahụ. Tinye ihe niile dị mkpa na ofufe.

Ọ dị mma, aghọtara m ajụjụ a. Ihe atụ gị nwere ọnọdụ ya. Ọ bụrụ na ị maara ihe aggregates ị chọrọ, mgbe ahụ nke a bụ kacha mma mmejuputa iwu. Mana nsogbu bụ na ndị mmadụ na-echekwa metrics ndị a, ụfọdụ data na ClickHouse na ha amabeghị ka ha ga-esi chịkọta ma na-enyocha ha n'ọdịnihu, yabụ na ha ga-echekwa data niile nke raw. Ma ọ bụrụ na ị maara na ịkwesịrị ịgbakọ ihe na nkezi, gịnị kpatara na ị gaghị agbakọ ya kama ịchekwa ụyọkọ nke ụkpụrụ dị n'ebe ahụ? Ma nke a bụ naanị ma ọ bụrụ na ị maara kpọmkwem ihe ị chọrọ.

Site n'ụzọ, ọdụ data maka ịchekwa usoro oge na-akwado ọnụ ọgụgụ nchịkọta. Dịka ọmụmaatụ, Prometheus na-akwado iwu ndekọ. Ya bụ, nke a nwere ike ime ma ọ bụrụ na ị maara ihe nkeji ị ga-achọ. VictoriaMetrics enwebeghị nke a, mana Prometheus na-ebutekarị ya, nke enwere ike ime nke a na iwu ngbanwe.

Dịka ọmụmaatụ, na ọrụ gara aga, ọ dị mkpa ịgụta ọnụ ọgụgụ nke ihe omume na windo na-amị amị n'ime awa ikpeazụ. Nsogbu bụ na m ga-emepụta mmejuputa omenala na Go, ya bụ ọrụ maka ịgụta ihe a. Ọrụ a mechara bụrụ ihe na-adịghị mkpa, n'ihi na ọ siri ike ịgbakọ. Mmejuputa iwu a nwere ike ịdị mfe ma ọ bụrụ na ịchọrọ ịgụta mkpokọta ụfọdụ n'oge oge a kara aka. Ọ bụrụ na ịchọrọ ịgụta ihe omume na windo na-amị amị, mgbe ahụ ọ dịghị mfe dịka o siri dị. Echere m na emebebeghị nke a na ClickHouse ma ọ bụ na ọdụ data usoro oge, n'ihi na ọ siri ike itinye ya.

Na otu ajụjụ ọzọ. Naanị ihe anyị na-ekwu maka nkezi, echetara m na enwere otu ihe dị ka Graphite nwere Carbon backend. Ma ọ maara otú e si mkpa si ochie data, ya bụ, hapụ otu isi kwa nkeji, otu isi kwa awa, wdg. N'ụkpụrụ, nke a bụ nnọọ adaba ma ọ bụrụ na anyị chọrọ raw data, dịtụ ikwu okwu, otu ọnwa, na ihe ọ bụla ọzọ nwere ike. bụrụ nke siri ike . Mana Prometheus na VictoriaMetrics anaghị akwado ọrụ a. Ọ na-eme atụmatụ ịkwado ya? Ọ bụrụ na ọ bụghị, gịnị kpatara na ọ bụghị?

Daalụ maka ajụjụ a. Ndị ọrụ anyị na-ajụ ajụjụ a kwa oge. Ha na-ajụ mgbe anyị ga-agbakwunye nkwado maka downsampling. Enwere ọtụtụ nsogbu ebe a. Nke mbụ, onye ọrụ ọ bụla ghọtara downsampling ihe dị iche iche: onye chọrọ inweta ihe ọ bụla aka ike n'ókè na a nyere etiti oge, onye chọrọ kacha, kacha nta, nkezi ụkpụrụ. Ọ bụrụ na ọtụtụ sistemụ na-ede data na nchekwa data gị, ị nweghị ike ikpokọta ya niile. Ọ nwere ike ịbụ na usoro ọ bụla chọrọ mkpa dị iche iche. Na nke a siri ike ime.

Ihe nke abụọ bụ na VictoriaMetrics, dị ka ClickHouse, bụ nke kachasị maka ịrụ ọrụ na nnukwu data raw data, ya mere ọ nwere ike sụọ otu ijeri ahịrị n'ime ihe na-erughị otu sekọnd ma ọ bụrụ na ị nwere ọtụtụ cores na sistemụ gị. Ịnyocha usoro usoro oge na VictoriaMetrics - 50 isi kwa nkeji kwa nkeji. Na arụmọrụ a na-adaba na cores dị ugbu a. Ya bụ, ọ bụrụ na ị nwere cores 000, dịka ọmụmaatụ, ị ga-enyocha ihe ruru ijeri ijeri kwa nkeji. Ihe onwunwe a nke VictoriaMetrics na ClickHouse na-ebelata mkpa nke downsamling.

Akụkụ ọzọ bụ na VictoriaMetrics na-akpakọ data a nke ọma. Mkpakọ na nkezi na mmepụta sitere na 0,4 ruo 0,8 bytes kwa isi. Ebe ọ bụla bụ akara oge + uru. A na-agbakọkwa ya n'ihe na-erughị otu byte na nkezi.

Sergey. Enwere m ajụjụ. Gịnị bụ kacha nta ndekọ oge quantum?

Otu millisekọnd. Anyị na ndị nrụpụta nchekwa data usoro oge ndị ọzọ nwere mkparịta ụka na nso nso a. Ogologo oge ha kacha nta bụ otu nkeji. Na Graphite, dịka ọmụmaatụ, ọ bụkwa otu sekọnd. Na OpenTSDB ọ bụkwa otu sekọnd. InfluxDB nwere nkenke nanosecond. Na VictoriaMetrics ọ bụ otu millisecond, n'ihi na na Prometheus ọ bụ otu millisecond. Na mbụ VictoriaMetrics ka emebere dị ka ebe nchekwa dịpụrụ adịpụ maka Prometheus. Mana ugbu a ọ nwere ike ịchekwa data sitere na sistemụ ndị ọzọ.

Onye ahụ m gwara okwu na-ekwu na ha nwere izi ezi nke abụọ ruo nke abụọ - nke ahụ ezuola ha maka na ọ dabere n'ụdị data a na-echekwa na nchekwa data usoro oge. Ọ bụrụ na nke a bụ data DevOps ma ọ bụ data sitere na akụrụngwa, ebe ị na-anakọta ya na nkeji nke 30 sekọnd, kwa nkeji, mgbe ahụ izi ezi nke abụọ ezuru, ị chọghị ihe ọ bụla. Ma ọ bụrụ na ịnakọta data a site na sistemụ azụmaahịa dị elu, mgbe ahụ ị ga-achọ izi ezi nanosecond.

Izi ezi Millisecond na VictoriaMetrics dịkwa mma maka ikpe DevOps, ọ nwekwara ike dabara maka ọtụtụ ikpe m kwuru na mbido akụkọ a. Naanị ihe ọ nwere ike ọ gaghị adabara bụ usoro ịzụ ahịa ugboro ugboro.

Daalụ! Na ajụjụ ọzọ. Gịnị bụ ndakọrịta na PromQL?

Ndakọrịta azụ zuru oke. VictoriaMetrics na-akwado PromQL nke ọma. Na mgbakwunye, ọ na-agbakwunye ọrụ ndị ọzọ dị elu na PromQL, nke a na-akpọ MetricsQL. Enwere okwu na YouTube gbasara ọrụ a gbatịrị agbatị. Ekwuru m okwu na Nlebaanya Nzute n'oge opupu ihe ubi na St. Petersburg.

Telegram ọwa VictoriaMetrics.

Naanị ndị ọrụ edebanyere aha nwere ike isonye na nyocha a. banye, Biko.

Kedu ihe na-egbochi gị ịtụgharị na VictoriaMetrics dị ka nchekwa ogologo oge maka Prometheus? (Dee na nkwupụta, m ga-agbakwunye ya na ntuli aka))

  • 71,4%Anaghị m eji Prometheus5

  • 28,6%Amaghị maka VictoriaMetrics2

Ndị ọrụ 7 tụrụ vootu. Ndị ọrụ 12 anabataghị.

isi: www.habr.com

Tinye a comment