Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Manoro hevitra anao aho hamaky ny transcript ny tatitra farany tamin'ny taona 2019 nataon'i Alexander Valyalkin "Mandehana optimizations in VictoriaMetrics"

VictoriaMetrics - DBMS haingana sy azo esorina amin'ny fitahirizana sy fanodinana angon-drakitra amin'ny endrika andian-potoana (ny firaketana dia mamorona fotoana sy soatoavina mifanandrify amin'io fotoana io, ohatra, azo avy amin'ny fitsapan-kevitra ara-potoana momba ny satan'ny sensor na fanangonana ny metrika).

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Ity misy rohy mankany amin'ny lahatsarin'ity tatitra ity - https://youtu.be/MZ5P21j_HLE

-tsary

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Lazao anay ny momba anao. Izaho no Alexander Valyalkin. Eto ny kaontiko GitHub. Tena tiako ny Go sy ny fanatsarana ny fampisehoana. Nanoratra tranomboky mahasoa sy tsy dia ilaina loatra aho. Manomboka amin'ny iray izy ireo fast, na miaraka amin'ny quick tovana.

Miasa amin'ny VictoriaMetrics aho izao. Inona izany ary inona no ataoko any? Hiresaka momba izany aho amin'ity famelabelarana ity.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Ny drafitry ny tatitra dia toy izao manaraka izao:

  • Voalohany, holazaiko aminao ny atao hoe VictoriaMetrics.
  • Avy eo dia holazaiko anao hoe inona ny andiam-potoana.
  • Avy eo dia holazaiko aminao ny fomba fiasan'ny angon-drakitra andiam-potoana.
  • Manaraka, holazaiko aminao ny momba ny maritrano angon-drakitra: inona no ao anatiny.
  • Ary avy eo andao hiroso amin'ny fanatsarana izay ananan'i VictoriaMetrics. Ity dia fanatsarana ho an'ny tondro mivadika sy fanatsarana ny fampiharana bitset ao amin'ny Go.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Misy mahafantatra ve ny atao hoe VictoriaMetrics? Oay, efa betsaka ny olona mahalala. Vaovao mahafaly izany. Ho an'ireo izay tsy mahafantatra, ity dia angon-drakitra andiam-potoana. Izy io dia mifototra amin'ny maritrano ClickHouse, amin'ny antsipiriany sasany momba ny fampiharana ClickHouse. Ohatra, amin'ny toy ny: MergeTree, kajy parallèle amin'ireo cores misy processeur rehetra ary fanatsarana ny fampandehanana amin'ny alàlan'ny fiasana amin'ny sakana data izay napetraka ao amin'ny cache processeur.

Ny VictoriaMetrics dia manome famatrarana angon-drakitra tsara kokoa noho ny angona andiam-potoana hafa.

Mizana mitsangana - izany hoe, afaka manampy processeur bebe kokoa, RAM bebe kokoa amin'ny solosaina iray. Ny VictoriaMetrics dia hampiasa amim-pahombiazana ireo loharanon-karena misy ireo ary hanatsara ny famokarana tsipika.

Ny VictoriaMetrics koa dia mizana mitsivalana - izany hoe, azonao atao ny manampy node fanampiny amin'ny kluster VictoriaMetrics, ary hitombo saika tsipika ny fahombiazany.

Araka ny noeritreretinao, VictoriaMetrics dia angona haingana, satria tsy afaka manoratra ny hafa aho. Ary voasoratra ao amin'ny Go, ka miresaka momba izany aho amin'ity fihaonana ity.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Iza no mahalala ny atao hoe andian-potoana? Mahalala olona maro koa izy. Ny andiam-potoana dia andiana tsiroaroa (timestamp, значение), izay alahatra araka ny fotoana ireo tsiroaroa ireo. Ny sanda dia isa mitsingevana - float64.

Ny andiam-potoana tsirairay dia fantatra amin'ny alalan'ny fanalahidy iray. Inona no ao anatin'io fanalahidy io? Izy io dia ahitana andiana mpivady manan-danja tsy misy banga.

Ity misy ohatra amin'ny andian-potoana. Ny fanalahidin'ity andiany ity dia lisitry ny tsiroaroa: __name__="cpu_usage" dia ny anaran'ny metric, instance="my-server" - ity no solosaina anangonana ity metrika ity, datacenter="us-east" - io no ivon-toerana misy an'io solosaina io.

Niafara tamin'ny anaran'ny andian-potoana ahitana mpivady manandanja telo izahay. Ity famaha ity dia mifanitsy amin'ny lisitry ny tsiroaroa (timestamp, value). t1, t3, t3, ..., tN - famantarana famantaranandro ireo, 10, 20, 12, ..., 15 - ny soatoavina mifanandrify. Ity ny fampiasana cpu amin'ny fotoana iray ho an'ny laharana iray.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Aiza no azo ampiasana andiam-potoana? Misy manana hevitra ve?

  • Ao amin'ny DevOps, azonao atao ny mandrefy CPU, RAM, tambajotra, rps, isan'ny lesoka, sns.
  • IoT - afaka mandrefy mari-pana, tsindry, fandrindrana geo ary zavatra hafa isika.
  • Ara-bola ihany koa - afaka manara-maso ny vidin'ny karazana tahiry sy vola rehetra isika.
  • Ho fanampin'izany, ny andian-potoana dia azo ampiasaina amin'ny fanaraha-maso ny fizotran'ny famokarana any amin'ny orinasa. Manana mpampiasa mampiasa VictoriaMetrics izahay hanaraha-maso ny turbin-drivotra, ho an'ny robots.
  • Ny andiam-potoana koa dia ilaina amin'ny fanangonana vaovao avy amin'ny sensor amin'ny fitaovana isan-karazany. Ohatra, ho an'ny motera; ho fandrefesana ny tsindry pneu; ho fandrefesana ny hafainganam-pandeha, halavirana; ho fandrefesana ny fanjifana solika sns.
  • Azo ampiasaina hanaraha-maso ny fiaramanidina ihany koa ny andiam-potoana. Ny fiaramanidina tsirairay dia manana boaty mainty izay manangona andiam-potoana ho an'ny masontsivana isan-karazany amin'ny fahasalaman'ny fiaramanidina. Ny andiam-potoana koa dia ampiasaina amin'ny indostrian'ny aerospace.
  • Ny fitsaboana dia ny tosidra, ny fo, sns.

Mety ho maro kokoa ny fampiharana adinoko, saingy manantena aho fa azonao fa ny andiam-potoana dia ampiasaina mavitrika amin'ny tontolo maoderina. Ary mitombo isan-taona ny habetsahan'ny fampiasana azy ireo.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Nahoana ianao no mila angon-drakitra andiam-potoana? Nahoana ianao no tsy afaka mampiasa angon-drakitra ara-pifandraisana mahazatra hitahiry andiam-potoana?

Satria mazàna no ahitana fampahalalana be dia be ny andiam-potoana, izay sarotra ny mitahiry sy manodina ao anaty tahiry mahazatra. Noho izany, nipoitra ny angon-drakitra manokana momba ny andiam-potoana. Mitahiry teboka tsara ireo fototra ireo (timestamp, value) miaraka amin'ny fanalahidy nomena. Manome API izy ireo mba hamakiana ny angona voatahiry amin'ny alalan'ny fanalahidy, amin'ny mpivady sanda manan-danja tokana, na amin'ny mpivady sanda manan-danja maromaro, na amin'ny regexp. Ohatra, te-hahita ny enta-mavesatra CPU amin'ny serivisy rehetra ianao ao amin'ny foibe data any Amerika, dia mila mampiasa ity pseudo-query ity ianao.

Matetika ny angon-drakitra andiam-potoana dia manome tenim-panontaniana manokana satria tsy mifanentana tsara ny SQL andiam-potoana. Na dia misy aza ny angon-drakitra manohana ny SQL dia tsy mety loatra. Fanontaniana fiteny toy ny PromQL, InfluxQL, mikoriana, Q. Manantena aho fa nisy olona nandre, fara fahakeliny, ny iray amin'ireo fiteny ireo. Maro ny olona efa nandre momba ny PromQL. Ity no fiteny fangatahana Prometheus.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Toy izao ny endriky ny maritrano angon-drakitra andiam-potoana maoderina amin'ny fampiasana VictoriaMetrics ho ohatra.

Misy ampahany roa izy io. Izany dia fitehirizana ho an'ny fanondroana mivadika sy fitehirizana ireo sanda andiam-potoana. Misaraka ireo repository ireo.

Rehefa misy rakitsoratra vaovao tonga ao amin'ny angon-drakitra, dia miditra voalohany amin'ny tondro mivadika isika mba hahitana ny famantarana andiam-potoana ho an'ny andiany iray. label=value ho an'ny metrika iray nomena. Hitanay io famantarana io ary tehirizinay ao amin'ny fitehirizana angona ny sandany.

Rehefa tonga ny fangatahana haka angon-drakitra avy amin'ny TSDB dia mankany amin'ny index inverted aloha isika. Andao ho azo ny zava-drehetra timeseries_ids rakitsoratra mifanaraka amin'ity andiany ity label=value. Ary avy eo dia mahazo ny angon-drakitra ilaina rehetra avy amin'ny trano fanatobiana data, indexed by timeseries_ids.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Andeha hojerentsika ny ohatra iray amin'ny fomba fampandehanan'ny angon-drakitra andiam-potoana ny fanontaniana voafantina ho avy.

  • Voalohany dia mahazo ny zava-drehetra izy timeseries_ids avy amin'ny fanondroana mivadika misy ireo tsiroaroa nomena label=value, na manome fahafaham-po ny teny mahazatra nomena.
  • Avy eo dia retrieves ny angon-drakitra rehetra teboka avy amin'ny tahirin-kevitra amin'ny fe-potoana voafaritra ho an'ny hita timeseries_ids.
  • Aorian'izany dia manao kajikajy sasantsasany amin'ireo teboka ireo ny angon-drakitra, araka ny fangatahan'ny mpampiasa. Ary rehefa afaka izany dia mamerina ny valiny.

Amin'ity famelabelarana ity dia hitantara aminareo ny ampahany voalohany aho. Fikarohana ity timeseries_ids amin'ny fanondroana mivadika. Azonao atao ny mijery ny ampahany faharoa sy ny fahatelo aoriana Loharano VictoriaMetrics, na andraso mandra-panomanako tatitra hafa :)

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Andeha isika hiroso amin'ny fanondroana mivadika. Mety ho maro no mihevitra fa tsotra izany. Iza no mahalala ny atao hoe index inverted sy ny fomba fiasany? Oh, tsy dia maro intsony ny olona. Andeha hojerentsika hoe inona izany.

