
Kuidas backend-arendaja mĂ”istab, et SQL-pĂ€ring töötab hĂ€sti "produs"? Suurtes vĂ”i kiiresti kasvavates ettevĂ”tetes ei ole juurdepÀÀs "prodile" kaugeltki kĂ”igil. Ja isegi juurdepÀÀsuga ei saa kĂ”iki pĂ€ringuid valutult kontrollida ning andmebaasi koopia loomine vĂ”tab sageli tunde. Nende probleemide lahendamiseks lĂ”ime tehisliku DBA - Joe. Ta on juba edukalt rakendatud mitmes ettevĂ”ttes ja aitab rohkem kui kĂŒmnel arendajal.
Video:

Tere kÔigile! Minu nimi on Anatoli Stancler. Töötan ettevÔttes . Me tegeleme sellega, et kiirendada arendamisprotsessi, eemaldades arendajate, DBA-de ja QA-de hilinemised, mis on seotud Postgresiga.
Meil on suurepĂ€rased kliendid ja tĂ€na on osa ettekandest pĂŒhendatud juhtumitele, millega me oleme kohtunud. RÀÀgin, kuidas me aitasime neil lahendada ĂŒsna tĂ”siseid probleeme.

Kui me viibime arenduses ja teeme keerulisi, suurt koormust nĂ”udvaid migreerimisi, kĂŒsime endalt: "Kas see migratsioon Ă”nnestub?". Me kasutame ĂŒlevaateid, me kasutame kogenumate kolleegide ja DBA-spetsialistide teadmisi. Nad suudavad öelda â kas see Ă”nnestub vĂ”i mitte.
Ent vÔib-olla oleks parem, kui saaksime seda ise testida tÀiskopeerimiste peal. TÀna rÀÀgimegi lÀhenemistest testimisele ning kuidas seda paremini teha ja milliseid tööriistu kasutada. RÀÀgime ka nende lÀhenemiste plussidest ja miinustest ning mida me saame siin parandada.

Kes on kunagi produl indeksid vĂ”i mĂ”ningaid muudatusi teinud? Ăsna palju inimesi. Ja kellel see viis andmete kadumiseni vĂ”i seisakute tekkimiseni? Siis on see valu teile tuttav. Ănneks on varukoopiad olemas.

Esimene lĂ€henemine â testimine produ. VĂ”i kui arendaja istub oma kohalikul masinal, tal on testandmed, on olemas mingisugune piiratud valik. Ja me viime selle produ ja saame sellise olukorra.

See on valus, see on kallis. Ilmselt oleks parem mitte nii teha.
Kuidas oleks parem teha?

VÔtame stseeni ja eraldame sinna osa produs. VÔi parimal juhul vÔtame ehtsa produ, kÔik andmed. Ja pÀrast seda, kui oleme kohapeal arendanud, kontrollime tÀiendavalt ka stseenis.
See vÔimaldab meil teatavad vead eemaldada, st mitte lasta neid produsse.
Millised probleemid on?
- Probleem on selles, et jagame seda stagingut kolleegidega. Ja sageli juhtub nii, et teed muudatuse ja bum â andmed on kadunud, töö on raisku lĂ€inud. Staging oli mitme terabaidi suurune. Ja tuleb kaua oodata, kuni see taas tööle hakkab. Otsustasime, et tĂ€iendame seda homme. KĂ”ik, arendus on seisma jÀÀnud.
- Ja muidugi töötab seal palju meie kolleege, palju meeskondi. Ja peab kÀsitsi kooskÔlastama. See on ebamugav.

Ja tuleb mĂ€rkida, et meil on ainult ĂŒks katse, ĂŒks lask, kui soovime andmebaasi teha mingeid muudatusi, andmeid kĂ€tte vĂ”tta vĂ”i struktuuri muuta. Ja kui midagi lĂ€heb valesti, kui migratsioonis on viga, siis me ei saa enam kiirelt tagasi minna.
See on parem kui eelmine lÀhenemine, aga tÔenÀosus, et mÔni viga lÀheb productionisse, on endiselt suur.

Mis takistab meil anda igale arendajale testimistendi, tÀismahulise koopia? Ma arvan, et on selge, mis seda takistab.
Kellel on andmebaas, mis on suurem kui terabait? Rohkem kui pooltel saalist.
Ja on selge, et hoida masinad iga arendaja jaoks, kui production on nii suur, on vÀga kallis ja vÔtab ka aega.
Meil on kliente, kes on aru saanud, et kÔik muudatused tuleb testida tÀismahuliste koopiatega, kuid nende andmebaas on vÀiksem kui terabait ning ressurssi, et igale arendajale hoida testimistendi, ei ole. SeetÔttu peavad nad andme dump'e oma kohalikku arvutisse alla laadima ja nii testima. See vÔtab tohutult aega.

