ClickHouse pieredzÄjuÅ”iem lietotÄjiem jautÄjumos un atbildÄs
AprÄ«lÄ« Avito inženieri pulcÄjÄs uz tieÅ”saistes tikÅ”anos ar galveno ClickHouse izstrÄdÄtÄju Alekseju Milovidovu un Kirilu Å vakovu, Golang izstrÄdÄtÄju no Integros. PÄrrunÄjÄm, kÄ lietojam datu bÄzes pÄrvaldÄ«bas sistÄmu un ar kÄdÄm grÅ«tÄ«bÄm saskaramies.
Pamatojoties uz tikÅ”anos, esam izveidojuÅ”i rakstu ar ekspertu atbildÄm uz mÅ«su un auditorijas jautÄjumiem par dublÄÅ”anu, datu atkÄrtotu sadalÄ«Å”anu, ÄrÄjÄm vÄrdnÄ«cÄm, Golang draiveri un ClickHouse versiju atjauninÄÅ”anu. Tas var bÅ«t noderÄ«gi izstrÄdÄtÄjiem, kuri jau aktÄ«vi strÄdÄ ar Yandex DBVS un interesÄjas par tÄs tagadni un nÄkotni. PÄc noklusÄjuma atbildes sniedz Aleksejs Milovidovs, ja vien nav rakstÄ«ts citÄdi.
Esiet uzmanÄ«gi, zem griezuma ir daudz teksta. MÄs ceram, ka saturs ar jautÄjumiem palÄ«dzÄs jums orientÄties.
Ja nevÄlaties lasÄ«t tekstu, varat noskatÄ«ties sanÄksmju ierakstu mÅ«su YouTube kanÄlÄ. Laika kodi ir pirmajÄ komentÄrÄ zem video.
ClickHouse tiek pastÄvÄ«gi atjauninÄts, bet mÅ«su dati netiek atjauninÄti. Ko darÄ«t ar to?
ClickHouse tiek pastÄvÄ«gi atjauninÄts, un mÅ«su dati, kas tika optimizÄti galÄ«gi apstrÄdÄti, netiek atjauninÄti un atrodas rezerves kopijÄ.
PieÅemsim, ka radÄs problÄma un dati tika zaudÄti. MÄs nolÄmÄm atjaunot, un izrÄdÄ«jÄs, ka vecie nodalÄ«jumi, kas tiek glabÄti rezerves serveros, ļoti atŔķiras no paÅ”laik izmantotÄs ClickHouse versijas. Ko darÄ«t Å”ÄdÄ situÄcijÄ, un vai tas ir iespÄjams?
SituÄcija, kurÄ jÅ«s atjaunojÄt datus no dublÄjuma vecÄ formÄtÄ, bet tas nesavienojas ar jauno versiju, nav iespÄjama. MÄs pÄrliecinÄmies, ka ClickHouse datu formÄts vienmÄr ir atpakaļsaderÄ«gs. Tas ir daudz svarÄ«gÄk nekÄ funkcionalitÄtes atgriezeniskÄ savietojamÄ«ba, ja ir mainÄ«jusies kÄdas reti izmantotas funkcijas darbÄ«ba. Jaunajai ClickHouse versijai vienmÄr jÄbÅ«t iespÄjai nolasÄ«t datus, kas tiek glabÄti diskÄ. Tas ir likums.
KÄda ir paÅ”reizÄjÄ paraugprakse datu dublÄÅ”anai no ClickHouse?
KÄ izveidot dublÄjumus, Åemot vÄrÄ, ka mums ir optimizÄtas gala darbÄ«bas, milzÄ«ga terabaitu datubÄze un dati, kas tiek atjauninÄti, teiksim, pÄdÄjÄs trÄ«s dienas, un tad ar to nenotiek nekÄdas procedÅ«ras?
MÄs varam izveidot savu risinÄjumu un rakstÄ«t uz bash: savÄkt Ŕīs rezerves kopijas Å”ÄdÄ un tÄdÄ veidÄ. VarbÅ«t nevajag neko vilkt kruÄ·us, un velosipÄds ir izgudrots jau sen?
SÄksim ar labÄko praksi. Mani kolÄÄ£i vienmÄr iesaka, atbildot uz jautÄjumiem par dublÄÅ”anu, atgÄdinÄt par pakalpojumu Yandex.Cloud, kur Ŕī problÄma jau ir atrisinÄta. TÄpÄc izmantojiet to, ja iespÄjams.
Nav pilnÄ«ga risinÄjuma dublÄÅ”anai, kas ir simtprocentÄ«gi iebÅ«vÄts ClickHouse. Ir dažas sagataves, kuras var izmantot. Lai iegÅ«tu pilnÄ«gu risinÄjumu, jums bÅ«s vai nu nedaudz jÄpielÄgojas manuÄli, vai arÄ« jÄizveido iesaiÅojumi skriptu veidÄ.
SÄkÅ”u ar vienkÄrÅ”Äkajiem risinÄjumiem un beigÅ”u ar vissarežģītÄkajiem atkarÄ«bÄ no datu apjoma un klastera lieluma. Jo lielÄks ir klasteris, jo sarežģītÄks kļūst risinÄjums.
Ja tabula ar datiem aizÅem tikai dažus gigabaitus, dublÄÅ”anu var veikt Å”Ädi:
SaglabÄjiet tabulas definÄ«ciju, t.i., metadatus parÄdÄ«t izveidot tabulu.
Izveidojiet izgÄztuvi, izmantojot ClickHouse klientu - atlasÄ«t * no galda uz failu. PÄc noklusÄjuma jÅ«s saÅemsit failu TabSeparated formÄtÄ. Ja vÄlaties strÄdÄt efektÄ«vÄk, varat to izdarÄ«t vietÄjÄ formÄtÄ.
Ja datu apjoms ir lielÄks, tad dublÄÅ”ana prasÄ«s vairÄk laika un daudz vietas. To sauc par loÄ£isko dublÄjumu; tas nav saistÄ«ts ar ClickHouse datu formÄtu. Ja tÄ ir, kÄ pÄdÄjo lÄ«dzekli varat izveidot dublÄjumu un augÅ”upielÄdÄt to MySQL atkopÅ”anai.
IzvÄrstÄkiem gadÄ«jumiem ClickHouse ir iebÅ«vÄta iespÄja izveidot nodalÄ«jumu momentuzÅÄmumu vietÄjÄ failu sistÄmÄ. Å Ä« funkcija ir pieejama pÄc pieprasÄ«juma mainÄ«t galda iesaldÄÅ”anas nodalÄ«jumu. Vai vienkÄrÅ”i mainÄ«t galda iesaldÄÅ”anu - Å”is ir visas tabulas momentuzÅÄmums.
MomentuzÅÄmums tiks izveidots konsekventi vienai tabulai vienÄ shardÄ, tas ir, Å”ÄdÄ veidÄ nav iespÄjams izveidot konsekventu visa klastera momentuzÅÄmumu. Bet lielÄkajai daļai uzdevumu Å”Ädas vajadzÄ«bas nav, un pietiek ar katras sharda pieprasÄ«juma izpildi un konsekventa momentuzÅÄmuma iegÅ«Å”anu. Tas ir izveidots cieto saiÅ”u veidÄ un tÄpÄc neaizÅem papildu vietu. PÄc tam nokopÄjiet Å”o momentuzÅÄmumu uz dublÄjuma serveri vai krÄtuvi, ko izmantojat dublÄÅ”anai.
Å Ädas dublÄjuma atjaunoÅ”ana ir diezgan vienkÄrÅ”a. Vispirms izveidojiet tabulas, izmantojot esoÅ”Äs tabulu definÄ«cijas. PÄc tam nokopÄjiet saglabÄtos nodalÄ«jumu momentuzÅÄmumus Ŕīm tabulÄm uz Directory-Detached un palaidiet vaicÄjumu pievienojiet nodalÄ«jumu. Å is risinÄjums ir diezgan piemÄrots visnopietnÄkajiem datu apjomiem.
DažkÄrt vajag kaut ko vÄl forÅ”Äku ā gadÄ«jumos, kad uz katra servera ir desmitiem vai pat simtiem terabaitu un simtiem serveru. Å eit ir risinÄjums, ko es paÅÄmu no saviem kolÄÄ£iem no Yandex.Metrica. Es to neieteiktu visiem - izlasiet un izlemiet paÅ”i, vai tas ir piemÄrots vai nÄ.
Vispirms jums ir jÄizveido vairÄki serveri ar lieliem disku plauktiem. PÄc tam Å”ajos serveros izveidojiet vairÄkus ClickHouse serverus un konfigurÄjiet tos tÄ, lai tie darbotos kÄ cita kopija tÄm paÅ”Äm ŔķembÄm. Un pÄc tam Å”ajos serveros izmantojiet failu sistÄmu vai kÄdu rÄ«ku, kas ļauj izveidot momentuzÅÄmumus. Å eit ir divas iespÄjas. PirmÄ opcija ir LVM momentuzÅÄmumi, otrÄ iespÄja ir ZFS operÄtÄjsistÄmÄ Linux.
PÄc tam katru dienu ir jÄizveido momentuzÅÄmums, tas melos un aizÅems kÄdu vietu. Dabiski, ja dati mainÄs, laika gaitÄ vietas apjoms palielinÄsies. Å o momentuzÅÄmumu var jebkurÄ brÄ«dÄ« izÅemt un datus atjaunot, tÄds dÄ«vains risinÄjums. TurklÄt mums arÄ« jÄierobežo Ŕīs kopijas konfigurÄcijÄ, lai tÄs nemÄÄ£inÄtu kļūt par lÄ«deriem.
Vai Å”ahtÄs varÄs organizÄt kontrolÄtu repliku nobÄ«di?
Å ogad jÅ«s plÄnojat izgatavot vÄrpstas ClickHouse. Vai tajÄs varÄs organizÄt kontrolÄtu repliku nobÄ«di? MÄs vÄlÄtos to izmantot, lai pasargÄtu sevi no negatÄ«viem scenÄrijiem ar izmaiÅÄm un citÄm izmaiÅÄm.
Vai ir iespÄjams veikt kÄdu atcelÅ”anu alteriem? PiemÄram, esoÅ”ajÄ Å”ahtÄ Åemiet un sakiet, ka lÄ«dz Å”im brÄ«dim jÅ«s piemÄrojat izmaiÅas un no Ŕī brīža pÄrtraucat lietot izmaiÅas?
Ja komanda nonÄca mÅ«su klasterÄ« un to sabojÄja, tad mums ir nosacÄ«ta replika ar stundas nobÄ«di, kur mÄs varam teikt, ka izmantosim to Å”obrÄ«d, bet mÄs tai nepiemÄrosim izmaiÅas pÄdÄjÄs desmit minÅ«tÄs?
PirmkÄrt, par kontrolÄto repliku aizkavÄÅ”anos. Bija Å”Äds lietotÄju pieprasÄ«jums, un mÄs izveidojÄm problÄmu vietnÄ Github ar pieprasÄ«jumu: "Ja kÄdam tas ir vajadzÄ«gs, lÅ«dzu, ielieciet sirdi." Neviens nepiegÄdÄja, un problÄma tika slÄgta. TaÄu Å”o iespÄju jau var iegÅ«t, iestatot ClickHouse. Tiesa, tikai sÄkot ar versiju 20.3.
ClickHouse pastÄvÄ«gi veic datu apvienoÅ”anu fonÄ. Kad sapludinÄÅ”ana ir pabeigta, noteikta datu kopa tiek aizstÄta ar lielÄku daļu. TajÄ paÅ”Ä laikÄ datu daļas, kas tur bija iepriekÅ”, kÄdu laiku turpina palikt diskÄ.
PirmkÄrt, tie tiek saglabÄti tik ilgi, kamÄr ir atlasÄ«ti vaicÄjumi, kas tos izmanto, lai nodroÅ”inÄtu nebloÄ·ÄjoÅ”u darbÄ«bu. AtlasÄ«tie vaicÄjumi ir viegli nolasÄmi no veciem gabaliem.
OtrkÄrt, ir arÄ« laika slieksnis - veci datu gabali astoÅas minÅ«tes guļ diskÄ. Å Ä«s astoÅas minÅ«tes var pielÄgot un pat pÄrvÄrst par vienu dienu. Tas maksÄs vietu diskÄ: atkarÄ«bÄ no datu plÅ«smas izrÄdÄs, ka pÄdÄjÄ dienÄ dati ne tikai dubultosies, bet var kļūt piecas reizes vairÄk. Bet, ja ir nopietna problÄma, varat apturÄt ClickHouse serveri un visu sakÄrtot.
Tagad rodas jautÄjums, kÄ tas aizsargÄ pret izmaiÅÄm. Å eit ir vÄrts paskatÄ«ties dziļÄk, jo vecÄkajÄs ClickHouse versijÄs alter darbojÄs tÄ, ka tas vienkÄrÅ”i mainÄ«ja gabalus tieÅ”i. Dažos failos ir daļa datu, un mÄs, piemÄram, mainÄ«t pilienu kolonnu. PÄc tam Ŕī kolonna tiek fiziski noÅemta no visiem gabaliem.
TaÄu, sÄkot ar versiju 20.3, mainÄ«Å”anas mehÄnisms ir pilnÄ«bÄ mainÄ«ts, un tagad dati vienmÄr ir nemainÄ«gi. Tie nemaz nemainÄs ā izmaiÅas tagad darbojas tÄpat kÄ sapludinÄÅ”anas. TÄ vietÄ, lai nomainÄ«tu gabalu uz vietas, mÄs izveidojam jaunu. JaunajÄ daÄ¼Ä faili, kas nav mainÄ«ti, kļūst par cietajÄm saitÄm, un, ja mÄs izdzÄsÄ«sim kolonnu, jaunajÄ daÄ¼Ä tÄs vienkÄrÅ”i trÅ«ks. Vecais gabals pÄc noklusÄjuma tiks izdzÄsts pÄc astoÅÄm minÅ«tÄm, un Å”eit jÅ«s varat pielÄgot iepriekÅ” minÄtos iestatÄ«jumus.
Tas pats attiecas uz izmaiÅÄm, piemÄram, mutÄcijÄm. Kad jÅ«s to darÄt mainÄ«t dzÄst vai mainÄ«t atjauninÄjumu, tas nemaina gabalu, bet rada jaunu. Un pÄc tam izdzÄÅ” veco.
Ko darīt, ja tabulas struktūra ir mainījusies?
KÄ atjaunot dublÄjumu, kas tika izveidots, izmantojot veco shÄmu? Un otrs jautÄjums ir par gadÄ«jumu ar momentuzÅÄmumiem un failu sistÄmas rÄ«kiem. Vai Å”eit ir labs Btrfs, nevis ZFS uz Linux LVM?
Ja jÅ«s to darÄt pievienojiet nodalÄ«jumu starpsienas ar atŔķirÄ«gu struktÅ«ru, tad ClickHouse pateiks, ka tas nav iespÄjams. Å is ir risinÄjums. Pirmais ir izveidot MergeTree tipa pagaidu tabulu ar veco struktÅ«ru, pievienot tai datus, izmantojot pielikumu, un veikt izmaiÅas vaicÄjumu. PÄc tam varat kopÄt vai pÄrsÅ«tÄ«t Å”os datus un pievienot vÄlreiz, vai arÄ« izmantot pieprasÄ«jumu mainÄ«t tabulas pÄrvietoÅ”anas nodalÄ«jumu.
Tagad otrais jautÄjums ir, vai Btrfs var izmantot. SÄkumÄ, ja jums ir LVM, tad pietiek ar LVM momentuzÅÄmumiem, un failu sistÄma var bÅ«t ext4, tas nav svarÄ«gi. Izmantojot Btrts, viss ir atkarÄ«gs no jÅ«su pieredzes tÄ lietoÅ”anÄ. Å Ä« ir nobriedusi failu sistÄma, taÄu joprojÄm pastÄv zinÄmas aizdomas par to, kÄ viss izdosies praksÄ konkrÄtajÄ scenÄrijÄ. Es neieteiktu to izmantot, ja vien jums nav Btrfs ražoÅ”anÄ.
KÄda ir paÅ”reizÄjÄ datu atkÄrtotas sadalÄ«Å”anas paraugprakse?
JautÄjums par sadalÄ«Å”anu ir sarežģīts un daudzpusÄ«gs. Å eit ir vairÄkas iespÄjamÄs atbildes. JÅ«s varat iet no vienas puses un teikt: ClickHouse nav iebÅ«vÄta pÄrdalÄ«Å”anas funkcija. Bet baidos, ka Ŕī atbilde nevienam nederÄs. TÄpÄc varat pÄriet no otras puses un teikt, ka ClickHouse ir daudz veidu, kÄ atkÄrtoti sadalÄ«t datus.
Ja klasterÄ« pietrÅ«kst vietas vai tas nevar apstrÄdÄt slodzi, jÅ«s pievienojat jaunus serverus. Bet Å”ie serveri pÄc noklusÄjuma ir tukÅ”i, par tiem nav datu, nav slodzes. Dati ir jÄpÄrkÄrto tÄ, lai tie bÅ«tu vienmÄrÄ«gi sadalÄ«ti jaunajÄ, lielÄkÄ klasterÄ«.
Pirmais veids, kÄ to var izdarÄ«t, ir kopÄt daļu nodalÄ«jumu uz jauniem serveriem, izmantojot pieprasÄ«jumu mainÄ«t tabulas ielÄdes nodalÄ«jumu. PiemÄram, jums bija nodalÄ«jumi pa mÄneÅ”iem, un jÅ«s lietojat 2017. gada pirmo mÄnesi un kopÄjat to uz jaunu serveri, pÄc tam treÅ”o mÄnesi kopÄjat uz kÄdu citu jaunu serveri. Un jÅ«s to darÄt, lÄ«dz tas kļūst vairÄk vai mazÄk vienmÄrÄ«gs.
PÄrsÅ«tÄ«Å”anu var veikt tikai tiem nodalÄ«jumiem, kas ierakstÄ«Å”anas laikÄ nemainÄs. Jauniem nodalÄ«jumiem ierakstÄ«Å”ana bÅ«s jÄatspÄjo, jo to pÄrsÅ«tÄ«Å”ana nav atomÄra. PretÄjÄ gadÄ«jumÄ jÅ«s iegÅ«sit datu dublikÄtus vai nepilnÄ«bas. TomÄr Ŕī metode ir praktiska un darbojas diezgan efektÄ«vi. GatavÄs saspiestÄs starpsienas tiek pÄrsÅ«tÄ«tas pa tÄ«klu, tas ir, dati netiek saspiesti vai atkÄrtoti kodÄti.
Å ai metodei ir viens trÅ«kums, un tas ir atkarÄ«gs no sadalÄ«Å”anas shÄmas, no tÄ, vai jÅ«s piekritÄt Å”ai sadalÄ«Å”anas shÄmai, kÄda jums bija sadalÄ«Å”anas atslÄga. JÅ«su piemÄrÄ gadÄ«jumam ar metriku sadalÄ«Å”anas atslÄga ir ceļa hash. Atlasot izkliedÄto tabulu, tÄ vienlaikus tiek novirzÄ«ta uz visÄm klastera daļÄm un no turienes tiek Åemti dati.
Tas nozÄ«mÄ, ka jums faktiski nav nozÄ«mes tam, kÄdi dati tika iegÅ«ti uz kura lauskas. Galvenais, lai dati pa vienu ceļu nonÄktu uz vienas Ŕķembas, bet kuram nav nozÄ«mes. Å ajÄ gadÄ«jumÄ gatavu nodalÄ«jumu pÄrsÅ«tÄ«Å”ana ir ideÄla, jo ar atlasÄ«tajiem vaicÄjumiem jÅ«s saÅemsit arÄ« pilnÄ«gus datus - vai pirms atkÄrtotas sadalÄ«Å”anas vai pÄc tam, shÄmai nav Ä«sti nozÄ«mes.
Bet ir gadÄ«jumi, kas ir sarežģītÄki. Ja lietojumprogrammas loÄ£ikas lÄ«menÄ« paļaujaties uz Ä«paÅ”u sadalÄ«Å”anas shÄmu, ka Å”is klients atrodas uz tÄdas un tÄdas sharda un pieprasÄ«jumu var nosÅ«tÄ«t tieÅ”i tur, nevis uz tabulu Distributed. Vai arÄ« jÅ«s izmantojat diezgan jaunÄku ClickHouse versiju un esat iespÄjojis Å”o iestatÄ«jumu optimizÄt izlaist neizmantotÄs shards. Å ajÄ gadÄ«jumÄ atlases vaicÄjuma laikÄ tiks analizÄta izteiksme sadaÄ¼Ä kur un tiks aprÄÄ·inÄts, kuras shards ir jÄizmanto saskaÅÄ ar sadalÄ«Å”anas shÄmu. Tas darbojas, ja dati tiek sadalÄ«ti precÄ«zi saskaÅÄ ar Å”o sadalÄ«Å”anas shÄmu. Ja tos pÄrkÄrtojÄt manuÄli, sarakste var mainÄ«ties.
TÄtad Ŕī ir metode numur viens. Un es gaidu jÅ«su atbildi, vai metode ir piemÄrota, vai arÄ« turpinÄsim.
Vladimirs Kolobajevs, uzÅÄmuma Avito vadoÅ”ais sistÄmas administrators: Aleksej, jÅ«su pieminÄtÄ metode nedarbojas Ä«paÅ”i labi, ja jums ir nepiecieÅ”ams sadalÄ«t slodzi, ieskaitot lasÄ«Å”anu. MÄs varam pÄrÅemt ikmÄneÅ”a nodalÄ«jumu un iepriekÅ”Äjo mÄnesi var pÄrcelt uz citu mezglu, taÄu, kad tiks saÅemts pieprasÄ«jums pÄc Å”iem datiem, mÄs tos tikai ielÄdÄsim. Bet mÄs vÄlÄtos ielÄdÄt visu klasteru, jo pretÄjÄ gadÄ«jumÄ kÄdu laiku visu lasÄ«Å”anas slodzi apstrÄdÄs divas lauskas.
Aleksejs Milovidovs: Atbilde Å”eit ir dÄ«vaina - jÄ, tas ir slikti, bet tas varÄtu darboties. Es paskaidroÅ”u, kÄ tieÅ”i. Ir vÄrts apskatÄ«t ielÄdes scenÄriju, kas ir aiz jÅ«su datiem. Ja tie ir pÄrraudzÄ«bas dati, tad gandrÄ«z droÅ”i varam teikt, ka lielÄkÄ daļa pieprasÄ«jumu attiecas uz jauniem datiem.
JÅ«s instalÄjÄt jaunus serverus, migrÄjÄt vecos nodalÄ«jumus, kÄ arÄ« mainÄ«jÄt jaunu datu ierakstÄ«Å”anas veidu. Un svaigi dati tiks izplatÄ«ti visÄ klasterÄ«. TÄdÄjÄdi jau pÄc piecÄm minÅ«tÄm pieprasÄ«jumi par pÄdÄjÄm piecÄm minÅ«tÄm vienmÄrÄ«gi ielÄdÄs klasteru; pÄc dienas XNUMX stundu pieprasÄ«jumi vienmÄrÄ«gi ielÄdÄs kopu. Un pieprasÄ«jumi par iepriekÅ”Äjo mÄnesi, diemžÄl, nonÄks tikai daÄ¼Ä klasteru serveru.
TaÄu bieži vien jums nebÅ«s pieprasÄ«jumu tieÅ”i 2019. gada februÄrim. VisticamÄk, ja pieprasÄ«jumi nonÄks 2019. gadÄ, tad tie bÅ«s uz visu 2019. gadu - uz lielu laika periodu, nevis uz kÄdu mazu diapazonu. Un Å”Ädi pieprasÄ«jumi arÄ« varÄs vienmÄrÄ«gi ielÄdÄt klasteru. Bet kopumÄ jÅ«su piezÄ«me ir pilnÄ«gi pareiza, ka tas ir ad hoc risinÄjums, kas neizplata datus pilnÄ«gi vienmÄrÄ«gi.
Man ir vÄl daži punkti, lai atbildÄtu uz jautÄjumu. Viens no tiem ir par to, kÄ sÄkotnÄji izveidot sadalÄ«Å”anas shÄmu, lai atkÄrtota sadalÄ«Å”ana radÄ«tu mazÄk sÄpju. Tas ne vienmÄr ir iespÄjams.
PiemÄram, jums ir uzraudzÄ«bas dati. UzraudzÄ«bas dati pieaug trÄ«s iemeslu dÄļ. Pirmais ir vÄsturisko datu uzkrÄÅ”ana. Otrais ir satiksmes pieaugums. Un treÅ”ais ir pÄrraudzÄ«bai pakļauto lietu skaita pieaugums. Ir jauni mikropakalpojumi un metrika, kas ir jÄsaglabÄ.
IespÄjams, ka no tiem lielÄkais pieaugums saistÄ«ts ar treÅ”o iemeslu - monitoringa izmantoÅ”anas pieaugumu. Un Å”ajÄ gadÄ«jumÄ ir vÄrts aplÅ«kot slodzes raksturu, kÄdi ir galvenie atlases vaicÄjumi. Pamata atlases vaicÄjumi, visticamÄk, bÅ«s balstÄ«ti uz kÄdu metrikas apakÅ”kopu.
PiemÄram, kÄda pakalpojuma CPU lietojums dažos serveros. IzrÄdÄs, ka ir noteikta atslÄgu apakÅ”kopa, ar kuras palÄ«dzÄ«bu jÅ«s iegÅ«stat Å”os datus. Un pats pieprasÄ«jums pÄc Å”iem datiem, visticamÄk, ir diezgan vienkÄrÅ”s un tiek izpildÄ«ts desmitos milisekundÄs. Izmanto uzraudzÄ«bas pakalpojumiem un informÄcijas paneļiem. Es ceru, ka es to pareizi sapratu.
Vladimirs Kolobajevs: Fakts ir tÄds, ka mÄs ļoti bieži apelÄjam pie vÄsturiskiem datiem, jo āāmÄs salÄ«dzinÄm paÅ”reizÄjo situÄciju ar vÄsturisko reÄllaikÄ. Un mums ir svarÄ«gi Ätri piekļūt lielam datu apjomam, un ClickHouse ar to paveic lielisku darbu.
Jums ir pilnÄ«ga taisnÄ«ba, mÄs piedzÄ«vojam lielÄko daļu lasÄ«Å”anas pieprasÄ«jumu pÄdÄjÄ dienÄ, tÄpat kÄ jebkura uzraudzÄ«bas sistÄma. Bet tajÄ paÅ”Ä laikÄ arÄ« vÄsturisko datu slodze ir diezgan liela. Tas bÅ«tÄ«bÄ ir no brÄ«dinÄÅ”anas sistÄmas, kas iet apkÄrt ik pÄc trÄ«sdesmit sekundÄm un saka ClickHouse: āSniedziet man datus par pÄdÄjÄm seÅ”Äm nedÄļÄm. Tagad izveidojiet man no tiem kaut kÄdu mainÄ«go vidÄjo vÄrtÄ«bu un salÄ«dzinÄsim paÅ”reizÄjo vÄrtÄ«bu ar vÄsturisko.
Es gribÄtu teikt, ka Å”Ädiem ļoti neseniem pieprasÄ«jumiem mums ir vÄl viena maza tabula, kurÄ mÄs glabÄjam tikai divu dienu datus, un tajÄ ieplÅ«st galvenie pieprasÄ«jumi. MÄs nosÅ«tÄm tikai lielus vÄsturiskus vaicÄjumus uz lielo Ŕķelto tabulu.
Aleksejs Milovidovs: DiemžÄl tas izrÄdÄs slikti piemÄrojams jÅ«su scenÄrijam, bet es jums pastÄstÄ«Å”u par divÄm sliktÄm un sarežģītÄm sadalÄ«Å”anas shÄmÄm, kuras nav jÄizmanto, bet kuras tiek izmantotas manu draugu servisÄ.
Ir galvenÄ kopa ar Yandex.Metrica notikumiem. Notikumi ir lapu skatÄ«jumi, klikŔķi un reklÄmguvumi. LielÄkÄ daļa pieprasÄ«jumu tiek nosÅ«tÄ«ti uz noteiktu vietni. JÅ«s atverat pakalpojumu Yandex.Metrica, jums ir vietne - avito.ru, dodieties uz pÄrskatu, un tiek veikts pieprasÄ«jums jÅ«su vietnei.
TaÄu ir arÄ« citi pieprasÄ«jumi ā analÄ«tiski un globÄli ā, ko izsaka iekÅ”Äjie analÄ«tiÄ·i. Katram gadÄ«jumam es atzÄ«mÄju, ka iekÅ”Äjie analÄ«tiÄ·i pieprasa tikai Yandex pakalpojumus. TomÄr pat Yandex pakalpojumi aizÅem ievÄrojamu daļu no visiem datiem. Tie ir pieprasÄ«jumi nevis konkrÄtiem skaitÄ«tÄjiem, bet gan plaÅ”Äkai filtrÄÅ”anai.
KÄ sakÄrtot datus tÄ, lai viss darbotos efektÄ«vi vienam skaitÄ«tÄjam un arÄ« globÄlajiem vaicÄjumiem? VÄl viena grÅ«tÄ«ba ir tÄda, ka ClickHouse pieprasÄ«jumu skaits metrikas klasterim ir vairÄki tÅ«kstoÅ”i sekundÄ. TajÄ paÅ”Ä laikÄ viens ClickHouse serveris nevar apstrÄdÄt netriviÄlus pieprasÄ«jumus, piemÄram, vairÄkus tÅ«kstoÅ”us sekundÄ.
Klastera lielums ir seÅ”i simti serveru. Ja jÅ«s vienkÄrÅ”i pÄrvelkat Distributed tabulu virs Ŕī klastera un nosÅ«tÄt tur vairÄkus tÅ«kstoÅ”us pieprasÄ«jumu, tas kļūs vÄl sliktÄk nekÄ nosÅ«tÄ«t tos vienam serverim. No otras puses, uzreiz tiek noraidÄ«ta iespÄja, ka dati tiek sadalÄ«ti vienmÄrÄ«gi, un mÄs ejam un pieprasÄm no visiem serveriem.
Ir variants, kas ir diametrÄli pretÄjs. IedomÄjieties, ja mÄs sadalÄm datus dažÄdÄs vietnÄs un vienas vietnes pieprasÄ«jums tiek nosÅ«tÄ«ts uz vienu fragmentu. Tagad klasteris spÄs apstrÄdÄt desmit tÅ«kstoÅ”us pieprasÄ«jumu sekundÄ, bet uz vienas skaidas jebkurÅ” pieprasÄ«jums darbosies pÄrÄk lÄni. Tas vairs netiks mÄrogots caurlaidspÄjas ziÅÄ. It Ä«paÅ”i, ja Ŕī ir vietne avito.ru. Es neatklÄÅ”u noslÄpumu, ja teikÅ”u, ka Avito ir viena no visvairÄk apmeklÄtajÄm vietnÄm RuNet. Un apstrÄdÄt to uz vienas Ŕķembas bÅ«tu neprÄts.
TÄpÄc sadalÄ«Å”anas shÄma ir izstrÄdÄta viltÄ«gÄkÄ veidÄ. Viss klasteris ir sadalÄ«ts vairÄkos klasteros, kurus mÄs saucam par slÄÅiem. Katrs klasteris satur no desmitiem lÄ«dz vairÄkiem desmitiem lauskas. KopumÄ ir trÄ«sdesmit deviÅas Å”Ädas kopas.
KÄ tas viss mÄrogos? Klasteru skaits nemainÄs ā kÄds pirms dažiem gadiem bija trÄ«sdesmit deviÅi, tÄds arÄ« paliek. Bet katrÄ no tiem mÄs pakÄpeniski palielinÄm lauskas skaitu, uzkrÄjot datus. Un sadalÄ«Å”anas shÄma kopumÄ ir Å”Äda: Å”ie klasteri ir sadalÄ«ti vietnÄs, un, lai saprastu, kura vietne atrodas kurÄ klasterÄ«, tiek izmantota atseviŔķa MySQL metabÄze. Viena vietne - vienÄ klasterÄ«. Un tajÄ notiek sadalÄ«Å”ana saskaÅÄ ar apmeklÄtÄju ID.
Ierakstot mÄs tos sadalÄm ar apmeklÄtÄja ID dalÄ«juma atlikumu. Bet, pievienojot jaunu fragmentu, sadalÄ«Å”anas shÄma mainÄs; mÄs turpinÄm dalÄ«t, bet ar atlikuÅ”o dalÄ«jumu ar citu skaitli. Tas nozÄ«mÄ, ka viens apmeklÄtÄjs jau atrodas vairÄkos serveros, un jÅ«s nevarat uz to paļauties. Tas tiek darÄ«ts tikai tÄpÄc, lai nodroÅ”inÄtu labÄku datu saspieÅ”anu. Un, veicot pieprasÄ«jumus, mÄs pÄrejam uz tabulu Distributed, kurÄ tiek apskatÄ«ts klasteris un piekļūst desmitiem serveru. TÄ ir tik stulba shÄma.
Bet mans stÄsts bÅ«s nepilnÄ«gs, ja es neteikÅ”u, ka mÄs atteicÄmies no Ŕīs shÄmas. JaunajÄ shÄmÄ mÄs visu mainÄ«jÄm un visus datus nokopÄjÄm, izmantojot clickhouse-copier.
JaunajÄ shÄmÄ visas vietnes ir sadalÄ«tas divÄs kategorijÄs - lielajÄs un mazajÄs. Es nezinu, kÄ tika izvÄlÄts slieksnis, bet rezultÄts bija tÄds, ka lielas vietnes tiek ierakstÄ«tas vienÄ klasterÄ«, kur ir 120 lauskas ar trim replikÄm katrÄ - tas ir, 360 serveri. Un sadalÄ«Å”anas shÄma ir tÄda, ka jebkurÅ” pieprasÄ«jums tiek uzreiz uz visÄm ŔķembÄm. Ja tagad vietnÄ Yandex.Metrica atverat jebkuru avito.ru pÄrskata lapu, pieprasÄ«jums tiks nosÅ«tÄ«ts uz 120 serveriem. RuNet ir dažas lielas vietnes. Un pieprasÄ«jumu ir nevis tÅ«kstotis sekundÄ, bet pat mazÄk par simtu. To visu klusi sakoÅ”Ä¼Ä Distributed tabula, kuru katrs apstrÄdÄ ar 120 serveriem.
Un otrais klasteris ir paredzÄts mazÄm vietnÄm. Å eit ir sadalÄ«Å”anas shÄma, kuras pamatÄ ir vietnes ID, un katrs pieprasÄ«jums tiek nosÅ«tÄ«ts tieÅ”i uz vienu fragmentu.
ClickHouse ir Clickhouse kopÄtÄja utilÄ«ta. Vai varat pastÄstÄ«t par viÅu?
Uzreiz teikÅ”u, ka Å”is risinÄjums ir apgrÅ«tinoÅ”Äks un nedaudz mazÄk produktÄ«vs. PriekÅ”rocÄ«ba ir tÄda, ka tas pilnÄ«bÄ izsmÄrÄ datus atbilstoÅ”i jÅ«su norÄdÄ«tajam modelim. Bet utilÄ«tas trÅ«kums ir tÄds, ka tÄ vispÄr nesadalÄs. Tas kopÄ datus no vienas klastera shÄmas uz citu klastera shÄmu.
Tas nozÄ«mÄ, ka, lai tas darbotos, jums ir jÄbÅ«t diviem klasteriem. Tie var atrasties tajos paÅ”os serveros, taÄu, neskatoties uz to, dati netiks pakÄpeniski pÄrvietoti, bet gan tiks kopÄti.
PiemÄram, bija Äetri serveri, tagad ir astoÅi. JÅ«s izveidojat jaunu Distributed tabulu uz visiem serveriem, jaunas lokÄlÄs tabulas un palaižat clickhouse-copier, norÄdot tajÄ darba shÄmu, kas tai jÄnolasa no turienes, akceptÄjiet jauno sadalÄ«Å”anas shÄmu un pÄrsÅ«tiet uz turieni datus. Un vecajos serveros jums vajadzÄs pusotru reizi vairÄk vietas nekÄ tagad, jo tajos jÄpaliek vecajiem datiem, un puse no tiem paÅ”iem vecajiem datiem nonÄks virsÅ«. Ja iepriekÅ” domÄjÄt, ka dati ir jÄsadala atkÄrtoti un ir vieta, tad Ŕī metode ir piemÄrota.
KÄ Clickhouse kopÄtÄjs darbojas iekÅ”pusÄ? Tas sadala visu darbu uzdevumu komplektÄ, lai apstrÄdÄtu vienu tabulas nodalÄ«jumu vienÄ shardÄ. Visus Å”os uzdevumus var izpildÄ«t paralÄli, un Clickhouse-copier var palaist dažÄdÄs iekÄrtÄs vairÄkos gadÄ«jumos, taÄu tas, ko tas dara vienam nodalÄ«jumam, ir nekas vairÄk kÄ ievietoÅ”anas atlase. Dati tiek nolasÄ«ti, atspiesti, atkÄrtoti sadalÄ«ti, pÄc tam atkal saspiesti, kaut kur ierakstÄ«ti un pÄrkÄrtoti. Tas ir stingrÄks lÄmums.
Jums bija izmÄÄ£inÄjuma lieta, ko sauc par atkÄrtotu sadalÄ«Å”anu. Kas ar viÅu?
2017. gadÄ jums bija izmÄÄ£inÄjuma lieta, ko sauca par atkÄrtotu sadalÄ«Å”anu. ClickHouse ir pat iespÄja. KÄ es saprotu, tas nepacÄlÄs. Vai varat man pateikt, kÄpÄc tas notika? Å Ä·iet, ka tas ir ļoti aktuÄli.
Visa problÄma ir tÄda, ka, ja ir nepiecieÅ”ams atkÄrtoti sadalÄ«t datus vietÄ, ir nepiecieÅ”ama ļoti sarežģīta sinhronizÄcija, lai to izdarÄ«tu atomiski. Kad mÄs sÄkÄm skatÄ«ties, kÄ Å”Ä« sinhronizÄcija darbojas, kļuva skaidrs, ka ir bÅ«tiskas problÄmas. Un Ŕīs fundamentÄlÄs problÄmas ir ne tikai teorÄtiskas, bet uzreiz sÄka parÄdÄ«ties praksÄ tÄdÄ veidÄ, ko var izskaidrot ļoti vienkÄrÅ”i - nekas nedarbojas.
Vai ir iespÄjams sapludinÄt visus datus pirms pÄrvietoÅ”anas uz lÄnajiem diskiem?
JautÄjums par TTL ar pÄreju uz lÄnu disku apvienoÅ”anas kontekstÄ. Vai ir kÄds veids, kÄ, izÅemot, izmantojot cron, apvienot visas daļas vienÄ pirms pÄrvietoÅ”anas uz lÄnajiem diskiem?
Atbilde uz jautÄjumu ir iespÄjams kaut kÄ automÄtiski salÄ«mÄt visus gabalus vienÄ pirms to pÄrvietoÅ”anas - nÄ. Es domÄju, ka tas nav nepiecieÅ”ams. Jums nav jÄapvieno visas daļas vienÄ, bet vienkÄrÅ”i jÄrÄÄ·inÄs ar to, ka tÄs automÄtiski tiks pÄrsÅ«tÄ«tas uz lÄnajiem diskiem.
Mums ir divi pÄrejas noteikumu kritÄriji. Pirmais ir tÄds, kÄds tas ir piepildÄ«ts. Ja paÅ”reizÄjÄ krÄtuves lÄ«menÄ« ir mazÄk par noteiktu brÄ«vas vietas procentuÄlo daļu, mÄs atlasÄm vienu gabalu un pÄrvietojam to uz lÄnÄku krÄtuvi. PareizÄk sakot, nevis lÄnÄk, bet nÄkamais - kÄ jÅ«s konfigurÄjat.
Otrais kritÄrijs ir izmÄrs. Tas ir par lielu gabalu pÄrvietoÅ”anu. Varat pielÄgot slieksni atbilstoÅ”i brÄ«vajai vietai ÄtrajÄ diskÄ, un dati tiks pÄrsÅ«tÄ«ti automÄtiski.
KÄ pÄriet uz jaunÄm ClickHouse versijÄm, ja nav iespÄjas iepriekÅ” pÄrbaudÄ«t saderÄ«bu?
Å Ä« tÄma tiek regulÄri apspriesta ClickHouse telegrammas tÄrzÄÅ”anÄ Åemot vÄrÄ dažÄdas versijas, un tomÄr. Cik droÅ”i ir jauninÄt no versijas 19.11 uz 19.16 un, piemÄram, no 19.16 uz 20.3. KÄds ir labÄkais veids, kÄ migrÄt uz jaunÄm versijÄm, iepriekÅ” nepÄrbaudot saderÄ«bu smilÅ”u kastÄ?
Å eit ir vairÄki "zelta" noteikumi. PirmkÄrt - izlasi izmaiÅu žurnÄlu. Tas ir liels, taÄu ir atseviŔķas rindkopas par atpakaļejoÅ”Äm nesaderÄ«gÄm izmaiÅÄm. Neuztveriet Å”os punktus kÄ sarkano karogu. TÄs parasti ir nelielas nesaderÄ«bas, kas ietver dažas malas funkcijas, kuras jÅ«s, visticamÄk, neizmantojat.
OtrkÄrt, ja nav iespÄjas pÄrbaudÄ«t saderÄ«bu smilÅ”u kastÄ un vÄlaties to nekavÄjoties atjauninÄt ražoÅ”anÄ, ieteicams to darÄ«t. Vispirms izveidojiet smilÅ”u kasti un pÄrbaudiet. Ja nav testa vides, visticamÄk, jums nav ļoti liela uzÅÄmuma, kas nozÄ«mÄ, ka varat kopÄt dažus datus savÄ klÄpjdatorÄ un pÄrliecinÄties, ka viss tajÄ darbojas pareizi. JÅ«s pat varat izveidot vairÄkas kopijas lokÄli savÄ datorÄ. Vai arÄ« varat paÅemt jaunu versiju kaut kur tuvumÄ un augÅ”upielÄdÄt tur dažus datus - tas ir, izveidot improvizÄtu testa vidi.
VÄl viens noteikums ir neatjauninÄt nedÄļu pÄc versijas izlaiÅ”anas, jo tiek konstatÄtas kļūdas ražoÅ”anÄ un turpmÄkie Ätrie labojumi. IzdomÄsim ClickHouse versiju numerÄciju, lai neapjuktu.
Ir versija 20.3.4. Cipars 20 norÄda izgatavoÅ”anas gadu - 2020. No iekÅ”puses viedokļa tam nav nozÄ«mes, tÄpÄc mÄs tam nepievÄrsÄ«sim uzmanÄ«bu. NÄkamais - 20.3. MÄs palielinÄm otro skaitli ā Å”ajÄ gadÄ«jumÄ 3 ā katru reizi, kad izlaižam laidienu ar kÄdu jaunu funkcionalitÄti. Ja mÄs vÄlamies ClickHouse pievienot kÄdu funkciju, mums Å”is skaitlis ir jÄpalielina. Tas ir, versijÄ 20.4 ClickHouse darbosies vÄl labÄk. TreÅ”ais cipars ir 20.3.4. Å eit ir norÄdÄ«ts 4 ielÄpu izlaidumu skaits, kuros mÄs nepievienojÄm jaunas funkcijas, bet izlabojÄm dažas kļūdas. Un 4 nozÄ«mÄ, ka mÄs to izdarÄ«jÄm Äetras reizes.
NedomÄjiet, ka tas ir kaut kas briesmÄ«gs. Parasti lietotÄjs var instalÄt jaunÄko versiju, un tÄ darbosies bez problÄmÄm ar darbÄ«bas laiku gadÄ. Bet iedomÄjieties, ka kÄdÄ bitkartes apstrÄdes funkcijÄ, ko pievienoja mÅ«su Ä·Ä«nieÅ”u biedri, serveris avarÄ, nododot nepareizus argumentus. Mums ir pienÄkums to novÄrst. MÄs izlaidÄ«sim jaunu ielÄpu versiju, un ClickHouse kļūs stabilÄks.
Ja jums ir ClickHouse, kas darbojas ražoÅ”anÄ, un iznÄk jauna ClickHouse versija ar papildu funkcijÄm - piemÄram, 20.4.1 ir pati pirmÄ, nesteidzieties to laist ražoÅ”anÄ jau pirmajÄ dienÄ. KÄpÄc tas vispÄr ir vajadzÄ«gs? Ja vÄl nelieto ClickHouse, tad vari to instalÄt, un visticamÄk viss bÅ«s kÄrtÄ«bÄ. Bet, ja ClickHouse jau darbojas stabili, sekojiet lÄ«dzi ielÄpiem un atjauninÄjumiem, lai redzÄtu, kÄdas problÄmas mÄs novÄrÅ”am.
Kirils Å vakovs: VÄlos nedaudz piebilst par testa vidÄm. Visi ļoti baidÄs no testa vidÄm un nez kÄpÄc uzskata, ka ja tev ir ļoti liels ClickHouse klasteris, tad testa videi jÄbÅ«t ne mazÄkai vai vismaz desmit reizes mazÄkai. TÄ nemaz nav.
Es varu pateikt pÄc sava piemÄra. Man ir projekts, un ir ClickHouse. MÅ«su testa vide ir tieÅ”i viÅam - Ŕī ir neliela virtuÄlÄ maŔīna HetznerÄ par divdesmit eiro, kurÄ ir izvietots pilnÄ«gi viss. Lai to izdarÄ«tu, mums Ansible ir pilna automatizÄcija, un tÄpÄc principÄ nav nozÄ«mes, kur doties - uz aparatÅ«ras serveriem vai vienkÄrÅ”i izvietot virtuÄlajÄs maŔīnÄs.
Ko var darÄ«t? BÅ«tu jauki ClickHouse dokumentÄcijÄ sniegt piemÄru par to, kÄ izvietot nelielu kopu savÄs mÄjÄs - Docker, LXC, iespÄjams, izveidojiet Ansible rokasgrÄmatu, jo dažÄdiem cilvÄkiem ir dažÄdas izvietoÅ”anas. Tas daudz ko vienkÄrÅ”os. Ja piecÄs minÅ«tÄs paÅemat un izvietojat kopu, ir daudz vieglÄk mÄÄ£inÄt kaut ko izdomÄt. Tas ir daudz ÄrtÄk, jo, pÄrejot uz ražoÅ”anas versiju, kuru neesat pÄrbaudÄ«jis, ir ceļŔ uz nekurieni. Dažreiz tas izdodas un dažreiz ne. Un tÄpÄc cerÄt uz panÄkumiem ir slikti.
Maksims Kotjakovs, vecÄkais aizmugures inženieris Avito: Es pievienoÅ”u nedaudz par testa vidÄm no virknes problÄmu, ar kurÄm saskaras lieli uzÅÄmumi. Mums ir pilnvÄrtÄ«gs ClickHouse pieÅemÅ”anas klasteris, datu shÄmu un iestatÄ«jumu ziÅÄ tÄ ir precÄ«za ražoÅ”anÄ esoÅ”Ä kopija. Å is klasteris ir izvietots diezgan nolietotos konteineros ar minimÄliem resursiem. MÄs tur rakstÄm noteiktu procentuÄlo daļu no ražoÅ”anas datiem, par laimi ir iespÄjams atkÄrtot straumi KafkÄ. Tur viss ir sinhronizÄts un mÄrogots - gan jaudas, gan plÅ«smas ziÅÄ, gan teorÄtiski, ja visas pÄrÄjÄs lietas ir vienÄdas, metriku ziÅÄ tam vajadzÄtu uzvesties kÄ ražoÅ”anai. Viss potenciÄli sprÄdzienbÄ«stamais vispirms tiek uzvilkts uz Ŕī stenda un atstÄts tur vairÄkas dienas, lÄ«dz tas ir gatavs. TaÄu, protams, Å”is risinÄjums ir dÄrgs, sarežģīts un atbalsta izmaksas nav vienÄdas.
Aleksejs Milovidovs: Es jums pastÄstÄ«Å”u, kÄda ir mÅ«su Yandex.Metrica draugu testa vide. VienÄ klasterÄ« bija 600 nepÄra serveru, citÄ bija 360, un ir treÅ”ais un vairÄki klasteri. Testa vide vienam no tiem ir vienkÄrÅ”i divas shards ar divÄm replikÄm katrÄ. KÄpÄc divas lauskas? Lai tu nebÅ«tu viens. Un vajadzÄtu bÅ«t arÄ« replikÄm. Tikai noteikta minimÄlÄ summa, ko varat atļauties.
Ä»aujiet man sniegt jums piemÄru. MÄs nolÄmÄm instalÄt jaunu ClickHouse versiju. Tas ir ievietots testa vidÄ, paÅ”Ä Yandex.Metrica ir pabeigti automatizÄti testi, kas salÄ«dzina datus par veco un jauno versiju, kas darbojas visÄ konveijerÄ. Un, protams, mÅ«su CI zaļie testi. CitÄdi mÄs pat nebÅ«tu piedÄvÄjuÅ”i Å”o variantu.
Viss ir kÄrtÄ«bÄ. MÄs sÄkam pÄriet uz ražoÅ”anu. SaÅemu ziÅu, ka grafiku slodze ir palielinÄjusies vairÄkas reizes. MÄs atgriežam versiju. Es paskatos uz diagrammu un redzu: slodze faktiski palielinÄjÄs vairÄkas reizes izlaiÅ”anas laikÄ un samazinÄjÄs atpakaļ, kad tÄs tika izlaistas. Tad mÄs sÄkÄm atgriezt versiju. Un slodze tÄpat pieauga un tÄpat atkrita. TÄtad secinÄjums ir Å”Äds: slodze ir palielinÄjusies izkÄrtojuma dÄļ, nekas pÄrsteidzoÅ”s.
Tad bija grÅ«ti pÄrliecinÄt kolÄÄ£us instalÄt jauno versiju. Es saku: "Tas ir labi, izvelciet. Turiet Ä«kŔķus, viss izdosies. Tagad slodze uz grafikiem ir palielinÄjusies, bet viss kÄrtÄ«bÄ. Turies." KopumÄ mÄs to izdarÄ«jÄm, un tas arÄ« viss - versija tika izlaista ražoÅ”anai. Bet gandrÄ«z ar katru izkÄrtojumu rodas lÄ«dzÄ«gas problÄmas.
IznÄ«cinÄt vaicÄjumu ir paredzÄts iznÄ«cinÄt vaicÄjumus, bet tas nenotiek. KÄpÄc?
LietotÄjs, kaut kÄds analÄ«tiÄ·is, pienÄca pie manis un izveidoja pieprasÄ«jumu, kas ievietoja manu ClickHouse klasteru. Daži mezgli vai viss klasteris atkarÄ«bÄ no tÄ, uz kuru repliku vai fragmentu tika nosÅ«tÄ«ts pieprasÄ«jums. Skatos, ka Å”ajÄ serverÄ« visi CPU resursi atrodas plauktÄ, viss sarkans. TajÄ paÅ”Ä laikÄ ClickHouse pati atbild uz pieprasÄ«jumiem. Un es rakstu: "LÅ«dzu, parÄdiet man, procesu sarakstu, kÄds pieprasÄ«jums radÄ«ja Å”o neprÄtu."
Es atrodu Å”o pieprasÄ«jumu un uzrakstu tam kill. Un es redzu, ka nekas nenotiek. Mans serveris atrodas plauktÄ, ClickHouse pÄc tam dod man dažas komandas, parÄda, ka serveris ir dzÄ«vs, un viss ir lieliski. Bet man ir degradÄcija visos lietotÄju pieprasÄ«jumos, degradÄcija sÄkas ar ierakstiem pakalpojumÄ ClickHouse, un mans nogalinÄÅ”anas vaicÄjums nedarbojas. KÄpÄc? Es domÄju, ka nogalinÄÅ”anas vaicÄjumam vajadzÄja iznÄ«cinÄt vaicÄjumus, bet tas nenotiek.
Tagad bÅ«s diezgan dÄ«vaina atbilde. Lieta ir tÄda, ka nogalinÄÅ”anas vaicÄjums neiznÄ«cina vaicÄjumus.
NogalinÄÅ”anas vaicÄjums atzÄ«mÄ nelielu lodziÅu ar nosaukumu āEs gribu, lai Å”is vaicÄjums tiktu iznÄ«cinÄtsā. Un pats pieprasÄ«jums aplÅ«ko Å”o karogu, apstrÄdÄjot katru bloku. Ja tas ir iestatÄ«ts, pieprasÄ«jums pÄrstÄj darboties. IzrÄdÄs, ka neviens lÅ«gumu nenogalina, viÅam paÅ”am viss jÄpÄrbauda un jÄpÄrtrauc. Un tam vajadzÄtu darboties visos gadÄ«jumos, kad pieprasÄ«jums atrodas datu bloku apstrÄdes stÄvoklÄ«. Tas apstrÄdÄs nÄkamo datu bloku, pÄrbaudÄ«s karogu un apstÄsies.
Tas nedarbojas gadÄ«jumos, kad pieprasÄ«jums ir bloÄ·Äts kÄdÄ darbÄ«bÄ. Tiesa, visdrÄ«zÄk tas nav tavs gadÄ«jums, jo, pÄc tevis teiktÄ, tas izmanto ļoti daudz servera resursu. IespÄjams, ka tas nedarbojas ÄrÄjÄs ŔķiroÅ”anas gadÄ«jumÄ un dažÄs citÄs detaļÄs. Bet kopumÄ tam nevajadzÄtu notikt, tÄ ir kļūda. Un vienÄ«gais, ko varu ieteikt, ir ClickHouse atjauninÄÅ”ana.
KÄ aprÄÄ·inÄt reakcijas laiku lasÄ«Å”anas slodzes laikÄ?
Ir tabula, kurÄ tiek glabÄti preÄu agregÄti - dažÄdi skaitÄ«tÄji. LÄ«niju skaits ir aptuveni simts miljoni. Vai ir iespÄjams paļauties uz paredzamu reakcijas laiku, ja 1 precÄm pievienojat 1 XNUMX RPS?
Spriežot pÄc konteksta, runa ir par lasÄ«Å”anas slodzi, jo ar rakstÄ«Å”anu nav nekÄdu problÄmu - var ielikt pat tÅ«kstoti, pat simt tÅ«kstoÅ”us un dažkÄrt vairÄkus miljonus rindu.
LasÄ«Å”anas pieprasÄ«jumi ir ļoti dažÄdi. 1. izvÄlÄ ClickHouse var izpildÄ«t aptuveni desmitiem tÅ«kstoÅ”u pieprasÄ«jumu sekundÄ, tÄpÄc pat vienas atslÄgas pieprasÄ«jumiem jau bÅ«s nepiecieÅ”ami daži resursi. Un Å”Ädi punktu vaicÄjumi bÅ«s grÅ«tÄki nekÄ dažÄs atslÄgu vÄrtÄ«bu datubÄzÄs, jo katram nolasÄ«jumam ir nepiecieÅ”ams nolasÄ«t datu bloku pÄc indeksa. MÅ«su rÄdÄ«tÄjs attiecas nevis uz katru ierakstu, bet uz katru diapazonu. Tas ir, jums bÅ«s jÄizlasa viss diapazons - pÄc noklusÄjuma tas ir 8192 rindas. Un jums bÅ«s jÄatspiež saspiestais datu bloks no 64 KB lÄ«dz 1 MB. Parasti Å”Ädu mÄrÄ·vaicÄjumu izpilde aizÅem dažas milisekundes. Bet Ŕī ir vienkÄrÅ”ÄkÄ iespÄja.
IzmÄÄ£inÄsim vienkÄrÅ”u aritmÄtiku. Ja jÅ«s reizinat dažas milisekundes ar tÅ«kstoti, jÅ«s iegÅ«sit dažas sekundes. It kÄ nav iespÄjams sekot lÄ«dzi tÅ«kstoÅ” pieprasÄ«jumu sekundÄ, bet patiesÄ«bÄ tas ir iespÄjams, jo mums ir vairÄki procesora kodoli. TÄtad principÄ ClickHouse dažkÄrt var saturÄt 1000 RPS, bet Ä«siem pieprasÄ«jumiem, Ä«paÅ”i mÄrÄ·tiecÄ«giem.
Ja jums ir jÄmÄro ClickHouse klasteris pÄc vienkÄrÅ”u pieprasÄ«jumu skaita, tad es iesaku visvienkÄrÅ”Äko lietu - palielinÄt kopiju skaitu un nosÅ«tÄ«t pieprasÄ«jumus nejauÅ”ai kopijai. Ja vienÄ reprodukcijÄ ir pieci simti pieprasÄ«jumu sekundÄ, kas ir pilnÄ«gi reÄli, tad trÄ«s replikas apstrÄdÄs pusotru tÅ«kstoti.
Dažreiz, protams, jÅ«s varat konfigurÄt ClickHouse maksimÄlajam punktu nolasÄ«jumu skaitam. Kas tam vajadzÄ«gs? Pirmais ir samazinÄt indeksa precizitÄti. Å ajÄ gadÄ«jumÄ to nevajadzÄtu samazinÄt lÄ«dz vienam, bet gan pamatojoties uz to, ka ierakstu skaits indeksÄ bÅ«s vairÄki miljoni vai desmitiem miljonu uz vienu serveri. Ja tabulÄ ir simts miljonu rindu, tad granularitÄti var iestatÄ«t uz 64.
JÅ«s varat samazinÄt saspiestÄ bloka izmÄru. Tam ir iestatÄ«jumi min kompresijas bloka izmÄrs, maksimÄlais kompresijas bloka izmÄrs. Tos var samazinÄt, papildinÄt ar datiem, un tad mÄrÄ·tiecÄ«gi vaicÄjumi bÅ«s ÄtrÄki. TomÄr ClickHouse nav atslÄgu vÄrtÄ«bu datubÄze. Liels skaits mazu pieprasÄ«jumu ir slodzes antiraksts.
Kirils Å vakovs: Es sniegÅ”u padomu, ja tur ir parastie konti. Å Ä« ir diezgan standarta situÄcija, kad ClickHouse glabÄ kaut kÄdus skaitÄ«tÄjus. Man ir lietotÄjs, viÅÅ” ir no tÄdas un tÄdas valsts un kaut kÄdas treÅ”Äs jomas, un man kaut kas pakÄpeniski jÄpalielina. PaÅemiet MySQL, izveidojiet unikÄlu atslÄgu - MySQL tÄ ir dublikÄta atslÄga, un PostgreSQL tas ir konflikts - un pievienojiet plus zÄ«mi. Tas darbosies daudz labÄk.
Ja jums nav daudz datu, nav lielas jÄgas izmantot ClickHouse. PastÄv regulÄras datu bÄzes, un tÄs to dara labi.
Ko es varu izmainÄ«t ClickHouse, lai keÅ”atmiÅÄ bÅ«tu vairÄk datu?
IedomÄsimies situÄciju - serveriem ir 256 GB RAM, ikdienas režīmÄ ClickHouse aizÅem apmÄram 60-80 GB, maksimumÄ - lÄ«dz 130. Ko var iespÄjot un pielabot, lai keÅ”atmiÅÄ bÅ«tu vairÄk datu un attiecÄ«gi ir mazÄk braucienu uz disku?
Parasti operÄtÄjsistÄmas lapas keÅ”atmiÅa veic labu darbu. Ja vienkÄrÅ”i atver augÅ”daļu, paskaties tur cached vai free ā tur arÄ« ir rakstÄ«ts, cik daudz ir keÅ”atmiÅÄ ā tad pamanÄ«si, ka visa brÄ«vÄ atmiÅa tiek izmantota keÅ”atmiÅai. Un lasot Å”os datus, tie tiks nolasÄ«ti nevis no diska, bet gan no RAM. TajÄ paÅ”Ä laikÄ varu teikt, ka keÅ”atmiÅa tiek izmantota efektÄ«vi, jo keÅ”atmiÅÄ tiek saglabÄti saspiestie dati.
TomÄr, ja vÄlaties vÄl vairÄk paÄtrinÄt dažus vienkÄrÅ”us vaicÄjumus, ClickHouse atspiestajos datos ir iespÄjams iespÄjot keÅ”atmiÅu. Tas tiek saukts nesaspiesta keÅ”atmiÅa. Konfig.xml konfigurÄcijas failÄ iestatiet nesaspiestÄs keÅ”atmiÅas lielumu uz vajadzÄ«go vÄrtÄ«bu - iesaku ne vairÄk kÄ pusi no brÄ«vÄs RAM, jo pÄrÄjais nonÄks zem lapas keÅ”atmiÅas.
TurklÄt ir divi pieprasÄ«juma lÄ«meÅa iestatÄ«jumi. Pirmais iestatÄ«jums - izmantot nesaspiestu keÅ”atmiÅu - ietver tÄ izmantoÅ”anu. Ieteicams to iespÄjot visiem pieprasÄ«jumiem, izÅemot smagus, kas var nolasÄ«t visus datus un iztÄ«rÄ«t keÅ”atmiÅu. Un otrais iestatÄ«jums ir kaut kas lÄ«dzÄ«gs maksimÄlajam rindiÅu skaitam, lai izmantotu keÅ”atmiÅu. Tas automÄtiski ierobežo lielus vaicÄjumus, lai tie apietu keÅ”atmiÅu.
KÄ es varu konfigurÄt storage_configuration glabÄÅ”anai RAM?
JaunajÄ ClickHouse dokumentÄcijÄ es izlasÄ«ju sadaļu, kas ir saistÄ«ta ar datu glabÄÅ”anu. AprakstÄ ir piemÄrs ar Ätru SSD.
Interesanti, kÄ to paÅ”u var konfigurÄt ar skaļuma karsto atmiÅu. Un vÄl viens jautÄjums. KÄ Select darbojas ar Å”o datu organizÄciju, vai tas nolasÄ«s visu komplektu vai tikai to, kas atrodas diskÄ, un vai Å”ie dati tiek saspiesti atmiÅÄ? Un kÄ prewhere sadaļa darbojas ar Å”Ädu datu organizÄciju?
Å is iestatÄ«jums ietekmÄ datu gabalu uzglabÄÅ”anu, un to formÄts nekÄdÄ veidÄ nemainÄs.
ApskatÄ«sim tuvÄk.
Varat konfigurÄt datu glabÄÅ”anu RAM. Viss, kas ir konfigurÄts diskam, ir tÄ ceļŔ. JÅ«s izveidojat tmpfs nodalÄ«jumu, kas ir pievienots kÄdam faila sistÄmas ceļam. JÅ«s norÄdÄt Å”o ceļu kÄ karstÄkÄ nodalÄ«juma datu glabÄÅ”anas ceļu, sÄk ienÄkt un tur ierakstÄ«ties datu gabali, viss ir kÄrtÄ«bÄ.
Bet es neiesaku to darÄ«t zemÄs uzticamÄ«bas dÄļ, lai gan, ja jums ir vismaz trÄ«s kopijas dažÄdos datu centros, tas ir iespÄjams. Ja kaut kas notiks, dati tiks atjaunoti. IedomÄsimies, ka serveris pÄkÅ”Åi tika izslÄgts un atkal ieslÄgts. Atkal tika uzstÄdÄ«ts nodalÄ«jums, bet tur nekÄ nebija. Kad ClickHouse serveris startÄ, tas redz, ka tam nav Å”o gabalu, lai gan saskaÅÄ ar ZooKeeper metadatiem tiem tur vajadzÄtu bÅ«t. ViÅÅ” apskata, kurÄm replikÄm tÄs ir, tÄs pieprasa un lejupielÄdÄ. TÄdÄ veidÄ dati tiks atjaunoti.
Å ajÄ ziÅÄ datu glabÄÅ”ana RAM neatŔķiras no to uzglabÄÅ”anas diskÄ, jo, ierakstot datus diskÄ, tie arÄ« vispirms nonÄk lapas keÅ”atmiÅÄ un fiziski tiek ierakstÄ«ti vÄlÄk. Tas ir atkarÄ«gs no failu sistÄmas montÄžas opcijas. Bet katram gadÄ«jumam teikÅ”u, ka ClickHouse ievietoÅ”anas laikÄ nesinhronizÄjas.
Å ajÄ gadÄ«jumÄ RAM dati tiek saglabÄti tieÅ”i tÄdÄ paÅ”Ä formÄtÄ kÄ diskÄ. Atlases vaicÄjums tÄdÄ paÅ”Ä veidÄ atlasa nolasÄmÄs daļas, atlasa nepiecieÅ”amos datu diapazonus daļÄs un nolasa tos. Un prewhere darbojas tieÅ”i tÄpat, neatkarÄ«gi no tÄ, vai dati bija RAM vai diskÄ.
LÄ«dz kÄdam unikÄlo vÄrtÄ«bu skaitam ir efektÄ«va zema kardinalitÄte?
Low Cardinality ir gudri izstrÄdÄta. Tas apkopo datu vÄrdnÄ«cas, taÄu tÄs ir lokÄlas. PirmkÄrt, katram gabalam ir dažÄdas vÄrdnÄ«cas, otrkÄrt, pat viena gabala ietvaros tÄs var atŔķirties katram diapazonam. Kad unikÄlo vÄrtÄ«bu skaits sasniedz sliekÅ”Åa skaitli ā manuprÄt, vienu miljonu ā vÄrdnÄ«ca tiek vienkÄrÅ”i nolikta plauktÄ un tiek izveidota jauna.
Atbilde ir vispÄrÄ«ga: katram lokÄlajam diapazonam - teiksim, katrai dienai - kaut kur lÄ«dz miljonam unikÄlu vÄrtÄ«bu zema kardinalitÄte ir efektÄ«va. PÄc tam bÅ«s vienkÄrÅ”i atkÄpÅ”anÄs, kurÄ tiks izmantotas daudzas dažÄdas vÄrdnÄ«cas, nevis tikai viena. Tas darbosies aptuveni tÄpat kÄ parastÄ virknes kolonna, varbÅ«t nedaudz mazÄk efektÄ«va, taÄu nebÅ«s nopietnas veiktspÄjas pasliktinÄÅ”anÄs.
KÄda ir labÄkÄ prakse pilna teksta meklÄÅ”anai tabulÄ ar pieciem miljardiem rindu?
Ir dažÄdas atbildes. Pirmais ir teikt, ka ClickHouse nav pilna teksta meklÄtÄjprogramma. Tam ir Ä«paÅ”as sistÄmas, piemÄram, Elastikas meklÄÅ”ana Šø Sfinksa. TomÄr es arvien biežÄk redzu cilvÄkus, kuri saka, ka pÄriet no Elasticsearch uz ClickHouse.
KÄpÄc tas notiek? ViÅi to skaidro ar faktu, ka Elasticsearch dažos apjomos pÄrstÄj tikt galÄ ar slodzi, sÄkot ar indeksu veidoÅ”anu. Indeksi kļūst pÄrÄk apgrÅ«tinoÅ”i, un, vienkÄrÅ”i pÄrsÅ«tot datus uz ClickHouse, izrÄdÄs, ka tie tiek uzglabÄti vairÄkas reizes efektÄ«vÄk apjoma ziÅÄ. TajÄ paÅ”Ä laikÄ meklÄÅ”anas vaicÄjumi bieži nebija tÄdi, lai visÄ datu apjomÄ, Åemot vÄrÄ morfoloÄ£iju, bÅ«tu jÄatrod kÄda frÄze, bet gan pavisam citas. PiemÄram, atrodiet dažas baitu apakÅ”secÄ«bas žurnÄlos pÄdÄjo stundu laikÄ.
Å ajÄ gadÄ«jumÄ jÅ«s izveidojat indeksu ClickHouse, kura pirmais lauks bÅ«s datums un laiks. Un lielÄkais datu ierobežojums bÅ«s balstÄ«ts uz datumu diapazonu. IzvÄlÄtajÄ datumu diapazonÄ, kÄ likums, jau ir iespÄjams veikt pilna teksta meklÄÅ”anu, pat izmantojot brutÄlÄ spÄka metodi, izmantojot lÄ«dzÄ«gu. LÄ«dzÄ«gais operators pakalpojumÄ ClickHouse ir visefektÄ«vÄkais lÄ«dzÄ«gais operators, ko varat atrast. Ja atrodat ko labÄku, pastÄstiet man.
Bet tomÄr, piemÄram, ir pilna skenÄÅ”ana. Un pilna skenÄÅ”ana var bÅ«t lÄna ne tikai CPU, bet arÄ« diskÄ. Ja pÄkÅ”Åi jums ir viens terabaits datu dienÄ un dienas laikÄ meklÄjat vÄrdu, jums bÅ«s jÄskenÄ terabaits. Un tas, iespÄjams, ir parastajos cietajos diskos, un galu galÄ tie tiks ielÄdÄti tÄ, ka jÅ«s nevarÄsit piekļūt Å”im serverim, izmantojot SSH.
Å ajÄ gadÄ«jumÄ esmu gatavs piedÄvÄt vÄl vienu mazu triku. Tas ir eksperimentÄls ā tas var darboties, var nÄ. ClickHouse ir pilna teksta indeksi trigrammu Bloom filtru veidÄ. MÅ«su kolÄÄ£i ArenadatÄ jau ir izmÄÄ£inÄjuÅ”i Å”os indeksus, un tie bieži darbojas tieÅ”i tÄ, kÄ paredzÄts.
Lai tos pareizi lietotu, jums ir labi jÄsaprot, kÄ tie darbojas: kas ir trigrammas BlÅ«ma filtrs un kÄ izvÄlÄties tÄ izmÄru. Varu teikt, ka tie palÄ«dzÄs vaicÄjumos par dažÄm retÄm frÄzÄm, apakÅ”virknÄm, kas datos reti sastopamas. Å ajÄ gadÄ«jumÄ apakÅ”diapazoni tiks atlasÄ«ti pÄc indeksiem un tiks nolasÄ«ts mazÄk datu.
Nesen ClickHouse ir pievienojis vÄl vairÄk uzlabotas funkcijas pilna teksta meklÄÅ”anai. PirmkÄrt, tÄ ir vairÄku apakÅ”virkÅu meklÄÅ”ana vienÄ piegÄjienÄ, tostarp opcijas, kas ir reÄ£istrjutÄ«gas, reÄ£istrjutÄ«gas, atbalsta UTF-8 vai tikai ASCII. IzvÄlieties visefektÄ«vÄko, kas jums nepiecieÅ”ams.
Ir parÄdÄ«jusies arÄ« vairÄku regulÄro izteiksmju meklÄÅ”ana vienÄ piegÄjienÄ. Jums nav jÄraksta X kÄ viena apakÅ”virkne vai X kÄ cita apakÅ”virkne. JÅ«s rakstÄt uzreiz, un viss tiek darÄ«ts pÄc iespÄjas efektÄ«vÄk.
TreÅ”kÄrt, tagad tiek veikta aptuvenÄ regexps meklÄÅ”ana un aptuvenÄ apakÅ”virkÅu meklÄÅ”ana. Ja kÄds ir nepareizi uzrakstÄ«jis vÄrdu, tas tiks meklÄts, lai atrastu maksimÄlo atbilstÄ«bu.
KÄds ir labÄkais veids, kÄ organizÄt piekļuvi ClickHouse lielam lietotÄju skaitam?
PastÄstiet mums, kÄ vislabÄk organizÄt piekļuvi lielam skaitam patÄrÄtÄju un analÄ«tiÄ·u. KÄ izveidot rindu, noteikt prioritÄti maksimÄli vienlaicÄ«giem vaicÄjumiem un ar kÄdiem rÄ«kiem?
Ja klasteris ir pietiekami liels, tad labs risinÄjums bÅ«tu paaugstinÄt vÄl divus serverus, kas kļūs par ieejas punktu analÄ«tiÄ·iem. Tas ir, neļaujiet analÄ«tiÄ·iem piekļūt noteiktÄm klastera fragmentiem, bet vienkÄrÅ”i izveidojiet divus tukÅ”us serverus bez datiem un konfigurÄjiet tiem piekļuves tiesÄ«bas. Å ajÄ gadÄ«jumÄ lietotÄja iestatÄ«jumi izplatÄ«tajiem pieprasÄ«jumiem tiek pÄrsÅ«tÄ«ti uz attÄlajiem serveriem. Tas ir, jÅ«s konfigurÄjat visu Å”ajos divos serveros, un iestatÄ«jumi ietekmÄ visu klasteru.
PrincipÄ Å”iem serveriem nav datu, bet RAM apjoms tajos ir ļoti svarÄ«gs pieprasÄ«jumu izpildei. Disku var izmantot arÄ« pagaidu datiem, ja ir iespÄjota ÄrÄja apkopoÅ”ana vai ÄrÄja kÄrtoÅ”ana.
Ir svarÄ«gi aplÅ«kot iestatÄ«jumus, kas ir saistÄ«ti ar visiem iespÄjamiem ierobežojumiem. Ja es tagad doÅ”os uz Yandex.Metrica klasteru kÄ analÄ«tiÄ·is un uzdodu pieprasÄ«jumu atlasiet trÄpÄ«jumu skaitu, tad man uzreiz tiks pieŔķirts izÅÄmums, ka nevaru izpildÄ«t pieprasÄ«jumu. MaksimÄlais rindu skaits, ko es drÄ«kstu skenÄt, ir simts miljardi, un kopÄ vienÄ klastera tabulÄ tÄs ir piecdesmit triljoni. Å is ir pirmais ierobežojums.
PieÅemsim, ka es noÅemu rindu ierobežojumu un izpildu vaicÄjumu vÄlreiz. Tad es redzÄÅ”u Å”Ädu izÅÄmumu - iestatÄ«jums ir iespÄjots spÄka indekss pÄc datuma. Es nevaru pabeigt vaicÄjumu, ja neesmu norÄdÄ«jis datumu diapazonu. Jums nav jÄpaļaujas uz analÄ«tiÄ·iem, lai to norÄdÄ«tu manuÄli. Tipisks gadÄ«jums ir tad, kad datumu diapazons tiek rakstÄ«ts, kur notikuma datums starp nedÄļu. Un tad viÅi vienkÄrÅ”i norÄdÄ«ja iekava nepareizajÄ vietÄ, un tÄ vietÄ izrÄdÄ«jÄs vai - vai URL atbilstÄ«ba. Ja nav ierobežojumu, tas pÄrmeklÄs URL kolonnu un vienkÄrÅ”i iztÄrÄs daudz resursu.
TurklÄt ClickHouse ir divi prioritÄri iestatÄ«jumi. DiemžÄl tie ir ļoti primitÄ«vi. Vienu vienkÄrÅ”i sauc prioritÄte. Ja prioritÄte ā 0 un tiek izpildÄ«ti pieprasÄ«jumi ar kÄdu prioritÄti, bet tiek izpildÄ«ts pieprasÄ«jums ar prioritÄtes vÄrtÄ«bu mazÄku par, kas nozÄ«mÄ augstÄku prioritÄti, tad pieprasÄ«jums ar prioritÄtes vÄrtÄ«bu lielÄku, kas nozÄ«mÄ zemÄku prioritÄti , ir vienkÄrÅ”i apturÄta un Å”ajÄ laikÄ nedarbosies vispÄr.
Å is ir ļoti neapstrÄdÄts iestatÄ«jums un nav piemÄrots gadÄ«jumiem, kad klasterim ir pastÄvÄ«ga slodze. Bet, ja jums ir svarÄ«gi Ä«si, apjomÄ«gi pieprasÄ«jumi un klasteris lielÄkoties ir dÄ«kstÄvÄ, Ŕī iestatÄ«Å”ana ir piemÄrota.
Tiek izsaukts nÄkamais prioritÄtes iestatÄ«jums OS pavediena prioritÄte. Tas vienkÄrÅ”i nosaka jauku vÄrtÄ«bu visiem Linux plÄnotÄja pieprasÄ«juma izpildes pavedieniem. Tas darbojas tik un tÄ, bet tas joprojÄm darbojas. Ja iestatÄt minimÄlo jauku vÄrtÄ«bu ā tÄ ir vislielÄkÄ vÄrtÄ«ba un lÄ«dz ar to arÄ« zemÄkÄ prioritÄte ā un iestatÄt -19 pieprasÄ«jumiem ar augstu prioritÄti, tad CPU patÄrÄs zemas prioritÄtes pieprasÄ«jumus apmÄram Äetras reizes mazÄk nekÄ augstas prioritÄtes pieprasÄ«jumus.
Jums arÄ« jÄkonfigurÄ maksimÄlais pieprasÄ«juma izpildes laiks - teiksim, piecas minÅ«tes. MinimÄlais vaicÄjuma izpildes Ätrums ir stilÄ«gÄkais. Å is iestatÄ«jums pastÄv jau ilgu laiku, un tas ir nepiecieÅ”ams ne tikai, lai apliecinÄtu, ka ClickHouse nepalÄninÄs, bet arÄ« jÄpiespiež.
IedomÄjieties, jÅ«s iestatÄt: ja kÄds vaicÄjums apstrÄdÄ mazÄk nekÄ vienu miljonu rindu sekundÄ, jÅ«s to nevarat izdarÄ«t. Tas apkauno mÅ«su labo vÄrdu, mÅ«su labo datubÄzi. VienkÄrÅ”i aizliegsim Å”o. PatiesÄ«bÄ ir divi iestatÄ«jumi. Vienu sauc MinimÄlais izpildes Ätrums - rindÄs sekundÄ, un otro sauc par taimautu pirms minimÄlÄ izpildes Ätruma pÄrbaudes - pÄc noklusÄjuma piecpadsmit sekundes. Tas ir, ir iespÄjamas piecpadsmit sekundes, un tad, ja tas notiek lÄni, vienkÄrÅ”i izmetiet izÅÄmumu un pÄrtrauciet pieprasÄ«jumu.
Jums arÄ« jÄiestata kvotas. ClickHouse ir iebÅ«vÄta kvotu funkcija, kas uzskaita resursu patÄriÅu. Bet diemžÄl ne aparatÅ«ras resursi, piemÄram, CPU, diski, bet loÄ£iskie - apstrÄdÄto pieprasÄ«jumu skaits, lasÄ«tÄs rindas un baiti. Un jÅ«s varat konfigurÄt, piemÄram, ne vairÄk kÄ simts pieprasÄ«jumu piecu minÅ«Å”u laikÄ un tÅ«kstoÅ” pieprasÄ«jumu stundÄ.
KÄpÄc tas ir svarÄ«gi? TÄ kÄ daži analÄ«tikas vaicÄjumi tiks veikti manuÄli tieÅ”i no ClickHouse klienta. Un viss bÅ«s labi. Bet, ja jÅ«su uzÅÄmumÄ ir pieredzÄjuÅ”i analÄ«tiÄ·i, viÅi uzrakstÄ«s skriptu, un skriptÄ var bÅ«t kļūda. Un Ŕīs kļūdas dÄļ pieprasÄ«jums tiks izpildÄ«ts bezgalÄ«gÄ ciklÄ. Tas ir tas, no kÄ mums sevi jÄpasargÄ.
Vai ir iespÄjams viena vaicÄjuma rezultÄtus nodot desmit klientiem?
Mums ir vairÄki lietotÄji, kuriem patÄ«k vienÄ un tajÄ paÅ”Ä brÄ«dÄ« iesniegt ļoti lielus pieprasÄ«jumus. PieprasÄ«jums ir liels un principÄ tiek izpildÄ«ts Ätri, bet sakarÄ ar to, ka Å”Ädu pieprasÄ«jumu ir daudz vienlaikus, tas kļūst ļoti sÄpÄ«gi. Vai ir iespÄjams vienu un to paÅ”u pieprasÄ«jumu, kas pienÄca desmit reizes pÄc kÄrtas, izpildÄ«t vienu reizi un rezultÄtu nodot desmit klientiem?
ProblÄma ir tÄ, ka mums nav keÅ”atmiÅas vai starpposma datu keÅ”atmiÅas rezultÄtu. Ir operÄtÄjsistÄmas lappuÅ”u keÅ”atmiÅa, kas neļaus atkÄrtoti nolasÄ«t datus no diska, taÄu diemžÄl dati joprojÄm tiks atspiesti, deserializÄti un atkÄrtoti apstrÄdÄti.
Es vÄlÄtos kaut kÄ no tÄ izvairÄ«ties, vai nu keÅ”atmiÅÄ saglabÄjot starpposma datus, vai sakÄrtojot lÄ«dzÄ«gus vaicÄjumus kaut kÄdÄ rindÄ un pievienojot rezultÄtu keÅ”atmiÅu. PaÅ”laik tiek izstrÄdÄts viens izvilkÅ”anas pieprasÄ«jums, kas pievieno pieprasÄ«juma keÅ”atmiÅu, bet tikai apakÅ”vaicÄjumiem sadaļÄs ievadÄ«Å”ana un pievienoÅ”anÄs ā tas ir, risinÄjums ir nepilnÄ«gs.
TaÄu arÄ« mÄs saskaramies ar Å”Ädu situÄciju. ÄŖpaÅ”i kanonisks piemÄrs ir vaicÄjumi ar lappusÄm. Ir atskaite, tajÄ ir vairÄkas lapas, un ir pieprasÄ«jums pÄc limita 10. Tad tas pats, bet limits 10,10. Tad vÄl viena nÄkamÄ lapa. Un jautÄjums ir, kÄpÄc mÄs to visu katru reizi uzskaitÄm? Bet tagad risinÄjuma nav, un nav arÄ« iespÄjas no tÄ izvairÄ«ties.
Ir alternatÄ«vs risinÄjums, kas tiek novietots kÄ blakusvÄÄ£is blakus ClickHouse - ClickHouse starpniekserveris.
Kirils Å vakovs: ClickHouse Proxy ir iebÅ«vÄts Ätruma ierobežotÄjs un iebÅ«vÄta rezultÄtu keÅ”atmiÅa. Tur tika veikti daudzi iestatÄ«jumi, jo tika atrisinÄta lÄ«dzÄ«ga problÄma. Starpniekserveris ļauj ierobežot pieprasÄ«jumus, ievietojot tos rindÄ, un konfigurÄt, cik ilgi pieprasÄ«juma keÅ”atmiÅa darbojas. Ja pieprasÄ«jumi patieÅ”Äm bija vienÄdi, Proxy tos nosÅ«tÄ«s daudzas reizes, bet uz ClickHouse nonÄks tikai vienu reizi.
Nginx ir arÄ« keÅ”atmiÅa bezmaksas versijÄ, un tas arÄ« darbosies. Nginx pat ir iestatÄ«jumi, ka, ja pieprasÄ«jumi tiek saÅemti vienlaikus, tas palÄninÄs citus, lÄ«dz viens tiks pabeigts. Bet tas ir ClickHouse Proxy, ka iestatÄ«Å”ana tiek veikta daudz labÄk. Tas tika izveidots Ä«paÅ”i ClickHouse, tieÅ”i Å”iem pieprasÄ«jumiem, tÄpÄc tas ir vairÄk piemÄrots. Nu, to ir viegli uzstÄdÄ«t.
KÄ ar asinhronajÄm operÄcijÄm un materializÄtajiem skatiem?
Ir problÄma, ka darbÄ«bas ar atkÄrtoÅ”anas dzinÄju ir asinhronas - vispirms tiek ierakstÄ«ti dati, pÄc tam tie sabrÅ«k. Ja zem zÄ«mes atrodas materializÄta planÅ”ete ar dažiem agregÄtiem, tad tai tiks ierakstÄ«ti dublikÄti. Un, ja nav sarežģītas loÄ£ikas, tad dati tiks dublÄti. Ko jÅ«s varat darÄ«t lietas labÄ?
Ir acÄ«mredzams risinÄjums - ieviest trigeri noteiktai matviews klasei asinhronas sabrukÅ”anas darbÄ«bas laikÄ. Vai ir kÄdas sudraba lodes vai plÄni ieviest lÄ«dzÄ«gu funkcionalitÄti?
Ir vÄrts saprast, kÄ darbojas deduplikÄcija. Tas, ko es jums pateikÅ”u tagad, neattiecas uz jautÄjumu, bet tikai gadÄ«jumÄ, ja to ir vÄrts atcerÄties.
Ievietojot replicÄtÄ tabulÄ, tiek noÅemta visu ievietoto bloku dublÄÅ”ana. Ja atkÄrtoti ievietojat to paÅ”u bloku, kurÄ ir vienÄds skaits to paÅ”u rindu tÄdÄ paÅ”Ä secÄ«bÄ, dati tiek dedublÄti. Atbildot uz ievietoÅ”anu, jÅ«s saÅemsit āOkā, taÄu faktiski tiks ierakstÄ«ta viena datu pakete, un tÄ netiks dublÄta.
Tas ir nepiecieÅ”ams noteiktÄ«bas labad. Ja ievietoÅ”anas laikÄ saÅemat āOkā, jÅ«su dati ir ievietoti. Ja saÅemat kļūdu no ClickHouse, tas nozÄ«mÄ, ka tie nav ievietoti un jums ir jÄatkÄrto ievietoÅ”ana. Bet, ja savienojums tiek pÄrtraukts ievietoÅ”anas laikÄ, tad jÅ«s nezinÄt, vai dati tika ievietoti vai nÄ. VienÄ«gÄ iespÄja ir atkÄrtot ievietoÅ”anu vÄlreiz. Ja dati faktiski tika ievietoti un jÅ«s tos ievietojÄt atkÄrtoti, notiek bloÄ·ÄÅ”anas atcelÅ”ana. Tas ir nepiecieÅ”ams, lai izvairÄ«tos no dublikÄtiem.
Un ir svarÄ«gi arÄ«, kÄ tas darbojas materializÄtiem skatiem. Ja dati tika dedublÄti, ievietojot tos galvenajÄ tabulÄ, tad tie nenonÄks arÄ« materializÄtajÄ skatÄ.
Tagad par jautÄjumu. JÅ«su situÄcija ir sarežģītÄka, jo jÅ«s ierakstÄt atseviŔķu rindu dublikÄtus. Tas ir, tiek dublÄta nevis visa pakotne, bet gan noteiktas lÄ«nijas, un tÄs sabrÅ«k fonÄ. PatieÅ”Äm, dati tiks sakļauti galvenajÄ tabulÄ, bet nesakļautie dati nonÄks materializÄtajÄ skatÄ, un sapludinÄÅ”anas laikÄ ar materializÄtajiem skatiem nekas nenotiks. Jo materializÄts skats ir nekas vairÄk kÄ ievietoÅ”anas sprÅ«da. Citu operÄciju laikÄ ar to nekas papildus nenotiek.
Un es nevaru jÅ«s Å”eit iepriecinÄt. Jums tikai jÄmeklÄ konkrÄts risinÄjums Å”im gadÄ«jumam. PiemÄram, vai ir iespÄjams to atkÄrtoti atskaÅot materializÄtÄ skatÄ, un dublÄÅ”anas metode varÄtu darboties tÄpat. Bet diemžÄl ne vienmÄr. Ja tas tiek apkopots, tas nedarbosies.
Kirils Å vakovs: Mums savulaik bija arÄ« kruÄ·u celtniecÄ«ba. Bija problÄma, ka ir reklÄmas seansi, un ir daži dati, kurus mÄs varam parÄdÄ«t reÄllaikÄ - tie ir tikai seansi. Tie tiek dublÄti reti, taÄu, ja tas notiks, mÄs tos vÄlÄk jebkurÄ gadÄ«jumÄ sakļausim. Un bija lietas, kuras nevarÄja dublÄt ā klikŔķi un viss Å”is stÄsts. Bet es arÄ« gribÄju tos parÄdÄ«t gandrÄ«z uzreiz.
KÄ tapa materializÄtie skati? Bija skati, kur tas tika rakstÄ«ts tieÅ”i - tas tika rakstÄ«ts uz neapstrÄdÄtiem datiem un rakstÄ«ts uz skatiem. Tur kaut kad dati nav Ä«sti pareizi, dublÄjas utt. Un ir tabulas otrÄ daļa, kur tie izskatÄs tieÅ”i tÄpat kÄ materializÄtie skati, tas ir, tie ir absolÅ«ti identiski pÄc struktÅ«ras. ReizÄm mÄs pÄrrÄÄ·inÄm datus, saskaitÄm datus bez dublikÄtiem, rakstÄm uz tÄm tabulÄm.
MÄs izmantojÄm API ā tas nedarbosies ClickHouse manuÄli. Un API izskatÄs: kad man ir tabulas pÄdÄjÄ papildinÄjuma datums, kur tiek garantÄts, ka pareizi dati jau ir aprÄÄ·inÄti, un tas izdara pieprasÄ«jumu vienai tabulai un citai tabulai. No viena pieprasÄ«jums atlasa lÄ«dz noteiktam laika periodam, bet no otra iegÅ«st to, kas vÄl nav aprÄÄ·inÄts. Un tas darbojas, bet ne tikai ar ClickHouse.
Ja jums ir sava veida API - analÄ«tiÄ·iem, lietotÄjiem -, tad principÄ Å”Ä« ir iespÄja. Tu vienmÄr skaita, vienmÄr skaita. To var izdarÄ«t vienu reizi dienÄ vai citÄ laikÄ. JÅ«s izvÄlaties sev sortimentu, kas jums nav vajadzÄ«gs un nav kritisks.
ClickHouse ir daudz žurnÄlu. KÄ es varu Ä«sumÄ redzÄt visu, kas notiek ar serveri?
ClickHouse ir ļoti daudz dažÄdu žurnÄlu, un Å”is skaits pieaug. JaunajÄs versijÄs dažas no tÄm ir iespÄjotas pat pÄc noklusÄjuma; vecÄkÄs versijÄs tÄs ir jÄiespÄjo atjauninÄÅ”anas laikÄ. TomÄr viÅu kļūst arvien vairÄk. Galu galÄ es vÄlÄtos redzÄt, kas tagad notiek ar manu serveri, varbÅ«t kÄdÄ kopsavilkuma informÄcijas panelÄ«.
Vai jums ir ClickHouse komanda vai jÅ«su draugu komandas, kas atbalsta kÄdu gatavu informÄcijas paneļu funkcionalitÄti, kas Å”os žurnÄlus parÄdÄ«tu kÄ gatavu produktu? Galu galÄ vienkÄrÅ”i aplÅ«kot žurnÄlus pakalpojumÄ ClickHouse ir lieliski. Bet bÅ«tu ļoti forÅ”i, ja tas bÅ«tu jau sagatavots informÄcijas paneļa formÄ. Es no tÄ saÅemtu sitienu.
Ir informÄcijas paneļi, lai gan tie nav standartizÄti. MÅ«su uzÅÄmumÄ ClickHouse izmanto apmÄram 60 komandas, un dÄ«vainÄkais ir tas, ka daudzÄm no tÄm ir informÄcijas paneļi, ko viÅi paÅ”i ir izgatavojuÅ”i un nedaudz atŔķirÄ«gi. Dažas komandas izmanto iekÅ”Äju Yandex.Cloud instalÄciju. Ir dažas gatavas atskaites, lai gan ne visas nepiecieÅ”amÄs. Citiem ir savs.
Maniem kolÄÄ£iem no Metrica ir savs informÄcijas panelis GrafÄnÄ, un man ir savs viÅu klasterim. Es meklÄju tÄdas lietas kÄ keÅ”atmiÅas trÄpÄ«jums serif keÅ”atmiÅai. Un vÄl grÅ«tÄk ir tas, ka mÄs izmantojam dažÄdus rÄ«kus. Es izveidoju savu informÄcijas paneli, izmantojot ļoti vecu rÄ«ku Graphite-web. ViÅÅ” ir pilnÄ«gi neglÄ«ts. Un joprojÄm lietoju tÄ, lai gan Grafana droÅ”i vien bÅ«tu ÄrtÄka un skaistÄka.
InformÄcijas paneļu pamatlieta ir tÄda pati. Tie ir klastera sistÄmas rÄdÄ«tÄji: CPU, atmiÅa, disks, tÄ«kls. Citi - vienlaicÄ«gu pieprasÄ«jumu skaits, vienlaicÄ«gu sapludinÄÅ”anu skaits, pieprasÄ«jumu skaits sekundÄ, MergeTree tabulas nodalÄ«jumu maksimÄlais gabalu skaits, replikÄcijas nobÄ«de, replikÄcijas rindas lielums, ievietoto rindu skaits sekundÄ, ievietoto bloku skaits sekundÄ. Tas ir viss, ko iegÅ«st nevis no žurnÄliem, bet no metrikÄm.
Vladimirs Kolobajevs: Aleksej, es gribÄtu to nedaudz izlabot. Ir Grafana. Grafana ir datu avots, kas ir ClickHouse. Tas ir, es varu iesniegt pieprasÄ«jumus no Grafana tieÅ”i ClickHouse. ClickHouse ir tabula ar žurnÄliem, tÄ visiem ir vienÄda. RezultÄtÄ es vÄlos piekļūt Å”ai žurnÄla tabulai programmÄ Grafana un redzÄt mana servera veiktos pieprasÄ«jumus. BÅ«tu lieliski, ja bÅ«tu Å”Äds informÄcijas panelis.
Pats braucu ar velosipÄdu. Bet man ir jautÄjums - ja tas viss ir standartizÄts un Grafana izmanto visi, kÄpÄc Yandex nav tik oficiÄla informÄcijas paneļa?
Kirils Å vakovs: Faktiski datu avots, kas tiek izmantots ClickHouse, tagad atbalsta Altinity. Un es tikai gribu dot vektoru, kur rakt un kam stumt. Varat jautÄt viÅiem, jo āāYandex joprojÄm ražo ClickHouse, nevis stÄstu par to. Altinity ir galvenais uzÅÄmums, kas paÅ”laik reklamÄ ClickHouse. ViÅi viÅu nepametÄ«s, bet atbalstÄ«s. TÄ kÄ principÄ, lai Grafana vietnÄ augÅ”upielÄdÄtu informÄcijas paneli, ir tikai jÄreÄ£istrÄjas un jÄaugÅ”upielÄdÄ - nav Ä«paÅ”u problÄmu.
Aleksejs Milovidovs: PÄdÄjÄ gada laikÄ ClickHouse ir pievienojis daudzas vaicÄjumu profilÄÅ”anas iespÄjas. Katram pieprasÄ«jumam par resursu izmantoÅ”anu ir metrika. Un pavisam nesen mÄs pievienojÄm vÄl zemÄka lÄ«meÅa vaicÄjumu profilÄtÄju, lai redzÄtu, kur vaicÄjums tÄrÄ katru milisekundi. Bet, lai izmantotu Å”o funkcionalitÄti, man ir jÄatver konsoles klients un jÄievada pieprasÄ«jums, ko es vienmÄr aizmirstu. Es to kaut kur saglabÄju un aizmirstu, kur tieÅ”i.
Es vÄlos, lai bÅ«tu rÄ«ks, kas tikko teica: Å”eit ir jÅ«su smagie vaicÄjumi, kas sagrupÄti pÄc vaicÄjumu klases. Es nospiedu vienu, un viÅi man teica, ka tÄpÄc tas ir smags. Tagad tÄda risinÄjuma nav. Un tieÅ”Äm ir diezgan dÄ«vaini, ka, kad cilvÄki man jautÄ: āSakiet man, vai ir kÄdi gatavi Grafana informÄcijas paneļi?ā, es saku: āDodieties uz Grafana vietni, tur ir āDashboardsā kopiena un tur ir informÄcijas panelis. no Dimka, ir informÄcijas panelis no Kostjana. Es nezinu, kas tas ir, es pats to neesmu lietojis.
KÄ ietekmÄt sapludinÄÅ”anu, lai serveris neiekristu OOM?
Man ir tabula, tabulÄ ir tikai viens nodalÄ«jums, tas ir ReplaceingMergeTree. Es tajÄ rakstu datus Äetrus gadus. Man vajadzÄja tajÄ veikt izmaiÅas un dzÄst dažus datus.
Es to izdarÄ«ju, un Ŕī pieprasÄ«juma apstrÄdes laikÄ tika patÄrÄta visa atmiÅa visos klastera serveros, un visi klastera serveri tika iekļauti OOM. Tad viÅi visi kopÄ piecÄlÄs, sÄka apvienot Å”o paÅ”u darbÄ«bu, Å”o datu bloku un atkal iekrita OOM. Tad viÅi atkal piecÄlÄs un atkal krita. Un Ŕī lieta neapstÄjÄs.
Tad izrÄdÄ«jÄs, ka Ŕī patiesÄ«bÄ bija kļūda, ko puiÅ”i izlaboja. Tas ir ļoti forÅ”i, liels paldies. Bet atlikums palika. Un tagad, kad es domÄju par kaut kÄda veida sapludinÄÅ”anu tabulÄ, man rodas jautÄjums - kÄpÄc es nevaru kaut kÄ ietekmÄt Ŕīs sapludinÄÅ”anas? PiemÄram, ierobežojiet tos ar nepiecieÅ”amo RAM apjomu vai principÄ ar apjomu, kas apstrÄdÄs Å”o konkrÄto tabulu.
Man ir tabula ar nosaukumu āMetrikaā, lÅ«dzu, apstrÄdÄjiet to divos pavedienos. Nav nepiecieÅ”ams paralÄli veidot desmit vai piecus sapludinÄjumus, dariet to divatÄ. Es domÄju, ka man pietiek atmiÅas diviem, bet ar to var nepietikt, lai apstrÄdÄtu desmit. KÄpÄc bailes paliek? Jo tabula aug, un kÄdreiz es saskarÅ”os ar situÄciju, kas principÄ vairs nav kļūdas dÄļ, bet gan tÄpÄc, ka dati mainÄ«sies tik lielÄ daudzumÄ, ka man vienkÄrÅ”i nepietiks atmiÅas serveris. Un tad serveris sapludinÄÅ”anas laikÄ avarÄ OOM. TurklÄt es varu atcelt mutÄciju, bet Merdži vairs nav.
Ziniet, apvienojot serveris neiekļūs OOM, jo apvienojot, RAM apjoms tiek izmantots tikai vienam nelielam datu diapazonam. TÄtad viss bÅ«s kÄrtÄ«bÄ neatkarÄ«gi no datu apjoma.
Vladimirs Kolobajevs: Labi. Å eit moments ir tÄds, ka pÄc kļūdas izlaboÅ”anas es lejupielÄdÄju sev jaunu versiju un uz citas tabulas, mazÄkas, kur ir daudz nodalÄ«jumu, es veicu lÄ«dzÄ«gu darbÄ«bu. Un apvienoÅ”anas laikÄ serverÄ« tika sadedzinÄta aptuveni 100 GB RAM. Man bija 150 aizÅemti, 100 apÄsti un atlicis 50 GB logs, tÄpÄc es neiekritu OOM.
Kas Å”obrÄ«d mani pasargÄ no iekriÅ”anas OOM, ja tas faktiski patÄrÄ 100 GB RAM? Ko darÄ«t, ja pÄkÅ”Åi beidzas sapludinÄto RAM?
Aleksejs Milovidovs: Ir tÄda problÄma, ka RAM patÄriÅÅ” speciÄli apvienoÅ”anai nav ierobežots. Un otra problÄma ir tÄda, ka ja ir pieŔķirts kaut kÄds sapludinÄjums, tad tas ir jÄizpilda, jo tas tiek ierakstÄ«ts replikÄcijas žurnÄlÄ. ReplikÄcijas žurnÄls ir darbÄ«bas, kas nepiecieÅ”amas, lai replikÄ nonÄktu konsekventÄ stÄvoklÄ«. Ja neveiksit manuÄlas manipulÄcijas, kas atcels Å”o replikÄcijas žurnÄlu, sapludinÄÅ”ana bÅ«s jÄveic vienÄ vai otrÄ veidÄ.
Protams, nebÅ«tu lieki RAM ierobežojums, kas ākatram gadÄ«jumamā aizsargÄ pret OOM. Tas nepalÄ«dzÄs sapludinÄÅ”anai pabeigt, tÄ sÄksies no jauna, sasniegs kÄdu slieksni, liks izÅÄmumu un tad sÄks no jauna ā nekas labs no tÄ neiznÄks. Bet principÄ bÅ«tu lietderÄ«gi Å”o ierobežojumu ieviest.
KÄ tiks izstrÄdÄts ClickHouse Golang draiveris?
Golang draiveri, kuru uzrakstÄ«ja Kirils Å vakovs, tagad oficiÄli atbalsta ClickHouse komanda. ViÅÅ” ClickHouse repozitorijÄ, viÅÅ” tagad ir liels un Ä«sts.
Maza piezÄ«me. Ir brÄ«niŔķīga un iemīļota bezgalÄ«gas kÄrtÄ«bas normÄlu formu krÄtuve - tÄ ir Vertica. ViÅiem ir arÄ« savs oficiÄlais python draiveris, ko atbalsta Vertica izstrÄdÄtÄji. Un vairÄkas reizes gadÄ«jÄs, ka atmiÅas versijas un draivera versijas diezgan krasi atŔķīrÄs, un draiveris kÄdÄ brÄ«dÄ« pÄrstÄja darboties. Un otrais punkts. Atbalstu Å”im oficiÄlajam draiverim, manuprÄt, nodroÅ”ina ānipeļaā sistÄma - jÅ«s uzrakstÄt viÅiem problÄmu, un tas uzkaras uz visiem laikiem.
Man ir divi jautÄjumi. Tagad Kirila Golang draiveris ir gandrÄ«z noklusÄjuma veids, kÄ sazinÄties no Golang ar ClickHouse. Ja vien kÄds joprojÄm nesazinÄs caur http saskarni, jo viÅam tÄ patÄ«k. KÄ turpinÄsies Ŕī draivera attÄ«stÄ«ba? Vai tas tiks sinhronizÄts ar jebkÄdÄm pÄrkÄpjoÅ”Äm izmaiÅÄm paÅ”Ä repozitorijÄ? Un kÄda ir jautÄjuma izskatÄ«Å”anas procedÅ«ra?
Kirils Å vakovs: Pirmais ir tas, kÄ viss tiek organizÄts birokrÄtiski. Å is punkts netika apspriests, tÄpÄc man nav ko atbildÄt.
Lai atbildÄtu uz jautÄjumu par problÄmu, mums ir nepiecieÅ”ama neliela vadÄ«tÄja vÄsture. Es strÄdÄju uzÅÄmumÄ, kurÄ bija daudz datu. Tas bija reklÄmas vÄrpÄjs ar milzÄ«gu skaitu notikumu, kas kaut kur jÄsaglabÄ. Un kÄdÄ brÄ«dÄ« parÄdÄ«jÄs ClickHouse. MÄs to aizpildÄ«jÄm ar datiem, un sÄkumÄ viss bija kÄrtÄ«bÄ, bet pÄc tam ClickHouse avarÄja. TajÄ brÄ«dÄ« mÄs nolÄmÄm, ka mums tas nav vajadzÄ«gs.
Gadu vÄlÄk mÄs atgriezÄmies pie idejas izmantot ClickHouse, un mums vajadzÄja kaut kÄ tur ierakstÄ«t datus. IevadziÅa bija Å”Äda: aparatÅ«ra ir ļoti vÄja, ir maz resursu. Bet mÄs vienmÄr esam strÄdÄjuÅ”i Å”ÄdÄ veidÄ, un tÄpÄc mÄs skatÄ«jÄmies uz dzimto protokolu.
TÄ kÄ strÄdÄjÄm Go, tad bija skaidrs, ka vajag Go Å”oferi. Es to darÄ«ju gandrÄ«z uz pilnu slodzi ā tas bija mans darba uzdevums. MÄs to novedÄm lÄ«dz noteiktam brÄ«dim, un principÄ neviens neuzskatÄ«ja, ka kÄds cits, izÅemot mÅ«s, to izmantos. Tad CloudFlare nÄca ar tieÅ”i tÄdu paÅ”u problÄmu, un kÄdu laiku mÄs ar viÅiem strÄdÄjÄm ļoti gludi, jo viÅiem bija vienÄdi uzdevumi. TurklÄt mÄs to darÄ«jÄm gan ClickHouse, gan draiverÄ«.
KÄdÄ brÄ«dÄ« es to vienkÄrÅ”i pÄrtraucu darÄ«t, jo mana aktivitÄte ClickHouse un darba ziÅÄ nedaudz mainÄ«jÄs. TÄpÄc jautÄjumi nav slÄgti. Periodiski cilvÄki, kuriem kaut kas ir vajadzÄ«gs, paÅ”i iesaistÄs krÄtuvÄ. Tad skatos pull pieprasÄ«jumu un dažreiz pat pats kaut ko rediÄ£Äju, bet tas notiek reti.
Es gribu atgriezties pie vadÄ«tÄja. Pirms vairÄkiem gadiem, kad visa Ŕī lieta sÄkÄs, ClickHouse arÄ« bija atŔķirÄ«gs un ar dažÄdÄm iespÄjÄm. Tagad mums ir izpratne par to, kÄ pÄrveidot draiveri, lai tas labi darbotos. Ja tas notiks, tad 2. versija jebkurÄ gadÄ«jumÄ bÅ«s nesavienojama sakrÄjuÅ”os kruÄ·u dÄļ.
Es nezinu, kÄ organizÄt Å”o lietu. Man paÅ”am nav daudz laika. Ja daži cilvÄki piebeigs Å”oferi, es varu viÅiem palÄ«dzÄt un pastÄstÄ«t, kÄ rÄ«koties. Bet Yandex aktÄ«vÄ lÄ«dzdalÄ«ba projekta izstrÄdÄ vÄl nav apspriesta.
Aleksejs Milovidovs: PatiesÄ«bÄ par Å”iem braucÄjiem vÄl nav nekÄdas birokrÄtijas. VienÄ«gais ir tas, ka tie tiek iesniegti oficiÄlai organizÄcijai, tas ir, Å”is draiveris tiek atzÄ«ts par Go oficiÄlo noklusÄjuma risinÄjumu. Ir daži citi vadÄ«tÄji, bet tie nÄk atseviŔķi.
Mums nav iekÅ”Äjas attÄ«stÄ«bas Å”iem draiveriem. JautÄjums ir par to, vai mÄs varam pieÅemt darbÄ atseviŔķu cilvÄku nevis Å”im konkrÄtajam autovadÄ«tÄjam, bet gan visu kopienas autovadÄ«tÄju attÄ«stÄ«bai, vai arÄ« mÄs varam atrast kÄdu no malas.
ÄrÄjÄ vÄrdnÄ«ca netiek ielÄdÄta pÄc atsÄknÄÅ”anas ar iespÄjotu iestatÄ«jumu lazy_load. Ko darÄ«t?
Mums ir iespÄjots iestatÄ«jums lazy_load, un pÄc servera pÄrstartÄÅ”anas vÄrdnÄ«ca netiek ielÄdÄta pati. Tas tiek parÄdÄ«ts tikai pÄc tam, kad lietotÄjs piekļūst Å”ai vÄrdnÄ«cai. Un pirmo reizi piekļūstot tam, tiek parÄdÄ«ta kļūda. Vai ir iespÄjams kaut kÄ automÄtiski ielÄdÄt vÄrdnÄ«cas, izmantojot ClickHouse, vai arÄ« jums vienmÄr ir jÄkontrolÄ to gatavÄ«ba, lai lietotÄji nesaÅemtu kļūdas?
IespÄjams, mums ir veca ClickHouse versija, tÄpÄc vÄrdnÄ«ca netika ielÄdÄta automÄtiski. Vai tas tÄ varÄtu bÅ«t?
PirmkÄrt, vÄrdnÄ«cas var piespiedu kÄrtÄ ielÄdÄt, izmantojot vaicÄjumu sistÄmas pÄrlÄdÄÅ”anas vÄrdnÄ«cas. OtrkÄrt, par kļūdu - ja vÄrdnÄ«ca jau ir ielÄdÄta, tad vaicÄjumi darbosies, pamatojoties uz datiem, kas tika ielÄdÄti. Ja vÄrdnÄ«ca vÄl nav ielÄdÄta, tÄ tiks ielÄdÄta tieÅ”i pieprasÄ«juma laikÄ.
Tas nav Ä«paÅ”i Ärti smagÄm vÄrdnÄ«cÄm. PiemÄram, jums ir jÄizvelk miljons rindu no MySQL. KÄds veic vienkÄrÅ”u atlasi, taÄu Ŕī atlase gaidÄ«s to paÅ”u miljonu rindu. Å eit ir divi risinÄjumi. Pirmais ir izslÄgt lazy_load. OtrkÄrt, kad serveris ir atvÄrts, pirms tÄ noslodzes dariet sistÄmas pÄrlÄdÄÅ”anas vÄrdnÄ«ca vai vienkÄrÅ”i veiciet vaicÄjumu, kas izmanto vÄrdnÄ«cu. PÄc tam vÄrdnÄ«ca tiks ielÄdÄta. Jums jÄkontrolÄ vÄrdnÄ«cu pieejamÄ«ba ar iespÄjotu iestatÄ«jumu lazy_load, jo ClickHouse tÄs neielÄdÄ automÄtiski.
Atbilde uz pÄdÄjo jautÄjumu ir vai nu versija, kas ir veca, vai arÄ« tÄ ir jÄatkļūdo.
Ko darÄ«t ar to, ka sistÄmas pÄrlÄdÄÅ”anas vÄrdnÄ«cas neielÄdÄ nevienu no daudzajÄm vÄrdnÄ«cÄm, ja vismaz viena no tÄm avarÄ ar kļūdu?
Ir vÄl viens jautÄjums par sistÄmas pÄrlÄdÄÅ”anas vÄrdnÄ«cÄm. Mums ir divas vÄrdnÄ«cas ā viena netiek ielÄdÄta, otra ir ielÄdÄta. Å ajÄ gadÄ«jumÄ sistÄmas atkÄrtotas ielÄdes vÄrdnÄ«cas neielÄdÄ nevienu vÄrdnÄ«cu, un jums ir jÄielÄdÄ noteikta vÄrdnÄ«ca pÄc tÄs nosaukuma, izmantojot sistÄmas atkÄrtotas ielÄdes vÄrdnÄ«cu. Vai tas ir saistÄ«ts arÄ« ar ClickHouse versiju?
ES gribu padarÄ«t Tevi laimÄ«gu. Å Ä« uzvedÄ«ba mainÄ«jÄs. Tas nozÄ«mÄ, ka, atjauninot ClickHouse, tas arÄ« mainÄ«sies. Ja neesat apmierinÄts ar savu paÅ”reizÄjo uzvedÄ«bu sistÄmas pÄrlÄdÄÅ”anas vÄrdnÄ«cas, atjauniniet, un cerÄsim, ka tas mainÄ«sies uz labo pusi.
Vai ir kÄds veids, kÄ ClickHouse konfigurÄcijÄ konfigurÄt informÄciju, bet nerÄdÄ«t to kļūdu gadÄ«jumÄ?
NÄkamais jautÄjums ir par kļūdÄm saistÄ«bÄ ar vÄrdnÄ«cu, proti, detaļÄm. MÄs esam norÄdÄ«juÅ”i savienojuma detaļas vÄrdnÄ«cas ClickHouse konfigurÄcijÄ, un, ja ir kļūda, mÄs saÅemam Å”o informÄciju un paroli kÄ atbildi.
MÄs atrisinÄjÄm Å”o kļūdu, pievienojot informÄciju ODBC draivera konfigurÄcijai. Vai ir kÄds veids, kÄ konfigurÄt informÄciju ClickHouse konfigurÄcijÄ, bet nerÄdÄ«t Å”o informÄciju kļūdu gadÄ«jumÄ?
Patiesais risinÄjums Å”eit ir norÄdÄ«t Å”os akreditÄcijas datus odbc.ini un paÅ”Ä ClickHouse norÄdÄ«t tikai ODBC datu avota nosaukumu. Tas nenotiks citiem vÄrdnÄ«cu avotiem - ne vÄrdnÄ«cai ar MySQL, ne citiem, jums nevajadzÄtu redzÄt paroli, kad saÅemat kļūdas ziÅojumu. Es meklÄÅ”u arÄ« ODBC ā ja tas pastÄv, jums tas vienkÄrÅ”i jÄnoÅem.
Bonuss: tÄlummaiÅas foni no sapulcÄm
NoklikŔķinot uz attÄla, neatlaidÄ«gÄkajiem lasÄ«tÄjiem atvÄrsies bonusa foni no salidojumiem. DzÄÅ”am uguni kopÄ ar Avito tehnoloÄ£iju talismaniem, apspriežamies ar kolÄÄ£iem no sistÄmas administratora istabas vai vecÄs skolas datorkluba, kÄ arÄ« ikdienÄ vadÄm tikÅ”anÄs zem tilta uz grafiti fona.