Tsotra tokoa izany. Diksionera tsotra fotsiny izy io izay manoritra fanalahidin'ny sanda iray. Inona no atao hoe fanalahidy? Ity mpivady ity label=valueizay label и value - andalana ireo. Ary ny soatoavina dia napetraka timeseries_ids, izay ahitana ny mpivady nomena label=value.

Ny index inverted dia ahafahanao mahita haingana ny zava-drehetra timeseries_ids, izay nanome label=value.

Izany koa dia ahafahanao mahita haingana timeseries_ids andiana fotoana ho an'ny tsiroaroa maromaro label=value, na ho an'ny mpivady label=regexp. Ahoana no mitranga izany? Amin'ny fitadiavana ny fihaonan'ny set timeseries_ids ho an'ny tsiroaroa tsirairay label=value.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Andeha hojerentsika ny fampiharana isan-karazany amin'ny index inverted. Andeha isika hanomboka amin'ny fampiharana tsotra indrindra. Toa izao izy.

asa getMetricIDs mahazo lisitry ny tady. Ny andalana tsirairay dia misy label=value. Ity asa ity dia mamerina lisitra metricIDs.

Ahoana ny fandehany? Eto isika dia manana fari-piainana manerantany antsoina hoe invertedIndex. Rakibolana mahazatra ity (map), izay hanao sarintany ny tady mba hitetika ints. Ny tsipika misy label=value.

Fampiharana asa: mahazo metricIDs ho an'ny voalohany label=value, dia mandeha amin'ny zavatra hafa rehetra isika label=value, azonay izany metricIDs ho azy ireo. Ary antsoy ny asa intersectInts, izay horesahina etsy ambany. Ary io fiasa io dia mamerina ny fihaonan'ireo lisitra ireo.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Araka ny hitanao dia tsy sarotra be ny fampiharana index inverted. Fa fampiharana tsy misy dikany izany. Inona no fatiantoka ananany? Ny tsy fahampiana lehibe amin'ny fampiharana tsy misy dikany dia ny fitehirizana ny fanondroana mivadika toy izany ao amin'ny RAM. Aorian'ny fanombohana ny fampiharana dia very ity index ity. Tsy misy fitehirizana an'ity indeksa ity amin'ny kapila. Ny fanondroana mivadika toy izany dia tsy mety amin'ny angon-drakitra.

Ny tsy fahampiana faharoa dia mifandray amin'ny fitadidiana ihany koa. Ny index inverted dia tsy maintsy mifanaraka amin'ny RAM. Raha mihoatra ny haben'ny RAM izany, dia mazava ho azy fa ho avy isika - amin'ny fahadisoana fahatsiarovana. Ary tsy mandeha ny programa.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Ity olana ity dia azo vahana amin'ny fampiasana vahaolana efa vita toy ny LevelDB, na RocksDB.

Raha fintinina dia mila angon-drakitra ahafahantsika manao asa telo haingana.

  • Ny hetsika voalohany dia ny firaketana ключ-значение amin'ity database ity. Manao izany haingana izy, aiza ключ-значение dia tady tsy misy dikany.
  • Ny asa faharoa dia fikarohana haingana ny sanda iray mampiasa fanalahidy nomena.
  • Ary ny hetsika fahatelo dia fitadiavana haingana ny soatoavina rehetra amin'ny alàlan'ny prefix nomena.