Isegi kui teete seda infrastruktuuri sees, on ĂŒks terabait andmete allalaadimine tunnis juba vĂ€ga hea. Kuid nad kasutavad loogilisi dump'e, nad laadivad kohalikult alla cloud'ist. Nende jaoks on kiirus umbes 200 gigabitti tunnis. Ja lisaks on vajalik aeg, et loogilisest dump'ist ĂŒles ehitada, indekseid rakendada jne.
Aga nad kasutavad seda lÀhenemist, sest see vÔimaldab hoida prod'i usaldusvÀÀrsena.
Mida me siin teha saame? Teeme nii, et testimistendid oleksid odavad ja anname igale arendajale tema enda testimistendi.
Ja sedasi on vÔimalik.

Ja selle lĂ€henemisega, kus loome iga arendaja jaoks Ă”hukesed kloonid, saame selle ĂŒhe masina peale jagada. NĂ€iteks kui teie andmebaas on neli terabaiti ja soovite selle anda kĂŒmnele arendajale, ei pea teil olema kĂŒmme nelja terabaiti andmebaasi. Ăhe masina olemasolu piisab, et teha iga arendaja jaoks Ă”hukesed isoleeritud koopiad, kasutades ĂŒhte masina. Kuidas see toimib, rÀÀgin veidi hiljem.

Tegelik nÀide:
Andmebaas â 4,5 terabaiti.
Saame sÔltumatud koopiad 30 sekundi jooksul.
Te ei pea ootama testimise seadet ja sÔltuma selle suurusest. Te saate selle sekunditega. Need saavad olema tÀielikult isoleeritud keskkonnad, kuid jagavad omavahel andmeid.
See on lahe. Siin rÀÀgime maagisest ja paralleelsest universumist.

Meie puhul töötab see OpenZFS sĂŒsteemi kaudu.

OpenZFS on copy-on-write failisĂŒsteem, mis toetab juba alguses Ă€ratarnimist momentfotode ja kloonide jaoks. See on usaldusvÀÀrne ja skaleeritav. Selle haldamine on ÀÀrmiselt lihtne. Selle saab sĂ”na otseses mĂ”ttes kahe kĂ€suga juurutada.
On ka teisi variante:
LVM,
Storage Array (nÀiteks Pure Storage).
Database Lab, millest ma rÀÀgin, on modulaarne. Seda on vÔimalik rakendada, kasutades selliseid variante. Kuid seni oleme keskendunud OpenZFS-ile, kuna LVM-iga olid probleemid.

Kuidas see töötab? Selle asemel, et andmeid iga kord, kui me neid muudame, uuesti kirjutada, salvestame need, mÀrkides lihtsalt, et need uued andmed kuuluvad uue ajamomendi, uue momentfotod juurde.
Ja siis, kui tahame tagasi minna vĂ”i teha uue klooni mingi vanema versiooniga, ĂŒtleme lihtsalt: "Olgu, andke meile need andmeplokid, mis on nii mĂ€rgistatud."
Ja see kasutaja töötab sellise andmestiku kogumiga. Ta muudab neid jÀrk-jÀrgult, luues oma momentfotod.
Ja meil tekib hargnemine. Igal arendajal meie puhul on vĂ”imalus omada oma klooni, mida ta toimetab, ja need andmed, mis on ĂŒhised, jagatakse kĂ”igi vahel.

Selle sĂŒsteemi juurutamiseks tuleb lahendada kaks probleemi:
Esimene on andmeallikas, kust te neid vĂ”tate. Saate seadistada replikeerimise produktsiooniga. Saate kasutada juba backup'e, mis teil on loodud, ma loodan. WAL-E, WAL-G vĂ”i Barman. Isegi kui kasutate mingisugust Cloud-lahendust, nĂ€iteks RDS-i vĂ”i Cloud SQL-i, vĂ”ite kasutada loogilisi dump'e. Kuid soovitame siiski kasutada backup'e, sest selle lĂ€henemise korral sĂ€ilitate ka failide fĂŒĂŒsilise struktuuri, mis aitab teil hoida lĂ€hedust nendele mÔÔdikutele, mida nĂ€eksite produktsioonis, et avastada olemasolevaid probleeme.
Teine on koht, kus soovite Database Labi hostida. See vĂ”ib olla Cloud vĂ”i On-premise. Siin on oluline öelda, et ZFS toetab andmete tihendamist. Ja teeb seda ĂŒsna hĂ€sti.
Kujutage ette, et igal sellisel kloonil, sÔltuvalt nendest toimingutest, mida me andmebaasiga teeme, hakkab kuhjuma mingi dev. Selle dev jaoks on samuti vajalik ruum. Kuid kuna me vÔtsime andmebaasi, mis on 4,5 terabaiti, suudab ZFS selle tihendada 3,5 terabaitini. SÔltuvalt seadistustest vÔib seda varieerida. Ja meil on veel dev jaoks ruumi.
Sellist sĂŒsteemi saab kasutada erinevates juhtumites.
Need on arendajad, DBA, kes kontrollivad pÀringuid, et optimeerida.
Seda saab kasutada QA-testimisel konkreetse migratsiooni kontrollimiseks enne, kui me selle produktsiooni lĂŒkkame. Samuti saame luua spetsiaalse keskkonna QA jaoks reaalsete andmetega, kus nad saavad uusi funktsioone testida. Ja see vĂ”tab sekundeid, mitte tunde vĂ”i isegi pĂ€evi, nagu mĂ”nes teises olukorras, kus Ă”hukesi kloone ei kasutata.
Ja veel ĂŒks erijuhtum. Kui ettevĂ”ttes ei ole analĂŒĂŒsisĂŒsteemi seadistatud, saame vĂ€lja tuua Ă”hukese klooni tootmisandmebaasist ja anda selle pikaajalistele pĂ€ringutele vĂ”i spetsiaalsetele indeksitele, mida analĂŒĂŒsis vĂ”ib kasutada.

