Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Ngiphakamisa ukuthi ufunde okulotshiwe kombiko wakamuva ka-2019 ka-Alexander Valyalkin "Hamba ukulungiselelwa ku-VictoriaMetrics"

I-VictoriaMetrics - i-DBMS esheshayo futhi eyingozi yokugcina nokucubungula idatha ngendlela yochungechunge lwesikhathi (isikhathi sakha irekhodi kanye nesethi yamanani ahambisana nalesi sikhathi, isibonelo, atholwe ngokuvota ngezikhathi ezithile kwesimo sezinzwa noma ukuqoqwa kwezinzwa amamethrikhi).

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Nasi isixhumanisi sevidiyo yalo mbiko - https://youtu.be/MZ5P21j_HLE

Amaslayidi

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Sitshele ngawe. Ngingu-Alexander Valyalkin. Lapha i-akhawunti yami ye-GitHub. Nginentshisekelo nge-Go kanye nokwenza kahle. Ngibhale imitapo yolwazi eminingi ewusizo futhi engasebenziseki kangako. Baqala noma fast, noma nge quick isiqalo.

Okwamanje ngisebenza ku-VictoriaMetrics. Kuyini futhi ngenzani lapho? Ngizokhuluma ngalokhu kulesi sethulo.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Uhlaka lombiko lumi kanje:

  • Okokuqala, ngizokutshela ukuthi iyini i-VictoriaMetrics.
  • Bese ngizokutshela ukuthi uchungechunge lwesikhathi luni.
  • Bese ngizokutshela ukuthi i-database yochungechunge lwesikhathi isebenza kanjani.
  • Okulandelayo, ngizokutshela mayelana nesakhiwo se-database: ukuthi siqukethe ini.
  • Bese-ke sidlulela ekulungiselelweni i-VictoriaMetrics enakho. Lokhu ukulungiselelwa kwenkomba ehlanekezelwe kanye nokulungiselelwa kokusetshenziswa kwe-bitset ku-Go.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Ingabe ukhona ezithamelini owaziyo ukuthi iyini i-VictoriaMetrics? Hawu, abantu abaningi asebeyazi. Izindaba ezimnandi. Kulabo abangazi, lena isizindalwazi sochungechunge lwesikhathi. Isekelwe ekwakhiweni kwe-ClickHouse, kweminye imininingwane yokuqaliswa kwe-ClickHouse. Isibonelo, okufana nalokhu: I-MergeTree, ukubala okufanayo kuwo wonke ama-processor cores atholakalayo kanye nokuthuthukisa ukusebenza ngokusebenza kumabhulokhi wedatha abekwe kunqolobane yokucubungula.

I-VictoriaMetrics inikeza ukucindezelwa kwedatha okungcono kunezinye izingosi zolwazi zochungechunge lwesikhathi.

Ikala iqonde mpo - okungukuthi, ungangeza amaphrosesa amaningi, i-RAM eningi kukhompyutha eyodwa. I-VictoriaMetrics izosebenzisa ngempumelelo lezi zinsiza ezitholakalayo futhi izothuthukisa ukukhiqizwa komugqa.

I-VictoriaMetrics iphinda ilinganise ngokuvundlile - okungukuthi, ungakwazi ukwengeza ama-node engeziwe kuqoqo le-VictoriaMetrics, futhi ukusebenza kwayo kuzokwenyuka cishe ngokulandelana.

Njengoba ubuqagele, i-VictoriaMetrics iyisizindalwazi esisheshayo, ngoba angikwazi ukubhala abanye. Futhi kubhalwe ku-Go, ngakho-ke ngikhuluma ngakho kulo mhlangano.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Ubani owaziyo ukuthi luyini uchungechunge lwesikhathi? Wazi nabantu abaningi. Uchungechunge lwesikhathi luwuchungechunge lwamapheya (timestamp, значение), lapho lawa mapheya ahlelwa ngesikhathi. Inani inombolo yephoyinti elintantayo - i-float64.

Uchungechunge lwesikhathi ngalunye lukhonjwa ngokukhethekile ngokhiye. Lo khiye uhlanganisani? Iqukethe isethi elingenalutho lamapheya enani elingukhiye.

Nasi isibonelo sochungechunge lwesikhathi. Ukhiye walolu chungechunge uhlu lwamapheya: __name__="cpu_usage" igama lemethrikhi, instance="my-server" - lena ikhompuyutha okuqoqwa kuyo le metric, datacenter="us-east" - lesi yisikhungo sedatha lapho le khompyutha ikhona.

Sigcine ngegama lochungechunge lwesikhathi elihlanganisa amapheya amathathu enani elingukhiye. Lo khiye uhambisana nohlu lwamapheya (timestamp, value). t1, t3, t3, ..., tN - lezi izitembu zesikhathi, 10, 20, 12, ..., 15 - amanani ahambisanayo. Lokhu ukusetshenziswa kwe-cpu ngesikhathi esinikeziwe kumugqa onikeziwe.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Lungasetshenziswa kuphi uchungechunge lwesikhathi? Ingabe ukhona onombono?

  • Ku-DevOps, ungakwazi ukukala i-CPU, i-RAM, inethiwekhi, ama-rps, inani lamaphutha, njll.
  • IoT - singakwazi ukukala izinga lokushisa, ingcindezi, izixhumanisi ze-geo nokunye.
  • Futhi ngezezimali - singakwazi ukuqapha izintengo zazo zonke izinhlobo zezitoko nezinhlobo zemali.
  • Ngaphezu kwalokho, uchungechunge lwesikhathi lungasetshenziswa ekuqapheni izinqubo zokukhiqiza ezimbonini. Sinabasebenzisi abasebenzisa i-VictoriaMetrics ukuqapha izinjini zomoya, zamarobhothi.
  • Uchungechunge lwesikhathi luwusizo futhi ekuqoqeni ulwazi kusuka kuzinzwa zamadivayisi ahlukahlukene. Isibonelo, ngenjini; ukukala umfutho wesondo; yokulinganisa isivinini, ibanga; ukukala ukusetshenziswa kukaphethiloli, njll.
  • Uchungechunge lwesikhathi lungasetshenziswa futhi ukuqapha izindiza. Indiza ngayinye inebhokisi elimnyama eliqoqa uchungechunge lwesikhathi lwamapharamitha ahlukahlukene wempilo yendiza. Uchungechunge lwesikhathi luphinde lusetshenziswe embonini ye-aerospace.
  • Ukunakekelwa kwezempilo umfutho wegazi, ukushaya kwenhliziyo, njll.

Kungase kube nezinhlelo zokusebenza eziningi engizikhohliwe, kodwa ngithemba ukuthi uyaqonda ukuthi uchungechunge lwesikhathi lusetshenziswa kakhulu emhlabeni wanamuhla. Futhi umthamo wokusetshenziswa kwabo ukhula minyaka yonke.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Kungani udinga isizindalwazi sochungechunge lwesikhathi? Kungani ungakwazi ukusebenzisa isizindalwazi esivamile sobudlelwano ukuze ugcine uchungechunge lwesikhathi?