LevelDB sy RocksDB - ireo angon-drakitra ireo dia novolavolain'ny Google sy Facebook. Voalohany dia tonga ny LevelDB. Avy eo dia naka LevelDB ry zalahy avy amin'ny Facebook ary nanomboka nanatsara izany, nanao RocksDB. Ankehitriny dia saika miasa ao amin'ny RocksDB ao anatin'ny Facebook ny angona anatiny rehetra, anisan'izany ireo nafindra tany amin'ny RocksDB sy MySQL. Nomeny anarana izy MyRocks.

Ny index inverted dia azo ampiharina amin'ny alàlan'ny LevelDB. Ahoana no hanaovana izany? Mitahiry ho fanalahidy izahay label=value. Ary ny sanda dia ny famantarana ny andiam-potoana misy ny mpivady label=value.

Raha manana andian-potoana maromaro miaraka amin'ny mpivady nomena label=value, dia hisy andalana maro ao amin'ity tahiry ity miaraka amin'ny fanalahidy mitovy sy hafa timeseries_ids. Mba hahazoana ny lisitry ny rehetra timeseries_ids, izay manomboka amin'ity label=prefix, manao scan isan-karazany izahay izay ahafahana manatsara ity angona ity. Izany hoe, mifidy andalana rehetra manomboka amin'ny label=prefix ary mahazo izay ilaina timeseries_ids.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Ity misy santionany fampiharana amin'ny mety ho endriky ny Go. Manana index inverted izahay. Ity no LevelDB.

Ny asa dia mitovy amin'ny fampiharana naive. Mamerina ny fampiharana tsy misy dikany saika andalana. Ny teboka tokana dia ny hoe fa tsy mitodika any map miditra amin'ny index inverted izahay. Mahazo ny soatoavina rehetra isika amin'ny voalohany label=value. Avy eo dia mamakivaky ireo tsiroaroa sisa rehetra isika label=value ary alao ireo andiana metricID mifanaraka aminy ho azy ireo. Dia hitantsika ny fihaonan-dalana.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Toa milamina ny zava-drehetra, saingy misy ny tsy fahampiana amin'ity vahaolana ity. Ny VictoriaMetrics tamin'ny voalohany dia nametraka tondro mivadika mifototra amin'ny LevelDB. Saingy tamin'ny farany dia tsy maintsy nafoy aho.

Nahoana? Satria ny LevelDB dia miadana kokoa noho ny fampiharana naive. Amin'ny fampiharana tsy misy dikany, nomena ny fanalahidy iray, dia alaintsika avy hatrany ny ampahany manontolo metricIDs. Fampandehanana haingana dia haingana - efa vonona hampiasaina ny silaka manontolo.

Ao amin'ny LevelDB, isaky ny misy fiasa iray antsoina GetValues mila mandalo ny andalana rehetra izay manomboka amin'ny label=value. Ary alao ny sanda isaky ny andalana timeseries_ids. Ny toy izany timeseries_ids angony ny tapany amin'ireo timeseries_ids. Mazava ho azy fa miadana kokoa noho ny fidirana tsotra amin'ny sari-tany mahazatra amin'ny alalan'ny fanalahidy izany.

Ny tsy fahampiana faharoa dia ny LevelDB dia voasoratra ao amin'ny C. Ny fiantsoana ny asa C avy amin'ny Go dia tsy dia haingana. Mitaky nanosecond an-jatony izany. Tsy dia haingana loatra izany, satria raha ampitahaina amin'ny antso an-tariby mahazatra voasoratra ao anaty go, izay maka 1-5 nanoseconds, dia im-polo ny fahasamihafana eo amin'ny fampisehoana. Ho an'ny VictoriaMetrics dia lesoka mahafaty izany :)

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Noho izany dia nanoratra ny fampiasako manokana ny index inverted aho. Dia niantso azy izy mergeset.

Mergeset dia mifototra amin'ny firafitry ny angona MergeTree. Ity rafitra data ity dia nindramina tamin'ny ClickHouse. Mazava ho azy, ny mergeset dia tokony hohatsaraina amin'ny fikarohana haingana timeseries_ids araka ny fanalahidy nomena. Ny Mergeset dia voasoratra manontolo ao amin'ny Go. Hitanao Loharano VictoriaMetrics ao amin'ny GitHub. Ny fampiharana ny mergeset dia ao anaty lahatahiry /lib/mergeset. Azonao atao ny manandrana mamantatra ny zava-mitranga any.

Ny API mergeset dia mitovy amin'ny LevelDB sy RocksDB. Izany hoe, ahafahanao mitahiry rakitra vaovao haingana ao ary mifantina haingana ireo rakitsoratra amin'ny alàlan'ny prefix nomena.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Hiresaka momba ny tsy fahampian'ny mergeset isika any aoriana. Andeha isika hiresaka momba ny olana nitranga tamin'ny VictoriaMetrics amin'ny famokarana rehefa mampihatra ny fanondroana inverted.

Nahoana izy ireo no nitsangana?

Ny antony voalohany dia ny tahan'ny churn ambony. Raha adika amin'ny teny rosiana, dia fiovana matetika amin'ny andian-tantara izany. Izany dia rehefa mifarana ny andiam-potoana iray ary manomboka ny andiany vaovao, na manomboka andian-potoana vaovao maro. Ary mitranga matetika izany.

Ny antony faharoa dia ny hamaroan'ny andian-potoana. Tany am-piandohana, rehefa nalaza ny fanaraha-maso, dia kely ny isan'ny andian-potoana. Ohatra, ho an'ny solosaina tsirairay dia mila manara-maso ny CPU, ny fitadidiana, ny tambajotra ary ny enta-mavesatra ianao. Andiany 4 isaky ny solosaina. Aoka hatao hoe manana solosaina 100 sy andian-potoana 400 ianao. Kely dia kely izany.

Rehefa nandeha ny fotoana, dia hitan'ny olona fa afaka mandrefy fampahalalana misimisy kokoa izy ireo. Ohatra, refesina ny enta-mavesatra tsy ny processeur iray manontolo, fa misaraka amin'ny fototry ny processeur tsirairay. Raha manana core processeur 40 ianao, dia manana andian-potoana in-40 heny kokoa ianao handrefesana ny enta-mavesatry ny processeur.

Tsy izay ihany anefa. Ny fototry ny processeur tsirairay dia afaka manana fanjakana maromaro, toy ny tsy miasa, rehefa tsy miasa. Ary miasa amin'ny habaka mpampiasa, miasa amin'ny habaka kernel ary fanjakana hafa. Ary ny fanjakana tsirairay toy izany koa dia azo refesina ho andian-potoana misaraka. Izany dia mampitombo ny isan'ny andalana in-7-8.

Avy amin'ny metrika iray dia nahazo metrika 40 x 8 = 320 ho an'ny solosaina iray monja. Ampitomboina amin'ny 100, dia mahazo 32 isika fa tsy 000.