Sellega lÀhenemisega:
On madal vigade tÔenÀosus "produksioonis", sest me oleme kÔik muudatused testinud tÀismahus andmetel.
Köitub testimise kultuur, kuna nĂŒĂŒd ei pea te tundide kaupa ootama omaenda keskkonda.
Ja pole takistusi, pole ootamist testimiste vahel. Sa saad tÔesti minna ja kontrollida. Ja nii on parem, sest me kiirendame arendust.
Refaktoreerimist on vÀhem. Vigu satub prod'i vÀhem. Me refaktoreerime neid hiljem vÀhem.
Me saame teha pöördumatuid muudatusi. Seda standardsetes lÀhenemisviisides ei ole.
- See on kasulik, kuna jagame testakeskuste ressursse.
See on juba hea, aga mida veel saaks kiirendada?

Sellise sĂŒsteemi tĂ”ttu saame oluliselt vĂ€hendada sisenemise takistust sellisesse testimisse.
Praegu on kinni ring, kus arendaja peab, et saada juurdepÀÀs tÔelistele tÀismÔÔtmetele, muutuma eksperdiks. Talle peab selline juurdepÀÀs olema usaldatud.
Aga kuidas kasvada, kui seda ei ole. Aga mida teha, kui sul on juurdepÀÀs ainult vÀga vÀikesele testandmete kogumile? Siis ei saa tÔelist kogemust.

Kuidas sellest ringist vÀlja tulla? Esimese liidese jaoks, mis sobib igasuguste arendajate tasemele, valisime Slack-boti. Aga see vÔib olla ka mÔni muu liides.
Mida see vÔimaldab teha? Sa saad vÔtta konkreetse pÀringu ja saata selle spetsiaalsesse kanalisse andmebaasi. Me deploy'ime automaatselt sekundite jooksul Ôhukese klooni. KÀivitame selle pÀringu. Kogume metriika ja soovitusi. NÀitame visualiseerimist. Ja see kloon jÀÀb edasi, et seda pÀringut saaks kuidagi optimeerida, lisada indekseid jne.
Ja Slack annab meile samuti vÀlja pakutud koostöö vÔimalused. Kuna see on lihtsalt kanal, saab otse seal thread'is selle pÀringu arutelu alustada, pingida oma kolleege, DBA'sid, kes on ettevÔtte sees.

Aga loomulikult on ka probleeme. Kuna see on tÔeline maailm ja me kasutame serverit, millel hostime korraga palju kloone, peame piirama mÀlu ja protsessorivÔimsuse koguseid, mis on kloonidele kÀttesaadavad.
Aga et need testid oleksid usutavad, tuleb see probleem kuidagi lahendada.
On selge, et oluline punkt on samad andmed. Aga seda meil juba on. Ja me tahame saavutada sama konfiguratsiooni. Ja me saame anda praktiliselt sama konfiguratsiooni.
Oleks lahe omada sama riistvara nagu tootmises, kuid see vÔib erineda.

MĂ€letagem, kuidas Postgres mĂ€lu kasutab. Meil on kaks vahemĂ€lu. Ăks failisĂŒsteemist ja teine omalt poolt Postgres, st Shared Buffer Cache.
Oluline on mÀrkida, et Shared Buffer Cache eraldatakse Postgresi kÀivitamisel vastavalt sellele, millise suuruse te konfiguratsioonis mÀÀrate.
Ja teine ââpĂ€ringukĂ€ivitus kasutab kogu saadaval ruumi.