Ngoba uchungechunge lwesikhathi luvamise ukuqukatha inani elikhulu lolwazi, okunzima ukuligcina nokuyicubungula kusizindalwazi esivamile. Ngakho-ke, idatha egciniwe ekhethekile yochungechunge lwesikhathi yavela. Lezi zisekelo zigcina amaphuzu ngempumelelo (timestamp, value) ngokhiye onikeziwe. Bahlinzeka nge-API yokufunda idatha egciniwe ngokhiye, ngepheya eyodwa yenani lokhiye, noma ngamapheya amaningi enani lokhiye, noma nge-regexp. Isibonelo, ufuna ukuthola umthwalo we-CPU wazo zonke izinsiza zakho esikhungweni sedatha eMelika, bese udinga ukusebenzisa lo mbuzo mbumbulu.

Imvamisa imininingwane yochungechunge lwesikhathi ihlinzeka ngezilimi zemibuzo ezikhethekile ngoba uchungechunge lwesikhathi lwe-SQL alufaneleki kahle. Nakuba kunemininingwane yolwazi esekela i-SQL, ayifaneleki kakhulu. Izilimi zokubuza njenge I-PromQL, I-InfluxQL, ageleze, Q. Ngethemba ukuthi kukhona oke wezwa okungenani olulodwa lwalezi zilimi. Abantu abaningi kungenzeka bezwile nge-PromQL. Lolu wulimi lombuzo we-Prometheus.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Yilokhu okubukeka sengathi ukwakheka kochungechunge lwesikhathi samanje kusetshenziswa iVictoriaMetrics njengesibonelo.

Iqukethe izingxenye ezimbili. Lesi isitoreji senkomba ehlanekezelwe kanye nesitoreji samanani ochungechunge lwesikhathi. Lezi zindawo zokugcina zihlukanisiwe.

Uma irekhodi elisha lifika kusizindalwazi, siqale sifinyelele inkomba ehlanekezelwe ukuze sithole isihlonzi sochungechunge lwesikhathi sesethi ethile. label=value kumethrikhi ethile. Sithola lesi sihlonzi futhi silondoloze inani esitolo sedatha.

Uma kufika isicelo sokubuyisa idatha ku-TSDB, siqale siye enkombeni ehlanekezelwe. Ake sithole konke timeseries_ids amarekhodi afana naleli sethi label=value. Bese sithola yonke idatha edingekayo kusuka ku-warehouse yedatha, ekhonjwe ngu timeseries_ids.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Ake sibheke isibonelo sokuthi uchungechunge lwesikhathi luwucubungula kanjani umbuzo ongenayo okhethiwe.

  • Okokuqala uthola konke timeseries_ids kusukela kunkomba ehlanekezelwe equkethe amapheya anikeziwe label=value, noma ukwanelisa inkulumo evamile.
  • Bese ibuyisa wonke amaphoyinti edatha kusitoreji sedatha ngesikhathi esinikeziwe salawo atholakele timeseries_ids.
  • Ngemva kwalokhu, isizindalwazi senza izibalo ezithile kulawa maphuzu edatha, ngokuvumelana nesicelo somsebenzisi. Futhi emva kwalokho ibuyisela impendulo.

Kulesethulo ngizokutshela ngengxenye yokuqala. Lolu usesho timeseries_ids ngenkomba ehlanekezelwe. Ungabuka cishe ingxenye yesibili nengxenye yesithathu kamuva Imithombo yeVictoriaMetrics, noma linda ngize ngilungise eminye imibiko :)

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Asiqhubekele enkombeni ehlanekezelwe. Abaningi bangase bacabange ukuthi lokhu kulula. Ubani owaziyo ukuthi iyini inkomba ehlanekezelwe nokuthi isebenza kanjani? Oh, abasebaningi abantu. Ake sizame ukuqonda ukuthi kuyini.

Empeleni ilula. Kumane kuyisichazamazwi esibeka ukhiye wenani. Siyini isihluthulelo? Lo mbhangqwana label=valuekuphi label и value - lena imigqa. Futhi amanani ayisethi timeseries_ids, okuhlanganisa ipheya enikeziwe label=value.

Inkomba ehlanekezelwe ikuvumela ukuthi uthole ngokushesha yonke into timeseries_ids, abanikeze label=value.

Iphinde ikuvumela ukuthi uthole ngokushesha timeseries_ids uchungechunge lwesikhathi lwamapheya amaningana label=value, noma kwabashadile label=regexp. Kwenzeka kanjani lokhu? Ngokuthola ukuhlangana kwesethi timeseries_ids ngepheya ngayinye label=value.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Ake sibheke ukusetshenziswa okuhlukahlukene kwenkomba ehlanekezelwe. Ake siqale ngokuqaliswa okulula kokungazi. Ubukeka kanje.

Umsebenzi getMetricIDs ithola uhlu lwezintambo. Umugqa ngamunye uqukethe label=value. Lo msebenzi ubuyisela uhlu metricIDs.

Isebenza kanjani? Lapha sinenguquko yomhlaba wonke ebizwa ngokuthi invertedIndex. Lesi isichazamazwi esijwayelekile (map), okuzokwenza imephu yentambo ukuze isike ama-ints. Umugqa uqukethe label=value.

Ukuqaliswa komsebenzi: thola metricIDs okokuqala label=value, bese sidlula kukho konke okunye label=value, siyayithola metricIDs kubo. Futhi shayela umsebenzi intersectInts, okuzoxoxwa ngakho ngezansi. Futhi lo msebenzi ubuyisela ukuphambana kwalezi zinhlu.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Njengoba ubona, ukusebenzisa inkomba ehlanekezelwe akuyona inkimbinkimbi kakhulu. Kodwa lokhu ukuqaliswa okungenangqondo. Ibuphi ububi enabo? Ububi obukhulu bokusetshenziswa kokungenangqondo ukuthi inkomba enjalo ehlanekezelwe igcinwa ku-RAM. Ngemva kokuqalisa kabusha uhlelo lokusebenza silahlekelwa yile nkomba. Akukho ukulondolozwa kwale nkomba kudiski. Inkomba enjalo ehlanekezelwe mancane amathuba okuthi ifaneleke kusizindalwazi.

I-drawback yesibili nayo ihlobene nenkumbulo. Inkomba ehlanekezelwe kufanele ilingane ne-RAM. Uma idlula usayizi we-RAM, khona-ke kusobala ukuthi sizophuma - ephutheni lememori. Futhi uhlelo ngeke lusebenze.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Le nkinga ingaxazululwa ngokusebenzisa izixazululo ezenziwe ngomumo njenge IzingaDB, noma I-RocksDB.

Ngamafuphi, sidinga isizindalwazi esivumela ukuthi senze imisebenzi emithathu ngokushesha.

  • Umsebenzi wokuqala uyarekhoda ключ-значение kule database. Ikwenza lokhu ngokushesha okukhulu, lapho ключ-значение ziyizintambo ezingafanele.
  • Umsebenzi wesibili usesho olusheshayo lwevelu usebenzisa ukhiye othile.
  • Futhi umsebenzi wesithathu uwukusesha okusheshayo kwawo wonke amanani ngesiqalo esinikeziwe.