Avy eo dia tonga i Kubernetes. Ary niharatsy izany satria afaka mampiantrano tolotra maro samihafa i Kubernetes. Ny serivisy tsirairay ao amin'ny Kubernetes dia misy pods maro. Ary mila arahi-maso izany rehetra izany. Fanampin'izany, manana fametrahana tsy tapaka ny dikan-teny vaovao amin'ny serivisinao izahay. Ho an'ny dikan-teny vaovao tsirairay dia tsy maintsy mamorona andian-potoana vaovao. Vokatr'izany dia mitombo be ny isan'ny andian-potoana ary miatrika olana amin'ny andian-potoana marobe, izay antsoina hoe kardinaly avo lenta. Ny VictoriaMetrics dia niatrika izany tamim-pahombiazana raha oharina amin'ny angon-drakitra andiam-potoana hafa.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Andeha hojerentsika akaiky ny tahan'ny churn avo lenta. Inona no mahatonga ny taham-pamokarana avo lenta amin'ny famokarana? Satria miova tsy tapaka ny dikan'ny etikety sy marika sasany.

Raiso, ohatra, ny Kubernetes, izay manana ny foto-kevitra deployment, izany hoe rehefa mivoaka ny dikan-teny vaovao amin'ny fampiharanao. Noho ny antony sasany, nanapa-kevitra ny mpamorona Kubernetes ny hampiditra ny id fametrahana amin'ny marika.

Inona no nahatonga izany? Ankoatr'izay, isaky ny fametrahana vaovao dia tapaka avokoa ny andiam-potoana taloha, ary ho solon'izy ireo dia manomboka amin'ny sandan'ny marika vaovao ny andiam-potoana vaovao. deployment_id. Mety misy an'hetsiny ary an-tapitrisany mihitsy aza ny andalana toy izany.

Ny zava-dehibe amin'izany rehetra izany dia ny fitomboan'ny isan'ny andiam-potoana, fa ny isan'ny andiam-potoana izay mavitrika amin'izao fotoana izao ary mandray angona dia tsy miova. Ity fanjakana ity dia antsoina hoe tahan'ny churn avo.

Ny olana lehibe amin'ny tahan'ny churn avo dia ny miantoka ny hafainganam-pandehan'ny fikarohana tsy tapaka ho an'ny andian-potoana rehetra ho an'ny andiana marika mandritra ny fotoana voafaritra. Amin'ny ankapobeny dia io no elanelan'ny ora farany na ny andro farany.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Ahoana no hamahana ity olana ity? Ity ny safidy voalohany. Izany dia ny fizarana ny fanondro mivadika ho ampahany mahaleo tena rehefa mandeha ny fotoana. Izany hoe, mandalo ny elanelam-potoana sasany, dia vitantsika ny miasa miaraka amin'ny fanondroana inverted ankehitriny. Ary mamorona index inverted vaovao. Mandalo ny elanelam-potoana iray hafa, mamorona hafa sy hafa isika.

Ary rehefa maka santionany avy amin'ireo indices mivadika ireo, dia mahita andiana indices mivadika izay tafiditra ao anatin'ny elanelam-potoana nomena. Ary, araka izany, dia misafidy ny id amin'ny andiam-potoana avy eo.

Mamonjy loharanon-karena izany satria tsy mila mijery ny ampahany tsy tafiditra ao anatin'ny elanelana nomena isika. Izany hoe, matetika, raha misafidy angon-drakitra ho an'ny ora farany isika, dia ho an'ny elanelam-potoana teo aloha dia mitsambikina ny fangatahana.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Misy safidy hafa hamahana ity olana ity. Izany dia ny hitahiry isan'andro ny lisitry ny id andiam-potoana nitranga tamin'io andro io.

Ny tombony amin'ity vahaolana ity raha oharina amin'ny vahaolana teo aloha dia ny tsy fanaovana duplicate ny vaovao andiam-potoana izay tsy manjavona rehefa mandeha ny fotoana. Eo foana izy ireo ary tsy miova.

Ny tsy fahampiana dia ny vahaolana toy izany dia sarotra kokoa ny mampihatra ary sarotra kokoa ny debug. Ary VictoriaMetrics nisafidy ity vahaolana ity. Toy izany no nitranga ara-tantara. Ity vahaolana ity koa dia miasa tsara raha oharina amin'ny teo aloha. Satria ity vahaolana ity dia tsy nampiharina noho ny zava-misy fa ilaina ny duplicate angon-drakitra isaky ny fizarana ho an'ny andian-potoana izay tsy miova, izany hoe tsy manjavona rehefa mandeha ny fotoana. Ny VictoriaMetrics dia natao indrindra ho an'ny fanjifana habaka kapila, ary ny fampiharana teo aloha dia nahatonga ny fanjifana habaka kapila. Saingy ity fampiharana ity dia mety kokoa amin'ny fampihenana ny fanjifana habaka kapila, ka nofidiana.

Tsy maintsy niady taminy aho. Ny tolona dia amin'ity fampiharana ity dia mbola mila misafidy isa lehibe kokoa ianao timeseries_ids ho an'ny angona fa tsy rehefa mizara ny fotoana ny fanondroana mivadika.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Ahoana no namaha ity olana ity? Namaha azy io tamin'ny fomba tany am-boalohany izahay - amin'ny fitehirizana famantarana andiam-potoana maromaro isaky ny fidirana fanondro mivadika fa tsy famantarana iray. Izany hoe manana lakile isika label=value, izay miseho isaky ny andian-potoana. Ary izao dia mitahiry maromaro izahay timeseries_ids amin'ny fidirana iray.

Ity misy ohatra iray. Teo aloha dia nanana fidirana N izahay, fa izao dia manana fidirana iray izay mitovy ny tovanany amin'ny hafa rehetra. Ho an'ny fidirana teo aloha, ny sanda dia misy id andiam-potoana rehetra.

Izany dia nahafahana nampitombo ny hafainganam-pandehan'ny fanondroana mivadika toy izany hatramin'ny in-10. Ary namela antsika hampihena ny fanjifàna fahatsiarovana ho an'ny cache, satria izao no mitahiry ny kofehy label=value indray mandeha ihany ao anaty cache miaraka N times. Ary mety ho lehibe io tsipika io raha mitahiry tsipika lava ao amin'ny marika sy marikao ianao, izay tian'i Kubernetes apetaka eo.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Safidy iray hafa hanafainganana ny fikarohana amin'ny tondro mivadika dia sharding. Mamorona tondro mivadika maromaro fa tsy iray ary mizara angona eo anelanelan'izy ireo amin'ny alalan'ny fanalahidy. Set ity key=value etona. Izany hoe, mahazo index inverted tsy miankina maromaro isika, izay azontsika anontaniana mifanandrify amin'ny processeur maromaro. Ny fampiharana teo aloha dia namela ny fiasana amin'ny maodely processeur tokana ihany, izany hoe ny fisavana angona amin'ny fototra iray ihany. Ity vahaolana ity dia ahafahanao mijery angon-drakitra amin'ny cores maromaro indray mandeha, araka ny tian'ny ClickHouse atao. Izany no kasainay hampiharina.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Andeha isika hiverina amin'ny ondrintsika - amin'ny fiasan'ny intersection timeseries_ids. Andeha hojerentsika izay fampiharana mety hisy. Ity fiasa ity dia ahafahanao mahita timeseries_ids ho an'ny set nomena label=value.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Ny safidy voalohany dia fampiharana tsy misy dikany. Loops roa nested. Eto isika dia mahazo ny fampidirana fampiasa intersectInts silaka roa - a и b. Amin'ny vokatra dia tokony hiverina amintsika ny fihaonan'ireo silaka ireo.