Ja kui me teeme mitmeid kloone ĂŒhel masinal, siis tĂ€itame jĂ€rk-jĂ€rgult mĂ€lu. Ja ideaalis peaks Shared Buffer Cache olema 25% kogu masinas saadaval olevast mĂ€lu mahust.
Ja selgub, et kui me seda parameetrit ei muuda, saame ĂŒhel masinal kĂ€ivitada vaid 4 instantsi, st kokku 4 sellist Ă”hukest klooni. Ja see on muidugi halb, sest tahaksime neid palju rohkem omada.
Aga teisest kĂŒljest kasutatakse Buffer Cache'i pĂ€ringute tĂ€itmiseks, indeksite jaoks, st plaan sĂ”ltub sellest, kui suured meie kased on. Ja kui me lihtsalt vĂ”tame selle parameetri ja vĂ€hendame, vĂ”ivad meie plaanid oluliselt muutuda.
NĂ€iteks kui prod-s on meil suur vahemĂ€lu, siis Postgres eelistab indeksit. Aga kui pole, siis on SeqScan. Mis mĂ”te oleks, kui meie plaanid ei ĂŒhtiks?
Aga siin jÔuame sellise lahenduseni, et tegelikult plaan Postgresis ei sÔltu konkreetsest Shared Bufferi suurusest plaanis, vaid see sÔltub effective_cache_size'ist.

Effective_cache_size on eeldatav vahemĂ€lu maht, mis meile kĂ€tte saadaval on, st Buffer Cache ja failisĂŒsteemi vahemĂ€lu kokku. See mÀÀratakse konfiguratsiooni kaudu. Ja seda mĂ€lu ei eraldata.
Ja selle parameetri tÔttu saame Postgrest natuke petta, öeldes, et meile on tegelikult palju andmeid kÀtte saadaval, isegi kui neid andmeid meil ei ole. Ja seega plaanid vastavad tÀpselt produktsioonile.
Aga see vÔib mÔjutada ajastust. Ja optimeerime pÀringud ajastuse jÀrgi, kuid oluline on, et ajastus sÔltub paljuski erinevatest teguritest:
SÔltub hetkel toimuvast koormusest produktiivses keskkonnas.
SÔltub masina omadustest.
Ja see on kaudne parameeter, kuid tegelikult saame optimeerida just selle pÔhjal, kui palju andmeid see pÀring loeb, et saada tulemus.
Ja kui soovite, et ajastus oleks vĂ”imalikult sarnane sellele, mida nĂ€eme prod-is, peame valima vĂ”imalikult sarnase riistvara ja vĂ”ib-olla isegi rohkem, et kĂ”ik kloonid mahtuda. Kuid see on kompromiss, st saate sarnased plaanid, nĂ€ete, kui palju andmeid konkreetne pĂ€ring loeb, ja saate teha jĂ€relduse â on see pĂ€ring hea (vĂ”i migratsioon) vĂ”i halb, seda tuleb veel optimeerida.
Vaatame, kuidas Joe optimeerimine tÀpsemalt kÀib.

VĂ”tame pĂ€ringu reaalsest sĂŒsteemist. Antud juhul on andmebaas â 1 terabyte. Ja me soovime arvutada vĂ€rskete postituste arvu, millel on rohkem kui 10 meeldimist.

Me saadame sÔnumi kanalisse, kloon lahti. Ja me nÀeme, et selline pÀring kulgeb 2,5 minutiga. See on esimene asi, mida me mÀrkame.
B Joe nÀitab automaatseid soovitusi, mis pÔhinevad plaanil ja mÔÔtmetel.
Me nÀeme, et pÀring töötleb liiga palju andmeid, et saada suhteliselt vÀhe ridu. Ja vajalik on mingi spetsialiseeritud indeks, kuna me oleme mÀrganud, et pÀringus on liiga palju filtreeritud ridu.

Vaatame lĂ€hemalt, mis juhtus. TĂ”epoolest, me nĂ€eme, et lugesime peaaegu poolteist gigabaiti andmeid failikĂŒst vĂ”i isegi kettalt. Ja see pole hea, kuna saime vaid 142 rida.

Ja nÀiliselt on meil siin indeksiskann ja see peaks olema kiiresti tÀidetud, kuid kuna me filtreerisime liiga palju ridu (me pidime neid arvestama), kulges pÀring aeglaselt.

Ja see juhtus plaanis, kuna pĂ€ringu ja indeksi tingimused ei ĂŒhtinud osaliselt.

Vaatame, kas suudame indeksi tÀpsemaks teha ja vaatame, kuidas pÀringu tÀitmine pÀrast seda muutub.

Indeksi loomine vĂ”ttis palju aega, kuid nĂŒĂŒd kontrollime pĂ€ringut ja nĂ€eme, et aeg 2,5 minutist on nĂŒĂŒd vaid 156 millisekundit, mis on piisavalt hea. Ja loeme vaid 6 megabaiti andmeid.