I-LevelDB kanye ne-RocksDB - lezi zingosi zolwazi zakhiwe i-Google kanye ne-Facebook. Kuqale kwafika i-LevelDB. Khona-ke abafana abavela ku-Facebook bathatha i-LevelDB baqala ukuyithuthukisa, benza i-RocksDB. Manje cishe yonke imininingwane yangaphakathi isebenza ku-RocksDB ngaphakathi kwe-Facebook, kuhlanganise naleyo edluliselwe ku-RocksDB kanye ne-MySQL. Bamqamba igama I-MyRocks.

Inkomba ehlanekezelwe ingasetshenziswa kusetshenziswa i-LevelDB. Kwenziwa kanjani? Sigcina njengokhiye label=value. Futhi inani liyinkomba yochungechunge lwesikhathi lapho okubili kukhona khona label=value.

Uma sinochungechunge lwesikhathi oluningi olunepheya esinikeziwe label=value, khona-ke kuzoba nemigqa eminingi kule database enokhiye ofanayo nohlukile timeseries_ids. Ukuze uthole uhlu lwakho konke timeseries_ids, eziqala ngalokhu label=prefix, senza ukuskena kobubanzi lapho le database ithuthukiswe khona. Okusho ukuthi, sikhetha yonke imigqa eqala ngayo label=prefix futhi uthole okudingekayo timeseries_ids.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Nansi isampula yokusetshenziswa yokuthi izobukeka kanjani ku-Go. Sinenkomba ehlanekezelwe. Lokhu kuyi-LevelDB.

Umsebenzi uyafana nowokusebenzisa okungahlakaniphile. Iphinda ukusetshenziswa okungaqondile cishe komugqa ngomugqa. Iphuzu kuphela ukuthi esikhundleni sokuphendukela map sifinyelela inkomba ehlanekezelwe. Sithola wonke amanani okokuqala label=value. Bese sidlula kuwo wonke amapheya asele label=value futhi ubatholele amasethi ahambisanayo ama-metricID. Bese sithola ukuphambana kwemigwaqo.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Konke kubonakala kuhamba kahle, kodwa kunezihibe kulesi sixazululo. I-VictoriaMetrics iqale yasebenzisa inkomba ehlanekezelwe esekelwe ku-LevelDB. Kodwa ekugcineni kwadingeka ngiyiyeke.

Kungani? Ngoba i-LevelDB ihamba kancane kunokuqaliswa kokungenangqondo. Ekusetshenzisweni kokungazi, ngokunikezwa ukhiye onikeziwe, sithola ngokushesha lonke ucezu metricIDs. Lokhu kusebenza ngokushesha kakhulu - lonke ucezu selulungele ukusetshenziswa.

Ku-LevelDB, njalo uma umsebenzi ubizwa GetValues udinga ukudlula yonke imigqa eqala ngayo label=value. Futhi uthole inani lomugqa ngamunye timeseries_ids. Kwabanjalo timeseries_ids qoqa ucezu lwalezi timeseries_ids. Ngokusobala, lokhu kuhamba kancane kunokufinyelela nje kumephu evamile ngokhiye.

I-drawback yesibili ukuthi i-LevelDB ibhalwe kokuthi C. Imisebenzi ye-Calling C esuka ku-Go ayisheshi kakhulu. Kuthatha amakhulukhulu ama-nanoseconds. Lokhu akusheshi kakhulu, ngoba uma kuqhathaniswa nekholi yokusebenza evamile ebhalwe ekuhambeni, ethatha ama-nanoseconds angu-1-5, umehluko ekusebenzeni izikhathi eziyishumi. KuVictoriaMetrics lokhu kwakuyiphutha elibulalayo :)

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Ngakho-ke ngibhale ukuqaliswa kwami ​​​​kwenkomba ehlanekezelwe. Wambiza hlanganisa.

I-Mergeset isuselwe kusakhiwo sedatha ye-MergeTree. Lesi sakhiwo sedatha sibolekwe kwaClickHouse. Ngokusobala, i-mergeset kufanele ilungiselelwe ukusesha okusheshayo timeseries_ids ngokokhiye onikeziwe. I-Mergeset ibhalwe ngokuphelele kokuthi Go. Uyabona Imithombo ye-VictoriaMetrics ku-GitHub. Ukuqaliswa kwe-mergeset kukufolda /lib/mergeset. Ungazama ukuthola ukuthi kwenzekani lapho.

I-mergeset API ifana kakhulu ne-LevelDB ne-RocksDB. Okusho ukuthi, ikuvumela ukuthi ulondoloze ngokushesha amarekhodi amasha lapho futhi ukhethe ngokushesha amarekhodi ngesiqalo esinikeziwe.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Sizokhuluma ngobubi be-mergeset kamuva. Manje ake sikhulume ngokuthi yiziphi izinkinga ezavela nge-VictoriaMetrics ekukhiqizeni lapho kusetshenziswa inkomba ehlanekezelwe.

Kungani zavela?

Isizathu sokuqala izinga eliphezulu le-churn. Kuhunyushelwe olimini lwesiRashiya, lolu wushintsho oluvamile ochungechungeni lwesikhathi. Kulapho uchungechunge lwesikhathi luphela khona futhi kuqala uchungechunge olusha, noma uchungechunge lwesikhathi olusha luqala. Futhi lokhu kwenzeka kaningi.

Isizathu sesibili inombolo enkulu yochungechunge lwesikhathi. Ekuqaleni, lapho ukuqapha kuthola ukuthandwa, inombolo yochungechunge lwesikhathi yayincane. Isibonelo, kukhompuyutha ngayinye udinga ukuqapha i-CPU, inkumbulo, inethiwekhi nomthwalo wediski. 4 uchungechunge lwesikhathi kukhompuyutha ngayinye. Ake sithi unamakhompyutha angu-100 nochungechunge lwesikhathi esingu-400. Kuncane kakhulu lokhu.

Ngokuhamba kwesikhathi, abantu bathola ukuthi bangakwazi ukukala ulwazi oluningi lwe-granular. Isibonelo, linganisa umthwalo hhayi we-processor yonke, kodwa ngokuhlukana kwe-core processor ngayinye. Uma unama-processor cores angu-40, uzoba nochungechunge lwesikhathi esiphindwe izikhathi ezingu-40 ukuze ulinganise umthwalo wokucubungula.

Kodwa akugcini lapho. Iphrosesa ngayinye core ingaba nezifunda ezimbalwa, njengokungenzi lutho, uma ingenzi lutho. Futhi usebenze esikhaleni somsebenzisi, usebenze endaweni ye-kernel nakwezinye izifundazwe. Futhi isimo ngasinye esinjalo singalinganiswa njengochungechunge lwesikhathi oluhlukile. Lokhu ngaphezu kwalokho kwandisa inani lemigqa izikhathi ezingu-7-8.

Kumethrikhi eyodwa sithole 40 x 8 = 320 amamethrikhi ngekhompyutha eyodwa nje. Phindaphinda ngo-100, sithola 32 esikhundleni sika-000.