Ny fampiharana tsy misy dikany dia toa izao. Mamerina ny sanda rehetra avy amin'ny slice izahay a, ao anatin'ity loop ity dia mandalo ny sanda rehetra amin'ny slice b. Ary mampitaha azy ireo izahay. Raha mifanandrify izy ireo dia nahita sampanan-dalana izahay. Ary tehirizo ao result.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Inona no fatiantoka? Ny hasarobidin'ny quadratic no tena lesoka. Ohatra, raha toa ka tapaka ny refy a и b iray tapitrisa isaky ny mandeha, dia tsy hamerina valiny aminao mihitsy ity fiasa ity. Satria mila manao iterations iray trillion, izay betsaka na dia ho an'ny solosaina maoderina aza.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Ny fampiharana faharoa dia mifototra amin'ny sarintany. Mamorona sarintany izahay. Apetrakay ao anatin'ity sarintany ity ny sanda rehetra avy amin'ny slice a. Avy eo dia mandeha amin'ny slice amin'ny loop misaraka b. Ary jereo raha avy amin'ny slice io sanda io b amin'ny sari-tany. Raha misy izany dia ampio amin'ny vokatra.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Inona no tombony azo? Ny tombony dia tsy misy afa-tsy ny linear complexity. Izany hoe, ny asa dia hanatanteraka haingana kokoa ho an'ny silaka lehibe kokoa. Ho an'ny tapa-habe iray tapitrisa, ity fiasa ity dia hotanterahina ao anatin'ny 2 tapitrisa iterations, mifanohitra amin'ny famerenan'ny trillion an'ny asa teo aloha.

Ny lafy ratsiny dia mitaky fitadidiana bebe kokoa ity asa ity mba hamoronana ity sari-tany ity.

Ny tsy fahampiana faharoa dia ny overhead lehibe ho an'ny hashing. Tsy dia mazava loatra io tsy fahampiana io. Ary ho anay koa dia tsy dia niharihary loatra izany, ka tamin'ny voalohany tao amin'ny VictoriaMetrics dia tamin'ny alalan'ny sarintany ny fampiharana ny intersection. Saingy avy eo dia nasehon'ny profiling fa ny fotoana lehibe amin'ny processeur dia lany amin'ny fanoratana amin'ny sarintany ary manamarina ny fisian'ny sanda iray amin'ity sarintany ity.

Nahoana no very maina ny fotoana CPU amin'ireo toerana ireo? Satria manao asa hashing amin'ireo andalana ireo i Go. Izany hoe, kajy ny hash ny lakile mba hidirana amin'ny tondro nomena ao amin'ny HashMap. Vita ao anatin'ny nanosegondra am-polony ny asa kajy hash. Miadana izany ho an'ny VictoriaMetrics.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Nanapa-kevitra ny hampihatra bitset namboarina manokana ho an'ity tranga ity aho. Toy izao ny endriky ny fihaonan'ny silaka roa. Eto isika dia mamorona bitset. Manampy singa avy amin'ny tapany voalohany amin'izany izahay. Avy eo dia manamarina ny fisian'ireo singa ireo amin'ny ampahany faharoa. Ary ampio izy ireo amin'ny vokatra. Izany hoe, saika tsy misy hafa amin’ny ohatra teo aloha. Ny hany tokana eto dia nosoloinay ny fidirana amin'ny sari-tany amin'ny fiasa mahazatra add и has.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Raha vao jerena dia toa tokony hiasa miadana kokoa izany, raha toa ka nisy sarintany mahazatra nampiasaina teo aloha, ary avy eo dia misy asa hafa antsoina, fa ny profiling dia mampiseho fa ity zavatra ity dia miasa in-10 haingana kokoa noho ny sarintany mahazatra amin'ny raharaha VictoriaMetrics.

Ankoatr'izay, mampiasa fitadidiana kely kokoa izy io raha oharina amin'ny fampiharana ny sarintany. Satria mitahiry bits eto izahay fa tsy sanda valo-byte.

Ny tsy fahampian'ity fampiharana ity dia ny tsy dia mibaribary loatra, tsy misy dikany.

Ny tsy fahampiana iray hafa izay mety tsy tsikaritry ny maro dia mety tsy mandeha tsara io fampiharana io amin'ny tranga sasany. Izany hoe, nohatsaraina ho an'ny tranga iray manokana izy io, ho an'ity tranga fifanenjehana amin'ny id andiam-potoana VictoriaMetrics ity. Tsy midika akory izany fa mety amin'ny tranga rehetra izy io. Raha tsy mety ny fampiasana azy, dia tsy hahazo fampiakarana zava-bita isika, fa fahadisoana tsy ampy fitadidiana sy fihemorana amin'ny fampisehoana.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Andeha hodinihintsika ny fampiharana io rafitra io. Raha te hijery ianao dia hita ao amin'ny loharano VictoriaMetrics, ao amin'ny lahatahiry lib/uint64set. Namboarina manokana ho an'ny raharaha VictoriaMetrics, izay timeseries_id dia sanda 64-bit, izay ny 32 bits voalohany dia tsy miova ary ny 32 bits farany ihany no miova.

Ity firafitry ny data ity dia tsy voatahiry ao anaty kapila, fa ao anaty fitadidiana ihany no miasa.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Ity ny API-ny. Tsy dia sarotra loatra izany. Ny API dia namboarina manokana amin'ny ohatra manokana amin'ny fampiasana VictoriaMetrics. Izany hoe tsy misy asa tsy ilaina eto. Ireto ny fiasa izay ampiasain'ny VictoriaMetrics mazava.

Misy asa add, izay manampy soatoavina vaovao. Misy asa has, izay manamarina ny sanda vaovao. Ary misy asa del, izay manala soatoavina. Misy asa mpanampy len, izay mamerina ny haben'ny napetraka. asa clone klones be. Ary miasa appendto mamadika ity andiany ity ho slice timeseries_ids.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Toy izao ny endriky ny fampiharana an'io rafitra data io. Ny set dia manana singa roa:

  • ItemsCount dia saha mpanampy mba hamerenana haingana ny isan'ny singa ao anaty andiana iray. Azo atao izany raha tsy misy an'io sehatra fanampiny io, saingy tsy maintsy ampiana eto satria matetika ny VictoriaMetrics no manontany ny halavan'ny bitset amin'ny algorithms.

  • Ny saha faharoa dia buckets. Ity dia ampahany amin'ny rafitra bucket32. Ny rafitra tsirairay dia mitahiry hi saha. Ireo no ambony 32 bit. Ary tapa-kazo roa - b16his и buckets avy amin'ny bucket16 rafitra.