Ja nĂŒĂŒd kasutame ainult indeksi skannimist.
Teine oluline teema on see, et soovime plaani esitada selgemal viisil. Oleme rakendanud visuaali koos Flame Graphsiga.

See on teine pÀring, rikkalikum. Ja Flame Graphs'i ehitame kahe parameetri pÔhjal: see on andmete hulk, mida konkreetne sÔlm plaanis luges, ja ajastus, st sÔlme tÀitmise aeg.
Siin saame konkreetselt sÔlmede vahel vÔrrelda. Ja on selge, milline neist vÔtab rohkem vÔi vÀhem ruumi, mida tavaliselt on keeruline teha teiste visualiseerimismeetodite puhul.

Loomulikult teavad kÔik explain.depesz.com. Selle visualiseerimise hea omadus on see, et salvestame tekstiplaani ja toome vÀlja mÔned olulised parameetrid tabelisse, et oleks vÔimalik sorteerida.
Ja arendajad, kes ei ole sellesse teemasse sĂŒvenenud, kasutavad samuti explain.depesz.com, kuna neile on lihtsam mĂ”ista, millised mÔÔdikud on olulised ja millised mitte.

On olemas uus visuaaliseerimise lĂ€henemine â explain.dalibo.com. Nad teevad puu-struktuuri visualiseerimise, kuid siin on sĂ”lmede omavaheline vĂ”rdlemine vĂ€ga keeruline. Siin on vĂ”imalik hĂ€sti mĂ”ista struktuuri, tĂ”si, kui pĂ€ring on suur, tuleb skrullida edasi-tagasi, aga see on ka variant.
Koostöö

Ja nagu ma juba ĂŒtlesin, annab Slack meile koostöö vĂ”imaluse. NĂ€iteks kui me kohtame keerulist pĂ€ringut, mille optimeerimine ei ole selge, saame Slackis selle kĂŒsimuse oma kolleegidega arutada.