Kwabe sekufika uKubernetes. Futhi kwaba kubi kakhulu ngoba i-Kubernetes ingasingatha izinsiza eziningi ezahlukahlukene. Isevisi ngayinye e-Kubernetes iqukethe ama-pods amaningi. Futhi konke lokhu kudinga ukugadwa. Ngaphezu kwalokho, sinokuphakelwa okuqhubekayo kwezinguqulo ezintsha zamasevisi akho. Ngenguqulo entsha ngayinye, uchungechunge lwesikhathi olusha kufanele ludalwe. Ngenxa yalokho, inani lochungechunge lwesikhathi likhula ngokuqhubekayo futhi sibhekene nenkinga yenombolo enkulu yochungechunge lwesikhathi, olubizwa ngokuthi i-high-cardinality. I-VictoriaMetrics ibhekana nayo ngempumelelo uma iqhathaniswa nezinye izingosi zedatha yochungechunge lwesikhathi.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Ake sibhekisise izinga eliphezulu le-churn. Yini edala izinga eliphezulu lokukhiqiza? Ngoba ezinye izincazelo zamalebula namathegi zihlala zishintsha.

Isibonelo, thatha i-Kubernetes, enomqondo deployment, okungukuthi uma inguqulo entsha yohlelo lwakho lokusebenza ikhishwa. Ngesizathu esithile, abathuthukisi be-Kubernetes banqume ukungeza i-id yokusebenzisa kulebula.

Lokhu kwaholelaphi? Ngaphezu kwalokho, ngokusetshenziswa okusha ngakunye, lonke uchungechunge lwesikhathi esidala luyaphazamiseka, futhi esikhundleni salo, uchungechunge lwesikhathi olusha luqala ngevelu entsha yelebula. deployment_id. Kungaba ngamakhulu ezinkulungwane ngisho nezigidi zemigqa enjalo.

Okubalulekile ngakho konke lokhu ukuthi ingqikithi yenani lochungechunge lwesikhathi liyakhula, kodwa inani lochungechunge lwesikhathi olusebenzayo okwamanje nolwamukelayo idatha lihlala lingashintshi. Lesi simo sibizwa ngezinga eliphezulu lokuchusha.

Inkinga enkulu yezinga eliphezulu le-churn ukuqinisekisa isivinini sokusesha esingaguquki salo lonke uchungechunge lwesikhathi sesethi ethile yamalebula ngesikhathi esithile. Ngokuvamile lesi isikhawu sesikhathi sehora lokugcina noma usuku lokugcina.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Indlela yokuxazulula le nkinga? Nansi inketho yokuqala. Lokhu okokwehlukanisa inkomba ehlanekezelwe ibe izingxenye ezizimele ngokuhamba kwesikhathi. Okusho ukuthi, ukudlula kwesikhathi esithile, siqeda ukusebenza nenkomba yamanje ehlanekezelwe. Futhi dala inkomba entsha ehlanekezelwe. Esinye isikhawu siyadlula, sidala esinye nesinye.

Futhi lapho sithatha isampula kulezi zinkomba ezihlanekezelwe, sithola isethi yezinkomba ezihlanekezelwe eziwela phakathi kwesikhawu esinikeziwe. Futhi, ngokufanele, sikhetha i-id yochungechunge lwesikhathi kusuka lapho.

Lokhu konga izinsiza ngoba akudingekile ukuthi sibheke izingxenye ezingaweli phakathi nesikhathi esinikeziwe. Okusho ukuthi, ngokuvamile, uma sikhetha idatha yehora lokugcina, lapho-ke ngezikhathi zangaphambilini seqa imibuzo.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Kukhona enye inketho yokuxazulula le nkinga. Lokhu okokugcina usuku ngalunye uhlu oluhlukile lwama-id ochungechunge lwesikhathi olwenzeka ngalolo suku.

Inzuzo yalesi sixazululo ngaphezu kwesixazululo sangaphambilini ukuthi asiphindaphindi ulwazi lochungechunge lwesikhathi olungashabalali ngokuhamba kwesikhathi. Bahlala bekhona futhi abashintshi.

Okubi ukuthi isisombululo esinjalo sinzima kakhulu ukusisebenzisa futhi kunzima kakhulu ukusisusa. Futhi i-VictoriaMetrics ikhethe lesi sixazululo. Kwenzeka kanjena ngokomlando. Lesi sixazululo futhi senza kahle uma siqhathaniswa nesedlule. Ngoba lesi sixazululo asizange sisetshenziswe ngenxa yokuthi kuyadingeka ukuphinda idatha engxenyeni ngayinye yochungechunge lwesikhathi olungashintshi, okungukuthi olungashabalali ngokuhamba kwesikhathi. I-VictoriaMetrics yenzelwe ukusetshenziswa kwesikhala sediski, futhi ukuqaliswa kwangaphambilini kwenza ukusetshenziswa kwesikhala sediski kwaba kubi kakhulu. Kodwa lokhu kuqaliswa kulungele kangcono ukunciphisa ukusetshenziswa kwesikhala sediski, ngakho kwakhethwa.

Kwadingeka ngilwe naye. Umzabalazo wawuwukuthi kulokhu kuqaliswa kusadingeka ukhethe inombolo enkulu kakhulu timeseries_ids kudatha kunalapho inkomba ehlanekezelwe ihlukaniswa isikhathi.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Siyixazulule kanjani le nkinga? Siyixazulule ngendlela yokuqala - ngokugcina izihlonzi zochungechunge lwezikhathi ezimbalwa kunkomba ngayinye ehlanekezelwe esikhundleni sesihlonzi esisodwa. Okungukuthi, sinokhiye label=value, okwenzeka ngaso sonke isikhathi uchungechunge. Futhi manje sigcina eziningana timeseries_ids ekungeneni okukodwa.

Nasi isibonelo. Ngaphambilini besinokufakwa okungu-N, kodwa manje sesinokufakwa okukodwa okunesiqalo esifana nazo zonke ezinye. Kokufakwayo kwangaphambilini, inani liqukethe ama-id ochungechunge lwesikhathi.

Lokhu kwenze kwaba nokwenzeka ukwandisa isivinini sokuskena senkomba enjalo ehlanekezelwe izikhathi ezifika kweziyi-10. Futhi kwasivumela ukuthi sinciphise ukusetshenziswa kwememori kunqolobane, ngoba manje sigcina intambo label=value kanye kuphela kunqolobane ndawonye izikhathi ezingu-N. Futhi lo mugqa ungaba mkhulu uma ugcina imigqa emide kumathegi namalebula akho, uKubernetes athanda ukuwashova lapho.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Enye inketho yokusheshisa ukusesha kunkomba ehlanekezelwe i-sharding. Ukudala izinkomba ezimbalwa ezihlanekezelwe esikhundleni seyodwa bese ukwaba idatha phakathi kwazo ngokhiye. Lena isethi key=value umusi. Okusho ukuthi, sithola izinkomba ezimbalwa ezizimele ezihlanekezelwe, esingazibuza ngokufana kumaphrosesa amaningana. Ukusetshenziswa kwangaphambilini kuvumele ukusebenza kumodi yokucubungula okukodwa, okungukuthi, ukuskena idatha kumongo owodwa kuphela. Lesi sixazululo sikuvumela ukuthi uskene idatha kuma-cores amaningana ngesikhathi esisodwa, njengoba i-ClickHouse ithanda ukwenza. Yilokhu esihlela ukukusebenzisa.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Manje ake sibuyele ezimvini zethu - emsebenzini wokuhlangana timeseries_ids. Ake sicabangele ukuthi yikuphi ukuqaliswa okungenzeka kube khona. Lo msebenzi ikuvumela ukuba uthole timeseries_ids okwesethi enikeziwe label=value.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Inketho yokuqala ukuqaliswa okungenangqondo. Izihibe ezimbili ezifakiwe. Lapha sithola okokufaka komsebenzi intersectInts izingcezu ezimbili - a и b. Ekukhipheni, kufanele ibuyisele kithi impambana yalezi zingcezu.