Ny bitika 16 ambony amin'ny ampahany faharoa amin'ny rafitra 64-bit dia voatahiry eto. Ary eto ny bitsets dia voatahiry ho an'ny bits 16 ambany amin'ny byte tsirairay.

Bucket64 dia ahitana array uint64. Ny halavany dia kajy amin'ny fampiasana ireo tsy miova ireo. Amin'ny iray bucket16 ambony indrindra azo tehirizina 2^16=65536 bit. Raha zarainao amin'ny 8 izany dia 8 kilobytes izany. Raha zarainao 8 indray dia 1000 izany uint64 dikany. Izany hoe Bucket16 – ity no rafitra 8 kilobyte anay.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Andeha hojerentsika ny fomba fampiharana ny iray amin'ireo fomba fiasa amin'ity rafitra ity amin'ny fampidirana sanda vaovao.

Izany rehetra izany dia manomboka amin'ny uint64 dikany. Kajy ny ambony 32 bit, kajy ny ambany 32 bit. Andeha hojerentsika ny zava-drehetra buckets. Ampitahainay ny bits 32 ambony amin'ny siny tsirairay miaraka amin'ny sanda ampiana. Ary raha mifanandrify izy ireo, dia antsoinay ny asa add amin'ny rafitra b32 buckets. Ary ampio ny 32 bits ambany ao. Ary raha niverina true, dia midika izany fa nampiana sanda toy izany izahay tao ary tsy nanana sanda toy izany izahay. Raha miverina false, dia efa nisy ny dikany toy izany. Avy eo dia mampitombo ny isan'ny singa ao amin'ny rafitra.

Raha tsy hitanay ilay ilainao bucket miaraka amin'ny hi-value ilaina, dia antsoina hoe ny asa addAlloc, izay hamokatra vaovao bucket, manampy azy amin'ny rafitra siny.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Izany no fampiharana ny asa b32.add. Mitovy amin’ny fampiharana teo aloha izany. Kajy ny bitika 16 manan-danja indrindra, 16 bitika kely indrindra.

Avy eo isika dia mamakivaky ireo bitika 16 ambony rehetra. Mahita lalao izahay. Ary raha misy ny lalao dia antsoina hoe fomba add, izay hodinihintsika amin'ny pejy manaraka bucket16.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Ary eto ny ambaratonga ambany indrindra, izay tokony ho optimized araka izay azo atao. Kajy ho an'ny uint64 sanda id amin'ny slice bit ary koa bitmask. Ity dia saron-tava ho an'ny sanda 64-bit nomena, izay azo ampiasaina hanamarinana ny fisian'ity bit ity, na hametraka azy. Manamarina isika raha toa ka napetraka io bit io ary mametraka azy, ary mamerina ny fisiany. Ity no fampiharanay, izay nahafahanay nanafaingana ny fiasan'ireo id mifanelanelana amin'ny andiam-potoana in-10 raha oharina amin'ny sarintany mahazatra.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Ho fanampin'ity fanatsarana ity dia manana fanatsarana maro hafa ny VictoriaMetrics. Ny ankabeazan'ireo fanatsarana ireo dia nampiana noho ny antony iray, saingy taorian'ny fametrahana ny kaody amin'ny famokarana.

Ity no fitsipika fototra amin'ny fanatsarana - aza ampiana optimization amin'ny fiheverana fa hisy bottleneck eto, satria mety tsy hisy ny bottleneck any. Ny fanatsarana matetika dia manimba ny kalitaon'ny kaody. Noho izany, ilaina ny manatsara raha tsy aorian'ny profiling ary tsara kokoa amin'ny famokarana, mba ho angon-drakitra marina izany. Raha misy liana dia afaka mijery ny kaody loharano VictoriaMetrics ianao ary mikaroka ireo fanatsarana hafa izay misy.

Mandehana optimizations ao amin'ny VictoriaMetrics. Alexander Valyalkin

Manana fanontaniana momba ny bitset aho. Tena mitovy amin'ny C++ vector bool fampiharana, optimized bitset. Nandray ny fampiharana avy teo ve ianao?

Tsia, tsy avy any. Rehefa nampihatra ity bitset ity aho, dia notarihin'ny fahalalana momba ny firafitry ny firafitry ny id izay ampiasaina ao amin'ny VictoriaMetrics. Ary ny rafitr'izy ireo dia toy izany fa ny 32 bit ambony dia tsy miova. Ny bits 32 ambany dia mety hiova. Arakaraky ny ambany ny bitika no mety hiova matetika. Noho izany, ity fampiharana ity dia natao indrindra ho an'ity rafitra data ity. Ny fampiharana C ++, araka ny fantatro, dia natao ho an'ny tranga ankapobeny. Raha amboarina ho an'ny tranga ankapobeny ianao dia midika izany fa tsy ho tsara indrindra ho an'ny tranga manokana izany.

Manoro hevitra anao koa aho hijery ny tatitry ny Alexey Milovid. Tokony ho iray volana lasa izay, niresaka momba ny fanatsarana ao amin'ny ClickHouse izy ho an'ny manokana manokana. Milaza fotsiny izy fa amin'ny tranga ankapobeny, ny fampiharana C ++ na fampiharana hafa dia namboarina mba hiasa tsara amin'ny salan'isa ao amin'ny hopitaly. Mety ho ratsy kokoa noho ny fampiharana manokana momba ny fahalalana toa antsika izany, izay fantatsika fa ny bitika 32 ambony indrindra dia tsy miova.

Manana fanontaniana faharoa aho. Inona ny fahasamihafana fototra amin'ny InfluxDB?

Betsaka ny fahasamihafana fototra. Raha ny momba ny fampisehoana sy ny fanjifana fahatsiarovana, ny InfluxDB amin'ny fitsapana dia mampiseho fanjifana fahatsiarovana avo 10 heny ho an'ny andiany fotoana kardinaly avo, rehefa manana be dia be ianao, ohatra, an-tapitrisany. Ohatra, ny VictoriaMetrics dia mandany 1 GB isaky ny an-tapitrisany andalana mavitrika, raha ny InfluxDB kosa dia mandany 10 GB. Ary misy fahasamihafana lehibe izany.

Ny fahasamihafana fototra faharoa dia ny InfluxDB dia manana fiteny fanontaniana hafahafa - Flux sy InfluxQL. Tsy dia mety loatra izy ireo amin'ny fiasana amin'ny andian-potoana raha oharina amin'ny PromQL, izay tohanan'ny VictoriaMetrics. PromQL dia fiteny fangatahana avy amin'ny Prometheus.

Ary ny fahasamihafana iray hafa dia ny InfluxDB dia manana modely angon-drakitra somary hafahafa, izay ahafahan'ny andalana tsirairay mitahiry saha maromaro misy marika maromaro. Ireo andalana ireo dia mizara ho latabatra isan-karazany. Ireo fahasarotana fanampiny ireo dia manasarotra ny asa manaraka miaraka amin'ity tahiry ity. Sarotra ny manohana sy mahazo izany.