Meie arvates on oluline katsetada tÀismÔÔdus andmetega. Selleks oleme loonud tööriista Update Database Lab, mis on avatud allikaga. Saate kasutada ka Joe bot'i. Saate selle otse praegu vÔtta ja endale rakendada. KÔik juhendid on seal saadaval.
Oluline on mÀrkida, et lahendus ise ei ole revolutsiooniline, kuna on olemas Delphix, kuid see on ettevÔtte lahendus. See on tÀielikult suletud ja maksab vÀga palju. Me spetsialiseerume Postgres'ile. Need on kÔik avatud allika tooted. Liituge meiega!
Sellega lÔpetan. AitÀh!
KĂŒsimused
Tere! AitĂ€h ettekande eest! VĂ€ga huvitav, eriti minu jaoks, kuna ma olen mĂ”ni aeg tagasi lahendanud sarnase ĂŒlesande. SeetĂ”ttu on mul terve hulk kĂŒsimusi. Loodan, et suudan vĂ€hemalt osa nendest esitada.
Huvitav, kuidas te selle keskkonna jaoks ruumi arvutate? Tehnoloogia eeldab, et teatud tingimustes vĂ”ivad teie kloonid kasvada maksimaalsesse suurusesse. ĂkskĂ”ik kui palju, kui teil on kĂŒmme terabaidi andmebaas ja 10 klooni, on lihtne simuleerida olukorda, kus iga kloon kaalub 10 unikaalset andmestikku. Kuidas te seda ruumi arvutate, st seda delta, millest rÀÀkisite, kus need kloonid elavad?
Hea kĂŒsimus. Siin on oluline jĂ€lgida konkreetseid kloone. Kui mĂ”ni kloon muutub liiga suureks ja hakkab kasvama, saame kĂ”igepealt kasutajale selle kohta hoiatuse anda vĂ”i kohe selle klooni peatada, et meil ei tekiks ebaĂ”nnestumise olukorda.
Jah, mul on seotud kĂŒsimus. Ehk siis, kuidas te tagate nende moodulite elutsĂŒkli? Meil on see probleem ja eraldi lugu. Kuidas see toimub?
Iga klooni puhul on mingisugune ttl. PÔhimÔtteliselt on meil fikseeritud ttl.
Kui kaua, kui saladus ei ole?
1 tund, st kui see on mitteaktiivne â 1 tund. Kui seda ei kasutata, siis me hĂ€vitame selle. Aga siin pole midagi ĂŒllatavat, sest me saame klooni tĂ”sta sekunditega. Ja kui see uuesti vajalikuks osutub, siis â palun.
Technoloogiate valik huvitab mind ka, sest nÀiteks kasutame me paralleelselt mitmeid viise erinevatel pÔhjusel. Miks just ZFS? Miks te ei kasutanud LVM-i? Te mainisite, et LVM-iga oli probleeme. Millised need probleemid olid? Minu arvates on kÔige optimaalsem variant SCSI puhul, tootlikkuse mÔttes.
Mis on ZFS-i peamine probleem? See, et pead töötama ĂŒhel hostil, st kĂ”ik instantsid elavad ĂŒhe operatsioonisĂŒsteemi raames. SCSI puhul saad aga ĂŒhenduda erinevate seadmetega. Kitsaskohad on ainult need blokid, mis on SCSI-l. Ja kĂŒsimus on just tehnoloogiate valikus. Miks mitte LVM?
LVM-i kohta saame rÀÀkida kohtumisel. SCSI osas â see on lihtsalt kallis. ZFS-i sĂŒsteemi saame juurutada kus iganes. Sa vĂ”id selle oma masinas seadistada. Sa saad lihtsalt alla laadida repot ja selle ĂŒles seada. ZFS töötab praktiliselt igal pool, kui me rÀÀgime Linuxist. Ehk saame vĂ€ga paindliku lahenduse. Ja ZFS ise on karbist vĂ€lja vĂ€ga palju pakkuda. Sa saad sinna laadida piiramatult andmeid, ĂŒhendada palju kettaid, seal on snapshots. Ja nagu ma juba mainisin, on seda lihtne administreerida. Ehk siis see paistab kasutamisel vĂ€ga mugav. See on testitud, see on olemas olnud juba kaua. Sellel on vĂ€ga suur kogukond, mis kasvab. ZFS on vĂ€ga usaldusvÀÀrne lahendus.
Nikolai Samohvalov: Kas ma vÔin veel kommenteerida? Minu nimi on Nikolai, me töötame koos Anatoliiga. Olen nÔus, et SCSI on suurepÀrane. Ja mÔnedel meie klientidel on nÀiteks Pure Storage jne.
Anatoli Ă”igesti mĂ€rkis, et meie eesmĂ€rk on modulaarne lĂ€henemine. Tulevikus vĂ”ib realiseerida ĂŒhe liidese â tee snapshot, tee kloon, hĂ€vita kloon. See kĂ”ik on lihtne. Ja salvestusseade on suurepĂ€rane, kui see on olemas.
Aga ZFS on kĂ”igile kĂ€ttesaadav. Alates DelPhix'ist on neid juba piisavalt, neil on 300 klienti. Neist Fortune 100 is on 50 klienti, see tĂ€hendab, et nad sihivad NASA-d jne. On aeg, et see tehnoloogia oleks kĂ€tte saadav kĂ”igile. SeetĂ”ttu on meil avatud lĂ€htekoodiga pĂ”hituum. Meil on osa liidest, mis ei ole avatud lĂ€htekoodiga. See on platvorm, mida me nĂ€itame. Aga me tahame, et see oleks kĂ€tte saadav igaĂŒhele. Me soovime teha revolutsiooni, et kĂ”ik testijad lĂ”petaksid aimamise sĂŒlearvutites. Me peame kirjutama SELECT ja kohe nĂ€gema, et see on aeglane. Ei ole enam aega oodata, et DBA sellest rÀÀgib. See on meie peamine eesmĂ€rk. Ja ma arvan, et me jĂ”uame sinna kĂ”ik. Ja seda me teeme, et see oleks kĂ”igile kĂ€tte saadav. SeetĂ”ttu ZFS, sest see saab olema kĂ€ttesaadav igal pool. AitĂ€h kogukonnale probleemide lahendamise eest ja selle eest, et seal on avatud lĂ€htekoodi litsents jne.
Tere! AitĂ€h ettekande eest! Minu nimi on Maksim. Me lahendasime samu probleeme. Meil endal on see lahendatud. Kuidas te jagate ressursse nende kloonide vahel? Iga kloon vĂ”ib igal ajahetkel tegeleda oma asjadega: ĂŒks testib ĂŒhte, teine teist, kellelgi on indeks ehitamisel, kellelgi on raskem töö. Ja kui CPU on vĂ”imalik jagada, siis kuidas te jagate IO-d?
Teine kĂŒsimus ebaĂŒhtlike keskkondade kohta. Oletame, et mul on siin ZFS ja kĂ”ik on suurepĂ€rane, aga kliendil tootmises on ext4, nĂ€iteks. Kuidas sellisel juhul kĂ€ib?
KĂŒsimused on vĂ€ga head. Mainisin veidi seda probleemi seoses ressursside jagamisega. Lahendus on jĂ€rgmine. Kujutage ette, et te testite stagingus. Ka seal vĂ”ib samal ajal tekkida olukord, kus keegi toob ĂŒhe koormuse, keegi teine teise. Ja lĂ”puks te nĂ€ete arusaamatuid mÔÔdikuid. Sama probleem vĂ”ib olla tootmises. Kui soovite kontrollida mingit pĂ€ringut ja nĂ€ete, et sellega on mingi probleem â see töötab aeglaselt, siis tegelikult ei olnud probleem pĂ€ringus, vaid see, et mĂ”ni teine koormus on paralleelselt kĂ€imas.
SeetĂ”ttu on oluline keskenduda sellele, milline plaan on, kuidas me plaanis edasi liigume ja kui palju andmeid me selleks ĂŒles tĂ”stame. Kui nĂ€iteks meie kettad on millegagi koormatud, mĂ”jutab see kindlasti ajakava. Ent me saame andmete arvu pĂ”hjal hinnata, kui koormatud see pĂ€ring on. Ei ole nii tĂ€htis, et samal ajal on ka mĂ”ni muu tĂ€itmine.
Mul on kaks kĂŒsimust. See on vĂ€ga Ă€ge asi. Kas on olnud juhtumeid, kus andmed tootmises on kriitilise tĂ€htsusega, nĂ€iteks krediitkaardinumbrid? Kas on juba midagi valmis vĂ”i on see eraldi ĂŒlesanne? Ja teine kĂŒsimus â kas MySQL jaoks on midagi sellist olemas?
Andmete osas. Me teeme obfuskeeringut, seni kuni me ei tee seda. Kuid kui te kĂ€itate Joe't, kui te ei anna arendajatele juurdepÀÀsu, siis ligipÀÀsu andmetele ei ole. Miks? Sest Joe ei nĂ€ita andmeid. Ta nĂ€itab ainult mÔÔdikuid, plaane ja kĂ”ik. See tehti spetsiaalselt, kuna see on ĂŒks meie kliendi nĂ”uetest. Nad soovisid vĂ”imalust optimeerida, kuid mitte anda kĂ”igile juurdepÀÀsu.
MySQL-i osas. Seda sĂŒsteemi saab kasutada igasuguste asjade jaoks, mis salvestavad olekut kettale. Ja kuna me tegeleme Postgres'iga, siis esmalt teeme me tĂ€ielikult automatiseerimise Postgres'ile. Me tahame automatiseerida andmete saamist varukoopiast. Me konfigureerime Postgres'i Ă”igesti. Me teame, kuidas teha nii, et plaanid kattuksid jne.
Kuna sĂŒsteem on skaleeritav, saab seda kasutada ka MySQL-i jaoks. Sellised nĂ€ited on olemas. Sarnane asi on Yandexil, aga nad ei avalda seda kuskil. Nad kasutavad seda Yandex.Metrixis. Seal on just MySQL-i lugu. Kuid tehnoloogiad on samad, ZFS.
AitĂ€h ettekande eest! Mul on ka paar kĂŒsimust. Te mainisite, et kloonimist saab kasutada analĂŒĂŒsiks, nĂ€iteks seal lisaindeksite koostamiseks. Kas saaksite veidi lĂ€hemalt rÀÀkida, kuidas see töötab?
Ja annan kohe teise kĂŒsimuse seoses ĂŒhtlasele seadmestikule ja ĂŒhtlasele plaanile. Plaan sĂ”ltub ka statistikatest, mida Postgres kogub. Kuidas te selle probleemi lahendate?
Konkreetsete juhtumite analĂŒĂŒsist ei ole midagi, kuna me pole veel seda kasutanud, kuid selline vĂ”imalus on olemas. Kui rÀÀgime indeksitest, siis kujutage ette, et tabelis, kus on sadu miljoneid kirjeid, tehakse pĂ€ringud veerule, mis tavaliselt ei ole tootmises indekseeritud. Ja me tahame seal mingid andmed vĂ€lja lugeda. Kui see pĂ€ring tootmises kĂ€ivitada, on vĂ”imalus, et tootmises tekib seiskumine, kuna pĂ€ring vĂ”ib seal kesta minuteid.
Olgu, teeme peene klooni, mida pole hirmus paariks minutiks peatada. Ja et oleks mugavam analĂŒĂŒtikat arvutada, lisame indeksid neile veergudele, mis meid huvitavad.
Kas indeks luuakse iga kord uuesti?
Saame teha nii, et puutume andmete kĂŒlge, teeme snapshot'id ning taastume seejĂ€rel nendelt snapshot'idelt ja kĂ€ivitame uued pĂ€ringud. Ehk saame tĂ”sta uusi kloone juba olemasolevate indeksitega.
Mis puutub statistika kĂŒsimusse, siis kui me taastume varukoopiast, kui me teeme replikatsiooni, siis meie statistika on kindlasti sama. Sest me toome kogu fĂŒĂŒsilise andmestruktuuri, ehk andmed koos kĂ”igi statistika meetritega.
Siin on teine probleem. Kui teie jaoks on kasutuses pilve lahendus, siis seal on saadaval vaid loogilised dump'id, sest Google ja Amazon ei luba vĂ”tta fĂŒĂŒsilist koopiat. See tekitab probleemi.
AitĂ€h ettekande eest. Siin kĂ”las kaks head kĂŒsimust MySQL'i ja ressursside jagamise kohta. Kuid pĂ”himĂ”tteliselt, kĂ”ik kokkuvĂ”ttes viib meid sellele, et see teema ei ole seotud konkreetsete andmebaasimootorite, vaid ĂŒldiselt failisĂŒsteemiga. Seega, ressursside jagamise kĂŒsimused tuleks lahendada sealt, mitte lĂ”pus, et see on Postgres, vaid failisĂŒsteemis. serveris, instantsis.
Minu kĂŒsimus on veidi erinev. See on rohkem suunatud andmebaasi mitmekihilisusele, kus on mitu kihti. NĂ€iteks, me oleme seadnud ĂŒlesande kĂŒmnete terabaitide pildi vĂ€rskendamiseks, mille puhul toimub replikatsioon. Ja me kasutame seda lahendust konkreetselt andmebaaside jaoks. Replikatsioon toimub, andmed uuendatakse. Samal ajal töötab 100 töötajat, kes pidevalt kĂ€ivitavad erinevaid snapshot'e. Mida teha? Kuidas vĂ€ltida konflikti, et nad kĂ€ivitasid ĂŒhe ja siis failisĂŒsteem muutus ning need snapshot'id kĂ”ik lĂ€ksid segamini?
Nad ei sĂ”ida, kuna ZFS töötab nii. Saame hoida eraldi ĂŒhes voos failisĂŒsteemi muudatusi, mis tĂ€nu replikatsioonile tulevad. Ja hoida klone vanadel andmeversioonidel, mida arendajad kasutavad. See töötab meil, sellega on kĂ”ik korras.
Tuleb vÀlja, et uuendus toimub nagu tÀiendav kiht ja kÔik uued haarangud tulevad juba selle kihi pÔhjal, jah?
Eelmiste kihtide pÔhjal, mis tulid eelmiste replikatsioonidega.
Eelmised kihid kukuvad Àra, aga nad viitavad vanale kihile, ja uued pildid saavad olema viimase kihi pÔhjal, mis saadi uuendamise kÀigus?
Ăldiselt, jah.
SeejÀrel on meil palju kihte. Ja aja jooksul tuleb neid tihendada?
Jah, tÀiesti Ôige. On mingi aken. Hoidame nÀdalasi haaranguid. See sÔltub, milline ressurss teil on. Kui teil on vÔimalus hoida palju andmeid, siis saab haaranguid pikka aega hoida. Need ei kustuta ennast. Andmete rikkumist ei toimu. Kui haarangud on vananenud, nagu me arvame, st see sÔltub ettevÔtte poliitikast, siis saame need lihtsalt kustutada ja ruumi vabastada.
Tere, aitĂ€h ettekande eest! Joe kĂŒsimuse kohta. Te ĂŒtlesite, et kliendile ei soovitud andmetele juurdepÀÀsu anda. TĂ€pselt öeldes, kui inimesel on Explain Analyze tulemus, siis ta vĂ”ib andmeid vaadata.
Just nii. NĂ€iteks vĂ”ime kirjutada: "SELECT FROM WHERE email = kellelegi". St me ei nĂ€e andmeid, aga mĂ”ningaid kaudseid mĂ€rke saame vaadata. Seda tuleb mĂ”ista. Aga teisest kĂŒljest on see kĂ”ik nĂ€htav. Meil on logide audit, meil on kolleegide kontroll, kes samuti nĂ€evad, millega arendajad tegelevad. Ja kui keegi proovib nii teha, siis turvateenistus tuleb tema juurde ja tegeleb selle kĂŒsimusega.
Tere pĂ€evast! AitĂ€h ettekande eest! Mul on lĂŒhike kĂŒsimus. Kui ettevĂ”ttes Slacki ei kasutata, kas sellega on praegu mingisugune seos olemas vĂ”i on arendajatele vĂ”imalik kĂ€ivitada instantsid, et testrakendus saaks andmebaasidega ĂŒhendada?
Hetkel on ainult Slacki tugi, st ei ole ĂŒhtegi muud messengerit, kuid oleks vĂ€ga mĂ”nus toetada ka teisi messengerite. Mida te saate teha? Saate vĂ€lja arendada oma DB Lab'i ilma Joe'ita, kasutada REST API-t vĂ”i meie platvormi ning luua kloone ning ĂŒhendada PSQL-iga. Kuid seda saab teha, kui olete valmis andma oma arendajatele juurdepÀÀsu andmetele, kuna siin ei ole enam mingit ekraani.
Mulle ei ole see vahekiht vajalik, vaid mul on vaja sellist vÔimalust.
Siis - jah, seda on vÔimalik teha.
Allikas: habr.com