Ukuqaliswa okungenangqondo kubukeka kanje. Siphindaphinda wonke amanani kusuka kucezu a, ngaphakathi kwale loop sidlula kuwo wonke amanani ocezu b. Futhi siyabaqhathanisa. Uma zifana, khona-ke sesiyitholile impambanamgwaqo. Futhi uyigcine phakathi result.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Yimiphi imibi? I-Quadratic complexity iwumphumela wayo oyinhloko. Isibonelo, uma izilinganiso zakho zisikiwe a и b isigidi esisodwa ngesikhathi, khona-ke lo msebenzi awusoze wabuyisela impendulo kuwe. Ngoba izodinga ukwenza ama-trillion aphindwe kabili, okuyinto enkulu ngisho namakhompyutha anamuhla.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Ukuqaliswa kwesibili kusekelwe kumephu. Sakha imephu. Sifaka wonke amanani kusuka kucezu kule mephu a. Bese sidlula ucezu ku-loop ehlukile b. Futhi sihlola ukuthi leli nani livela kucezu yini b kumephu. Uma ikhona, yengeze kumphumela.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Yiziphi izinzuzo? Inzuzo ukuthi kukhona inkimbinkimbi yomugqa kuphela. Okusho ukuthi, umsebenzi uzokhipha ngokushesha izingcezu ezinkulu. Ngocezu losayizi oyisigidi, lo msebenzi uzosebenza ngokuphindaphinda okuyizigidi ezingu-2, ngokungafani namatriliyoni aphindaphindayo womsebenzi wangaphambilini.

Okubi ukuthi lo msebenzi udinga inkumbulo eyengeziwe ukuze udale le mephu.

I-drawback yesibili yi-overhead enkulu ye-hashing. Lokhu kuhoxa akubonakali kakhulu. Futhi kithina kwakungabonakali kakhulu, ngakho-ke ekuqaleni ku-VictoriaMetrics ukuqaliswa kokuphambana kwemigwaqo kwakungemephu. Kodwa-ke ukwenza iphrofayela kubonise ukuthi isikhathi esiyinhloko sokucubungula sichithwa kubhalwe kumephu futhi kubhekwa ubukhona bevelu kule mephu.

Kungani isikhathi se-CPU sichithwa kulezi zindawo? Ngoba i-Go yenza umsebenzi we-hashing kule migqa. Okusho ukuthi, ibala i-hash yokhiye ukuze ifinyelele kuyo enkombeni enikeziwe ku-HashMap. Ukusebenza kokubala kwe-hashi kuqedwa kumashumi ama-nanoseconds. Lokhu kuhamba kancane ku-VictoriaMetrics.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Nginqume ukusebenzisa i-bitset elungiselelwe leli cala. Yilokhu okubukeka manje ukuphambana kwezingcezu ezimbili. Lapha sakha i-bitset. Sifaka izakhi kusuka esiqeshini sokuqala kuso. Bese sihlola ukuba khona kwalezi zakhi engxenyeni yesibili. Futhi wengeze kumphumela. Okungukuthi, cishe akuhlukile esibonelweni sangaphambilini. Okuwukuphela kwento lapha ukuthi simiselele ukufinyelela kumephu ngemisebenzi yangokwezifiso add и has.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Uma uthi nhlá, kubonakala sengathi lokhu kufanele kusebenze kancane, uma ngaphambilini ibalazwe elivamile lalisetshenziswa lapho, bese kuthiwa eminye imisebenzi, kodwa ukwenza iphrofayela kubonisa ukuthi le nto isebenza ngokushesha izikhathi ezingu-10 kunemephu evamile esimweni se-VictoriaMetrics.

Ngaphezu kwalokho, isebenzisa inkumbulo encane kakhulu uma iqhathaniswa nokusetshenziswa kwemephu. Ngoba sigcina amabhithi lapha esikhundleni samanani amabhayithi ayisishiyagalombili.

Ububi balokhu kuqaliswa ukuthi akubonakali kangako, akuyona into encane.

Esinye isici esingahle singaqapheli abaningi ukuthi lokhu kuqaliswa kungase kungasebenzi kahle kwezinye izimo. Okusho ukuthi, ithuthukiselwe icala elithile, kuleli cala lokuphambana kwe-ID yochungechunge lwesikhathi lwe-VictoriaMetrics. Lokhu akusho ukuthi ilungele wonke amacala. Uma isetshenziswe ngokungalungile, ngeke sithole ukukhushulwa kokusebenza, kodwa iphutha lokuphuma kwenkumbulo nokwehla kokusebenza.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Ake sicabangele ukuqaliswa kwalesi sakhiwo. Uma ufuna ukubheka, itholakala kumithombo ye-VictoriaMetrics, kufolda lib/uint64set. Ilungiselelwe ngokukhethekile icala le-VictoriaMetrics, lapho timeseries_id iyinani lamabhithi angu-64, lapho amabhithi okuqala angu-32 ehlala njalo futhi kuphela amabhithi angu-32 okugcina ashintshayo.

Lesi sakhiwo sedatha asigcinwa kudiski, sisebenza kumemori kuphela.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Nansi i-API yayo. Akuyona inkimbinkimbi kakhulu. I-API yakhelwe ngokukhethekile isibonelo esithile sokusebenzisa i-VictoriaMetrics. Okusho ukuthi, ayikho imisebenzi engadingekile lapha. Nansi imisebenzi esetshenziswa ngokusobala yi-VictoriaMetrics.

Kukhona imisebenzi add, okwengeza amanani amasha. Kukhona umsebenzi has, ehlola amanani amasha. Futhi kukhona umsebenzi del, okususa amanani. Kukhona umsebenzi womsizi len, ebuyisela usayizi wesethi. Umsebenzi clone ama-clones amaningi. Futhi umsebenzi appendto iguqula le sethi ibe isiqeshana timeseries_ids.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Yile ndlela ukuqaliswa kwalesi sakhiwo sedatha kubukeka ngayo. isethi inezici ezimbili:

  • ItemsCount iyinkambu yomsizi yokubuyisela ngokushesha inani lezakhi kusethi. Bekungenzeka ukwenza ngaphandle kwale nkambu eyinsiza, kodwa bekufanele yengezwe lapha ngoba i-VictoriaMetrics ivamise ukubuza ubude be-bitset kuma-algorithms ayo.

  • Inkambu yesibili buckets. Lona ucezu olusuka esakhiweni bucket32. Isakhiwo ngasinye sigcina hi inkambu. Lawa amabhithi aphezulu angama-32. Futhi izingcezu ezimbili - b16his и buckets kusuka ku bucket16 izakhiwo.

Amabhithi aphezulu angu-16 engxenye yesibili yesakhiwo se-64-bit agcinwe lapha. Futhi lapha amabhithi agcinelwa amabhithi angu-16 aphansi ebhayithi ngayinye.