Ao amin'ny VictoriaMetrics dia tsotra kokoa ny zava-drehetra. Eo, ny andiam-potoana tsirairay dia sanda manan-danja. Ny sandany dia isa maromaro - (timestamp, value), ary ny fanalahidy dia ny napetraka label=value. Tsy misy fisarahana eo amin'ny saha sy ny fandrefesana. Mamela anao hisafidy angon-drakitra ary avy eo manambatra, manampy, manala, mampitombo, mizara, fa tsy toy ny InfluxDB izay mbola tsy ampiharina ny kajy eo amin'ny andalana samihafa raha ny fahalalako azy. Na dia ampiharina aza izy ireo, sarotra izany, tsy maintsy manoratra code be dia be ianao.

Manana fanontaniana manazava aho. Tena azoko tsara ve fa nisy olana noresahinao fa tsy mifanaraka amin'ny fitadidiana io index inverted io ka misy fisarahana ao?

Voalohany, nasehoko ny fampiharana tsy misy dikany amin'ny tondro mivadika amin'ny sari-tany Go mahazatra. Ity fampiharana ity dia tsy mety amin'ny angon-drakitra satria tsy voatahiry ao amin'ny kapila ity fanondroana mivadika ity, ary tsy maintsy mitahiry ao anaty kapila ny angona mba ho hita eo amin'ny fanombohana indray ity angona ity. Amin'ity fampiharana ity, rehefa manomboka indray ny fampiharana ianao dia hanjavona ny index inverted anao. Ary ho very ny fidirana amin'ny angon-drakitra rehetra satria tsy ho hitanao izany.

Salama! Misaotra tamin'ny tatitra! Pavel no anarako. Avy any Wildberries aho. Manana fanontaniana vitsivitsy ho anao aho. Fanontaniana voalohany. Heverinao ve fa raha nisafidy fitsipika hafa ianao tamin'ny fananganana ny rafitry ny fampiharana anao ary nizarazara ny angon-drakitra rehefa mandeha ny fotoana, dia mety ho afaka nifandona ny angona ianao rehefa nikaroka, mifototra amin'ny hoe misy fizarazarana iray misy data ho an'ny iray fe-potoana, izany hoe, ao anatin'ny fotoana iray ary tsy mila manahy momba ny fiparitahan'ny sombinao amin'ny fomba hafa ianao? Fanontaniana laharana 2 - satria manatanteraka algorithm mitovy amin'ny bitset sy ny zavatra hafa rehetra ianao, dia mety nanandrana nampiasa torolàlana momba ny processeur ve ianao? Angamba efa nanandrana fanatsarana toy izany ianao?

Hamaly ny faharoa avy hatrany aho. Mbola tsy tonga amin’izany isika. Fa raha ilaina dia ho tonga any. Ary ny voalohany, inona no fanontaniana?

Niresaka toe-javatra roa ianao. Ary nilaza izy ireo fa nisafidy ny faharoa miaraka amin'ny fampiharana sarotra kokoa. Ary tsy naleon'izy ireo ilay voalohany, izay mizarazara amin'ny fotoana ny angon-drakitra.

Eny. Amin'ny tranga voalohany dia ho lehibe kokoa ny totalin'ny index, satria isaky ny fizarana tsirairay dia tsy maintsy mitahiry angona dika mitovy ho an'ireo andian-potoana izay mitohy amin'ireo fizarana rehetra ireo. Ary raha kely ny taham-pihodinan'ny andiam-potoananao, izany hoe ny andian-dahatsoratra mitovy ihany no ampiasaina, amin'ny tranga voalohany dia ho very bebe kokoa amin'ny habetsaky ny habaka kapila misy isika raha oharina amin'ny tranga faharoa.

Ary noho izany - eny, safidy tsara ny fizarana fotoana. Prometheus dia mampiasa azy io. Saingy manana lesoka hafa i Prometheus. Rehefa manambatra ireo angon-drakitra ireo dia mila mitazona fampahalalana meta fitadidiana ho an'ny etikety sy fizaran-potoana rehetra. Noho izany, raha lehibe ny angon-drakitra natambatra azy, dia mitombo be ny fanjifana fahatsiarovana mandritra ny fampifangaroana, fa tsy toy ny VictoriaMetrics. Rehefa mitambatra dia tsy mandany fitadidiana mihitsy ny VictoriaMetrics; kilobytes roa monja no lany, na inona na inona haben'ny angona natambatra.

Ny algorithm ampiasainao dia mampiasa fahatsiarovana. Izy io dia manamarika ny marika famantaranandro misy sanda. Ary amin'izany fomba izany no hanamarinanao ny fisian'ny mpivady amin'ny angon-drakitra iray ary amin'ny iray hafa. Ary azonao ny hoe nisy intersect na tsia. Amin'ny ankapobeny, ny angon-drakitra dia mametraka cursors sy iterators izay mitahiry ny atiny amin'izao fotoana izao ary mandeha amin'ny angon-drakitra voafantina noho ny fahasarotana tsotra amin'ireo asa ireo.

Maninona no tsy mampiasa cursor isika hamakiana angona?

Eny.

Mitahiry andalana voafantina ao amin'ny LevelDB na mergeset izahay. Afaka manetsika ny cursor isika ary mahita ny fihaonan-dalana. Maninona raha mampiasa azy isika? Satria miadana. Satria ny cursors dia midika fa mila miantso asa ho an'ny andalana tsirairay ianao. Ny antso iray dia 5 nanosegondra. Ary raha manana tsipika 100 ianao, dia hita fa mandany antsasa-tsegondra fotsiny ny fiantsoana ny fiasa.

Misy izany, eny. Ary ny fanontaniako farany. Mety ho hafahafa ihany ilay fanontaniana. Nahoana no tsy azo atao ny mamaky ireo fitambarana ilaina rehetra amin'ny fotoana hahatongavan'ny angon-drakitra ary mamonjy azy ireo amin'ny endrika takiana? Nahoana no mitahiry vola be amin'ny rafitra sasany toa an'i VictoriaMetrics, ClickHouse, sns., ary avy eo mandany fotoana be amin'izy ireo?

Hanome ohatra aho mba hazava kokoa. Andeha hatao hoe ahoana ny fiasan'ny speedometer kely kilalao? Izy io dia mirakitra ny halavirana nalehanao, amin'ny fotoana rehetra manampy azy amin'ny sanda iray, ary ny faharoa - fotoana. Ary mizara. Ary mahazo hafainganam-pandeha antonony. Afaka manao zavatra mitovy amin'izany koa ianao. Ampio ny zava-misy rehetra ilaina amin'ny lalitra.

Okay, azoko ilay fanontaniana. Manana ny toerany ny ohatra asehonao. Raha fantatrao hoe inona no aggregates ilainao, dia ity no fampiharana tsara indrindra. Saingy ny olana dia ny fitahirizan'ny olona ireo metrika ireo, ny angon-drakitra sasany ao amin'ny ClickHouse ary mbola tsy fantany ny fomba hanangonany sy hanivanana azy ireo amin'ny ho avy, ka tsy maintsy mitahiry ny angona manta rehetra. Fa raha fantatrao fa mila manao kajy amin'ny salan'isa ianao, maninona raha manao kajy izany fa tsy mitahiry sanda manta maromaro ao? Saingy izany dia raha tsy fantatrao tsara izay ilainao.