Bucket64 iqukethe uhlu uint64. Ubude bubalwa kusetshenziswa lezi zilinganiso ezingaguquki. Kokunye bucket16 esiphezulu singagcinwa 2^16=65536 kancane. Uma uhlukanisa lokhu ngo-8, kusho ukuthi amakhilobhayithi angu-8. Uma uhlukanisa ngo-8 futhi, yi-1000 uint64 incazelo. Leyo Bucket16 – lesi yisakhiwo sethu esingamakhilobhayithi angu-8.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Ake sibheke ukuthi enye yezindlela zalesi sakhiwo yokwengeza inani elisha isetshenziswa kanjani.

Konke kuqala nge uint64 izincazelo. Sibala ama-bits angu-32 aphezulu, sibala ama-bits angu-32 aphansi. Ake sidlule kukho konke buckets. Siqhathanisa amabhithi aphezulu angu-32 ebhakedeni ngalinye nenani elengeziwe. Futhi uma zihambisana, sibiza umsebenzi add esakhiweni b32 buckets. Bese wengeza amabhithi angama-32 aphansi lapho. Futhi uma ibuyile true, khona-ke lokhu kusho ukuthi sengeze inani elinjalo lapho futhi asizange sibe nenani elinjalo. Uma ibuya false, khona-ke incazelo enjalo isivele ikhona. Bese sikhulisa inani lezakhi esakhiweni.

Uma singakayitholi oyidingayo bucket nge-hi-value edingekayo, bese sibiza umsebenzi addAlloc, ezokhiqiza entsha bucket, ukuyifaka esakhiweni sebhakede.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Lokhu ukuqaliswa komsebenzi b32.add. Kuyafana nokuqaliswa kwangaphambilini. Sibala amabhithi ayi-16 abaluleke kakhulu, okungenani amabhithi ayi-16 abalulekile.

Bese sidlula kuwo wonke ama-bits angu-16 aphezulu. Sithola okufanayo. Futhi uma kukhona okufanayo, sibiza indlela yokwengeza, esizoyicabangela ekhasini elilandelayo bucket16.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Futhi nali izinga eliphansi kakhulu, okufanele lenziwe libe ngcono ngangokunokwenzeka. Sibala for uint64 inani le-id ku-slice bit futhi futhi bitmask. Lena imaski yenani le-64-bit elinikeziwe, elingasetshenziswa ukuhlola ubukhona bale bit, noma ukuyisetha. Siyahlola ukuze sibone ukuthi ingabe le bhithi isethiwe futhi iyayisetha, bese sibuyisela ubukhona. Lokhu ukusebenzisa kwethu, okusivumele ukuthi sisheshise ukusebenza kwama-id aphambanayo ochungechunge lwesikhathi izikhathi ezingu-10 uma kuqhathaniswa namamephu avamile.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Ngokungeziwe kulokhu kulungiselelwa, i-VictoriaMetrics inokunye okuningi okulungiselelwe. Okuningi kwalokhu kulungiselelwa kwengezwe ngesizathu, kodwa ngemva kokwenza iphrofayela ekukhiqizeni.

Lona umthetho oyinhloko wokwenza ngokugcwele - ungangezi ukwenza kahle ucabange ukuthi kuzoba nebhodlela lapha, ngoba kungase kuvele ukuthi ngeke kube khona ibhodlela lapho. Ukuthuthukisa kuvame ukululaza ikhwalithi yekhodi. Ngakho-ke, kufanelekile ukukhulisa kuphela ngemuva kokuphrofayili futhi okungcono ekukhiqizeni, ukuze lokhu kube idatha yangempela. Uma kukhona onentshisekelo, ungabheka ikhodi yomthombo ye-VictoriaMetrics futhi uhlole okunye ukulungiselelwa okukhona.

Hamba ukulungiselelwa ku-VictoriaMetrics. Alexander Valyalkin

Nginombuzo mayelana ne-bitset. Ifana kakhulu nokuqaliswa kwe-bool ye-C++ vector, i-bitset elungiselelwe. Ingabe ukuthathele ukuqaliswa kusukela lapho?

Cha, hhayi lapho. Lapho ngisebenzisa le-bitset, ngangiqondiswa ulwazi lwesakhiwo salezi zikhathi zama-ID, ezisetshenziswa ku-VictoriaMetrics. Futhi ukwakheka kwabo kunjengoba ama-bits angama-32 aphezulu ahlala njalo. Amabhithi angu-32 aphansi angase ashintshe. I-bit encane, ingashintsha kaningi. Ngakho-ke, lokhu kuqaliswa kulungiselelwe ngokukhethekile lesi sakhiwo sedatha. Ukuqaliswa kwe-C++, ngokwazi kwami, kulungiselelwe icala elijwayelekile. Uma ulungiselela icala elijwayelekile, lokhu kusho ukuthi ngeke libe elifanele kakhulu icala elithile.

Ngikweluleka futhi ukuthi ubuke umbiko ka-Alexey Milovid. Cishe inyanga edlule, wakhuluma ngokwenza kahle ku-ClickHouse ukuze uthole amakhono athile. Uvele athi esimweni esivamile, ukuqaliswa kwe-C ++ noma okunye ukuqaliswa kwenzelwe ukusebenza kahle ngokwesilinganiso esibhedlela. Ingase yenze kabi kakhulu kunokusebenzisa ulwazi oluthile olufana nolwethu, lapho sazi khona ukuthi amabhithi aphezulu angu-32 ahlala njalo.

Nginombuzo wesibili. Uyini umehluko obalulekile ku-InfluxDB?

Kunokwehluka okuningi okuyisisekelo. Mayelana nokusebenza kanye nokusetshenziswa kwenkumbulo, i-InfluxDB ekuhlolweni ibonisa ukusetshenziswa kwememori okuphindwe izikhathi ezingu-10 ochungechungeni lwesikhathi lwekhadinali, lapho unenqwaba yazo, isibonelo, izigidi. Isibonelo, i-VictoriaMetrics idla u-1 GB ngemigqa esebenzayo eyisigidi, kuyilapho i-InfluxDB idla u-10 GB. Futhi lokho umehluko omkhulu.

Umehluko wesibili obalulekile ukuthi i-InfluxDB inezilimi zemibuzo exakile - i-Flux ne-InfluxQL. Akulula kakhulu ukusebenza nochungechunge lwesikhathi uma kuqhathaniswa I-PromQL, esekelwa yi-VictoriaMetrics. I-PromQL iwulimi lombuzo oluvela ku-Prometheus.

Futhi omunye umehluko ukuthi i-InfluxDB inemodeli yedatha engajwayelekile, lapho umugqa ngamunye ungagcina izinkambu ezimbalwa ngesethi ehlukile yomaka. Le migqa iphinde ihlukaniswe ngamathebula ahlukahlukene. Lezi zinkinga ezengeziwe zixaka umsebenzi olandelayo nale database. Kunzima ukusekela nokuqonda.

Ku-VictoriaMetrics yonke into ilula kakhulu. Lapho, uchungechunge lwesikhathi ngasinye luyivelu elingukhiye. Inani isethi yamaphoyinti - (timestamp, value), futhi ukhiye yisethi label=value. Akukho ukuhlukana phakathi kwezinkambu nezilinganiso. Ikuvumela ukuthi ukhethe noma iyiphi idatha bese uhlanganisa, wengeze, ukhipha, wande, uhlukanise, ngokungafani ne-InfluxDB lapho izibalo phakathi kwemigqa ehlukene zingakasetshenziswa ngokwazi kwami. Ngisho noma zisetshenziswa, kunzima, kufanele ubhale amakhodi amaningi.

Nginombuzo ocacisayo. Ngabe ngiqonde kahle ukuthi kube nohlobo oluthile lwenkinga okhulume ngayo, ukuthi le nkomba ehlanekezelwe ayingeni enkumbulweni, ngakho-ke kukhona ukwahlukanisa lapho?

Okokuqala, ngibonise ukusetshenziswa okungenangqondo kwenkomba ehlanekezelwe kumephu ye-Go ejwayelekile. Lokhu kusebenzisa akuzifanele izizindalwazi ngoba le nkomba ehlanekezelwe ayilondolozwa kudiski, futhi isizindalwazi kufanele silondolozwe kudiski ukuze le datha ihlale itholakala lapho iqalwa kabusha. Kulokhu kuqaliswa, uma uqala kabusha uhlelo, inkomba yakho ehlanekezelwe izonyamalala. Futhi uzolahlekelwa ukufinyelela kuyo yonke idatha ngoba ngeke ukwazi ukuyithola.

Sawubona! Siyabonga ngombiko! Igama lami nginguPavel. Ngivela e-Wildberries. Ngikubuze imibuzo embalwa. Umbuzo owodwa. Ingabe ucabanga ukuthi ukube ubukhethe isimiso esihlukile lapho wakha ukwakheka kohlelo lwakho lokusebenza futhi uhlukanisa idatha ngokuhamba kwesikhathi, mhlawumbe ubuzokwazi ukuphambana nedatha lapho usesha, ngokusekelwe eqinisweni lokuthi ingxenye eyodwa iqukethe idatha eyodwa isikhathi , okungukuthi, ngesikhathi esisodwa futhi ubungeke ukhathazeke ngokuthi izingcezu zakho zihlakazeke ngokuhlukile? Inombolo yombuzo 2 - njengoba usebenzisa i-algorithm efanayo nge-bitset nakho konke okunye, mhlawumbe uzame ukusebenzisa imiyalelo yephrosesa? Mhlawumbe uke wazama ukulungiselelwa okunjalo?

Ngizophendula owesibili ngokushesha. Asikafiki kulelo qophelo. Kodwa uma kunesidingo, sizofika lapho. Futhi owokuqala, wawuyini umbuzo?

Nixoxe ngezimo ezimbili. Futhi bathi bakhethe eyesibili enokuqaliswa okuyinkimbinkimbi. Futhi abakhethanga eyokuqala, lapho idatha ihlukaniswa khona ngesikhathi.

Yebo. Esimweni sokuqala, ingqikithi yevolumu yenkomba ingaba nkulu, ngoba ekwahlukaniseni ngakunye kuzodingeka sigcine idatha eyimpinda yalolo chungechunge lwesikhathi oluqhubeka kuzo zonke lezi zihlukanisi. Futhi uma izinga le-churn yochungechunge lwakho lwesikhathi lilincane, okungukuthi uchungechunge olufanayo luhlala lusetshenziswa, lapho-ke esimweni sokuqala singalahlekelwa kakhulu kunani lesikhala sediski esithathiwe uma siqhathaniswa nesesibili.

Futhi ngakho-yebo, ukwahlukanisa isikhathi kuyindlela enhle. U-Prometheus uyayisebenzisa. Kodwa u-Prometheus unenye inkinga. Lapho uhlanganisa lezi zingcezu zedatha, idinga ukugcina kumemori ulwazi lwemetha yawo wonke amalebula nochungechunge lwezikhathi. Ngakho-ke, uma izingcezu zedatha ezihlanganisayo zizinkulu, ukusetshenziswa kwememori kukhula kakhulu ngesikhathi sokuhlanganisa, ngokungafani ne-VictoriaMetrics. Lapho ihlanganiswa, i-VictoriaMetrics ayidli nhlobo inkumbulo; kusetshenziswe amakhilobhayithi ambalwa kuphela, kungakhathaliseki ukuthi ungakanani usayizi wezingcezu zedatha ezihlanganisiwe.

I-algorithm oyisebenzisayo isebenzisa inkumbulo. Imaka omaka bochungechunge lwesikhathi oluqukethe amanani. Futhi ngale ndlela uhlola ubukhona obubhanqiwe ohlwini olulodwa lwedatha nakwelinye. Futhi uyaqonda ukuthi i-intersect yenzeka noma cha. Ngokuvamile, izizindalwazi zisebenzisa amakhesa neziphindaphinda ezigcina okuqukethwe kwazo kwamanje futhi zidlule kudatha ehlungiwe ngenxa yobunkimbinkimbi obulula balokhu kusebenza.

Kungani singasebenzisi izikhombisi ukuze sinqamule idatha?

Yebo.

Sigcina imigqa ehlungiwe ku-LevelDB noma i-mergeset. Singakwazi ukuhambisa ikhesa futhi sithole impambana-mgwaqo. Kungani singayisebenzisi? Ngoba ihamba kancane. Ngoba izikhombisi zisho ukuthi udinga ukushayela umsebenzi womugqa ngamunye. Ikholi yokusebenza ingamasekhondi angu-5. Futhi uma unemigqa engu-100, bese kuvela ukuthi sichitha uhhafu wesekhondi sibiza umsebenzi.

Kukhona into enjalo, yebo. Nombuzo wami wokugcina. Umbuzo ungase uzwakale uyinqaba. Kungani kungenakwenzeka ukufunda zonke izilinganiso ezidingekayo ngesikhathi idatha ifika futhi igcinwe ngendlela edingekayo? Kungani ulondoloza amavolumu amakhulu kwezinye izinhlelo ezifana ne-VictoriaMetrics, i-ClickHouse, njll., bese uchitha isikhathi esiningi kukho?

Ngizonikeza isibonelo ukuze kucace. Ake sithi ithoyizi elincane lokubonisa izinga lejubane lisebenza kanjani? Irekhoda ibanga olihambile, ngaso sonke isikhathi ingeza inani elilodwa, futhi okwesibili - isikhathi. Futhi ihlukanisa. Futhi ithola isivinini esimaphakathi. Ungenza into efanayo. Hlanganisa wonke amaqiniso adingekayo ekuhambeni.

Kulungile, ngiyawuqonda umbuzo. Isibonelo sakho sinendawo yaso. Uma wazi ukuthi yiziphi izilinganiso ozidingayo, khona-ke lokhu ukuqaliswa okungcono kakhulu. Kodwa inkinga ukuthi abantu balondoloza lawa mamethrikhi, enye idatha ku-ClickHouse futhi abazi okwamanje ukuthi bazowahlanganisa kanjani futhi bawahlunge ngokuzayo, ngakho kufanele balondoloze yonke idatha eluhlaza. Kodwa uma wazi ukuthi udinga ukubala okuthile ngokwesilinganiso, kungani ungakubali esikhundleni sokugcina inqwaba yamanani aluhlaza lapho? Kodwa lokhu kuphela uma wazi kahle ukuthi yini oyidingayo.