Raha ny marina, ny angon-drakitra fitehirizana andiam-potoana dia manohana ny fanisana ireo fitambarana. Ohatra, manohana ny Prometheus fitsipika firaketana. Izany hoe, azo atao izany raha fantatrao izay singa ilainao. Tsy mbola manana an'io ny VictoriaMetrics, fa matetika ialohavan'ny Prometheus, izay azo anaovana izany amin'ny fitsipika recoding.

Ohatra, tamin'ny asako teo aloha dia nila nanisa ny isan'ny zava-nitranga tao anaty varavarankely sliding aho nandritra ny ora farany. Ny olana dia tsy maintsy nanao fampiharana manokana tao amin'ny Go aho, izany hoe serivisy hanisa an'io zavatra io. Ity serivisy ity dia tsy misy dikany amin'ny farany, satria sarotra ny kajy. Ny fampiharana dia mety ho tsotra raha mila manisa fitambarana sasany amin'ny elanelan'ny fotoana voafaritra ianao. Raha te-hanisa hetsika ao amin'ny varavarankely sliding ianao, dia tsy tsotra araka ny hita. Heveriko fa mbola tsy nampiharina tao amin'ny ClickHouse na amin'ny angon-drakitra timesseries izany, satria sarotra ny mampihatra izany.

Ary fanontaniana iray hafa. Niresaka momba ny salan'isa fotsiny izahay, ary tadidiko fa nisy zavatra toy ny Graphite misy lamosina karbona. Ary hainy ny nanalefaka ny angona taloha, izany hoe, mamela teboka iray isa-minitra, teboka iray isan'ora, sns. Amin'ny ankapobeny dia mety tsara izany raha mila angon-drakitra manta isika, amin'ny lafiny iray, mandritra ny iray volana, ary ny zavatra hafa rehetra dia azo atao. manify . Saingy tsy manohana an'io fiasa io ny Prometheus sy VictoriaMetrics. Kasaina hanohana azy ve? Raha tsy izany, nahoana?

Misaotra amin'ny fanontaniana. Mametraka io fanontaniana io tsindraindray ny mpampiasa anay. Manontany izy ireo hoe rahoviana isika no hanampy ny fampidinana santionany. Misy olana maromaro eto. Voalohany, azon'ny mpampiasa tsirairay downsampling zavatra hafa: misy olona te-hahazo teboka tsy misy dikany amin'ny elanelam-potoana iray, misy olona mila sanda ambony indrindra, kely indrindra, antonony. Raha rafitra maro no manoratra angona ao amin'ny angon-drakitrao, dia tsy azonao atao ny manambatra azy rehetra. Mety ho ny rafitra tsirairay dia mitaky manify samihafa. Ary sarotra ny mampihatra izany.

Ary ny zavatra faharoa dia ny VictoriaMetrics, toa an'i ClickHouse, dia optimized amin'ny fiasana amin'ny angon-drakitra manta be dia be, ka afaka manapaka andalana iray lavitrisa ao anatin'ny iray segondra raha manana cores maro ao amin'ny rafitrao ianao. Fikarohana teboka andiam-potoana ao amin'ny VictoriaMetrics - 50 isa isa-tsegondra isan-tsegondra. Ary ity fampisehoana ity dia mizana amin'ny cores efa misy. Izany hoe, raha manana cores 000 ianao, ohatra, dia hanao scan iray miliara isa-tsegondra. Ary ity fananan'ny VictoriaMetrics sy ClickHouse ity dia mampihena ny filana fampidinana.

Ny endri-javatra iray hafa dia ny VictoriaMetrics dia manindry tsara an'io data io. Ny famatrarana eo ho eo amin'ny famokarana dia avy amin'ny 0,4 ka hatramin'ny 0,8 bytes isaky ny teboka. Ny teboka tsirairay dia mari-pamantarana + sanda. Ary voatsindry ho latsaky ny iray byte amin'ny antsalany.

Sergey. Manana fanontaniana aho. Inona ny isan'ny fotoana firaketana kely indrindra?

Iray milisegondra. Vao haingana izahay no nifampiresaka tamin'ireo mpamorona angon-drakitra andiam-potoana hafa. Ny fe-potoana faran'izay kely indrindra dia iray segondra. Ary amin'ny Graphite, ohatra, iray segondra ihany koa. Ao amin'ny OpenTSDB dia iray segondra ihany koa. InfluxDB dia manana mari-pamantarana nanosecond. Ao amin'ny VictoriaMetrics dia iray milisegondra, satria ao amin'ny Prometheus dia iray milisegondra. Ary ny VictoriaMetrics dia novolavolaina ho fitahirizana lavitra ho an'ny Prometheus. Fa ankehitriny dia afaka mamonjy angona avy amin'ny rafitra hafa.

Nilaza ilay olona niresahako fa manana ny marina faharoa ka hatramin'ny faharoa izy ireo - ampy ho azy ireo izany satria miankina amin'ny karazana angona voatahiry ao amin'ny angon-drakitra andiam-potoana. Raha angon-drakitra DevOps na angona avy amin'ny fotodrafitrasa, izay hanangonanao azy amin'ny elanelana 30 segondra, isa-minitra, dia ampy ny fahitsiana faharoa, tsy mila zavatra kely kokoa ianao. Ary raha manangona an'io angona io avy amin'ny rafitra ara-barotra avo lenta ianao, dia mila marina ny nanosecond.

Ny fahamarinan'ny Millisecond ao amin'ny VictoriaMetrics dia mety amin'ny raharaha DevOps, ary mety ho an'ny ankamaroan'ny tranga izay nolazaiko tany am-piandohan'ny tatitra. Ny hany zavatra mety tsy mety dia ny rafitra ara-barotra avo lenta.

Misaotra anao! Ary fanontaniana iray hafa. Inona no atao hoe compatibility amin'ny PromQL?

Fifanarahana mihemotra feno. VictoriaMetrics dia manohana tanteraka ny PromQL. Ho fanampin'izany, manampy fiasa fanampiny fanampiny ao amin'ny PromQL, izay antsoina hoe MetricsQL. Misy resaka ao amin'ny YouTube momba ity fampiasa miitatra ity. Niresaka tamin'ny Monitoring Meetup tamin'ny lohataona tany Saint-Pétersbourg aho.

Fantsona telegram VictoriaMetrics.

Ireo mpampiasa voasoratra anarana ihany no afaka mandray anjara amin'ny fanadihadiana. HiditraPlease.

Inona no manakana anao tsy hifindra amin'ny VictoriaMetrics ho fitahirizanao maharitra ny Prometheus? (Soraty ao amin'ny fanehoan-kevitra, ampiako amin'ny fitsapan-kevitra))

  • 71,4%Tsy mampiasa Prometheus5 aho

  • 28,6%Tsy nahalala momba ny VictoriaMetrics2

Mpampiasa 7 no nifidy. Mpampiasa 12 no nifady.

Source: www.habr.com

Add a comment