Kodwa-ke, imininingo egciniwe yokugcina uchungechunge lwesikhathi isekela ukubalwa kwama-aggregate. Ngokwesibonelo, Prometheus isekela imithetho yokuqopha. Okusho ukuthi, lokhu kungenziwa uma wazi ukuthi yimaphi amayunithi ozowadinga. I-VictoriaMetrics ayinakho lokhu okwamanje, kodwa ngokuvamile yandulelwa yi-Prometheus, lapho lokhu kungenziwa khona emithethweni yokurekhoda.

Isibonelo, emsebenzini wami wangaphambilini bengidinga ukubala inani lemicimbi efasiteleni elislayidayo ngehora eledlule. Inkinga ukuthi bekufanele ngenze ukuqaliswa ngokwezifiso ku-Go, okungukuthi isevisi yokubala le nto. Le sevisi ekugcineni ibingeyona into encane, ngoba kunzima ukuyibala. Ukusebenzisa kungase kube lula uma udinga ukubala izilinganiso ezithile ngezikhathi ezimisiwe. Uma ufuna ukubala imicimbi efasiteleni elishelelayo, khona-ke akulula njengoba kubonakala. Ngicabanga ukuthi lokhu akukakasetshenziswa ku-ClickHouse noma kuma-timeseries database, ngoba kunzima ukukusebenzisa.

Futhi omunye umbuzo. Sasikhuluma nje ngokwesilinganiso, futhi ngakhumbula ukuthi kwake kwaba khona into efana neGraphite ene-Carbon backend. Futhi wayazi indlela yokunciphisa idatha endala, okungukuthi, shiya iphuzu elilodwa ngomzuzu, iphuzu elilodwa ngehora, njll. Empeleni, lokhu kulula kakhulu uma sidinga idatha eluhlaza, uma kuqhathaniswa, inyanga, nakho konke okunye kungakwazi. kuncishiswe . Kodwa i-Prometheus ne-VictoriaMetrics ayikusekeli lokhu kusebenza. Ingabe kuhlelwe ukuyisekela? Uma kungenjalo, kungani kungenjalo?

Ngiyabonga ngombuzo. Abasebenzisi bethu babuza lo mbuzo ngezikhathi ezithile. Babuza ukuthi sizokwengeza nini ukwesekwa kwe-downsampling. Kunezinkinga ezimbalwa lapha. Okokuqala, wonke umsebenzisi uyaqonda downsampling okuthile okuhlukile: othile ufuna ukuthola noma yiliphi iphuzu elingenasizathu ngesikhathi esinikeziwe, othile ufuna amanani aphezulu, amancane, amaphakathi. Uma amasistimu amaningi ebhala idatha kusizindalwazi sakho, awukwazi ukuhlanganisa konke ndawonye. Kungenzeka ukuthi uhlelo ngalunye ludinga ukuncipha okuhlukile. Futhi lokhu kunzima ukukusebenzisa.

Futhi into yesibili ukuthi i-VictoriaMetrics, njenge-ClickHouse, ilungiselelwe ukusebenza ngenani elikhulu ledatha eluhlaza, ngakho-ke ingashova imigqa yebhiliyoni ngaphansi kwesekhondi uma unama-cores amaningi ohlelweni lwakho. Amaphoyinti ochungechunge lwesikhathi sokuskena ku-VictoriaMetrics - amaphoyinti angu-50 ngesekhondi ngayinye core. Futhi lokhu kusebenza kukala kuma-cores akhona. Okusho ukuthi, uma unama-cores angama-000, ngokwesibonelo, uzoskena amaphuzu ayizigidi eziyinkulungwane ngomzuzwana. Futhi lesi sakhiwo se-VictoriaMetrics ne-ClickHouse sinciphisa isidingo sokwehlisa.

Esinye isici ukuthi i-VictoriaMetrics icindezela ngempumelelo le datha. Ukucindezelwa ngokwesilinganiso ekukhiqizeni kusuka ku-0,4 kuya ku-0,8 bytes ngephoyinti. Iphuzu ngalinye liyisitembu sesikhathi + inani. Futhi iminyaniswe ibe ngaphansi kwebhayithi eyodwa ngokwesilinganiso.

Sergey. Nginombuzo. Ingakanani i-quantum yesikhathi esincane sokurekhoda?

I-millisecond eyodwa. Sisanda kuba nengxoxo nabanye abathuthukisi besizindalwazi sochungechunge lwesikhathi. Ucezu lwabo lwesikhathi esincane luyisekhondi elilodwa. Futhi ku-Graphite, isibonelo, futhi isekhondi elilodwa. Ku-OpenTSDB futhi isekhondi elilodwa. I-InfluxDB inokunemba kwe-nanosecond. Ku-VictoriaMetrics iyi-millisecond eyodwa, ngoba ku-Prometheus iyi-millisecond eyodwa. Futhi i-VictoriaMetrics ekuqaleni yathuthukiswa njengendawo yokugcina kude ye-Prometheus. Kodwa manje isingakwazi ukulondoloza idatha evela kwamanye amasistimu.

Umuntu engikhulume naye uthi unokunemba kwesibili kuya kwesibili - lokho kwanele kubo ngoba kuya ngohlobo lwedatha egcinwa kusizindalwazi sochungechunge lwesikhathi. Uma lokhu kuyidatha ye-DevOps noma idatha evela kungqalasizinda, lapho uyiqoqa khona ngezikhathi ezithile amasekhondi angu-30, ngomzuzu, khona-ke ukunemba kwesibili kwanele, awudingi lutho oluncane. Futhi uma uqoqa le datha kusuka ezinhlelweni zokuhweba zemvamisa ephezulu, udinga ukunemba kwe-nanosecond.

Ukunemba kwe-Milisecond ku-VictoriaMetrics nakho kufanelekile kucala le-DevOps, futhi kungafanelekela izimo eziningi engizishilo ekuqaleni kombiko. Okuwukuphela kwento engase ingafaneleki kukho izinhlelo zokuhweba ezivamile.

Ngiyabonga! Futhi omunye umbuzo. Kuyini ukuhambisana ku-PromQL?

Ukuhambisana okugcwele emuva. I-VictoriaMetrics isekela ngokugcwele i-PromQL. Ngaphezu kwalokho, ingeza ukusebenza okwengeziwe okuthuthukile ku-PromQL, okubizwa ngokuthi I-MetricsQL. Kunenkulumo ku-YouTube mayelana nalokhu kusebenza okunwetshiwe. Ngakhuluma ku-Monitoring Meetup entwasahlobo eSt.

Isiteshi socingo I-VictoriaMetrics.

Abasebenzisi ababhalisiwe kuphela abangabamba iqhaza kuhlolovo. Ngena ngemvume, wamukelekile.

Yini ekuvimbela ukuthi ushintshele ku-VictoriaMetrics njengesitoreji sakho sesikhathi eside se-Prometheus? (Bhala emazwaneni, ngizokwengeza okhethweni))

  • 71,4%Angisebenzisi i-Prometheus5

  • 28,6%Bengingazi nge-VictoriaMetrics2

Bangu-7 abasebenzisi abavotile. Abasebenzisi abangu-12 bagobile.

Source: www.habr.com

Engeza amazwana