
Kuidas backend-arendaja mĂ”istab, et SQL-pĂ€ring töötab tootmises hĂ€sti? Suurtes vĂ”i kiiresti kasvavates ettevĂ”tetes ei ole juurdepÀÀs tootmisele kĂ”igile. Ja isegi juurdepÀÀsuga ei saa kĂ”iki pĂ€ringuid valutult kontrollida ning andmebaasi koopia loomine vĂ”tab sageli tunde. Selle probleemiga tegelemiseks lĂ”ime tehis DBA â Joe. Ta on juba edukalt rakendatud mitmes ettevĂ”ttes ja aitab kĂŒmneid arendajaid.
Video:

Tere kÔigile! Minu nimi on Anatoli Stansler. Töötab ettevÔttes . Meie eesmÀrk on kiirendada arendusprotsessi, vÀhendades Postgres'iga seotud viivitusi arendajatel, DBA-l ja QA-l.
Meil on toredad kliendid ja tĂ€na pĂŒhendame osa oma ettekandest juhtumitele, millega oleme nende töö kĂ€igus kokku puutunud. RÀÀgin, kuidas aitasime neil lahendada piisavalt tĂ”siseid probleeme.

Kui me teeme arengut ja teeme keerulisi koormatud migratsioone, kĂŒsime endalt: 'Kas see migratsioon Ă”nnestub?'. Kasutame ĂŒlevaateid, kasutame kogenud kolleegide ja DBA-ekspertide teadmisi. Nemad saavad öelda, kas see Ă”nnestub vĂ”i mitte.
Kuid vĂ”ib-olla oleks parem, kui saaksime seda testida tĂ€iskoopiates. TĂ€na rÀÀgime, millised on praegused testimise lĂ€henemisviisid, kuidas neid paremini rakendada ja milliseid tööriistu kasutada. RÀÀgime ka nende lĂ€henemiste eeliste ja puuduste ĂŒle ning sellest, mida saame siin parandada.

Kes on kunagi otse prod-s indekseid teinud vĂ”i muudatusi teinud? TĂ”eliselt palju inimesi. Ja kellel on see viinud andmete kadumiseni vĂ”i seiskumisteni? Siis on see valu teile tuttav. Ănneks on varukoopiad olemas.

Esimene lÀhenemine on testimine prod-s. Kas siis, kui arendaja töötab kohalikult, kasutades testandmeid ja piiratud valikut. Siis viime selle prod-sse ja saame sellise olukorra.

See on valus, see on kallis. TÔenÀoliselt ei ole seda parem teha.
Kuidas siis paremini teha?

VÔtame stagingi ja suuname sinna mingi osa prod-ist. VÔi parimal juhul vÔtame tÔelise prod-i, kÔik andmed. Ja pÀrast seda, kui oleme kohalikult arendanud, kontrollime seda veel ka stagingis.
See vÔimaldab meil eemaldada osa vigu, st nÀiteks mitte lubada prod-s.
Millised on probleemid?
- Probleem on selles, et jagame seda staging keskkonda kolleegidega. Ja vĂ€ga sageli juhtub, et teed mingisuguse muudatuse, ja hop â ja mingeid andmeid ei ole, töö lĂ€heb raisku. Staging oli mitme terabaidi suurune. Ja selle uuesti kĂ€ivitamine vĂ”tab kaua aega. Otsustame selle homseks edasi lĂŒkata. Meie arendus on peatunud.
- Ja muidugi töötab seal palju meie kolleegi, palju meeskondi. Ja me peame kÀsitsi koordineerima. See on ebamugav.

Ja tuleb öelda, et meil on ainult ĂŒks katse, ĂŒks vĂ”imalus, kui soovime andmebaasis mingeid muudatusi teha, andmeid puudutada, struktuuri muuta. Ja kui midagi lĂ€heb valesti, kui migratsioonis on viga, siis me ei saa kiiresti tagasi kerida.
See on parem kui eelmine lÀhenemine, kuid siiski on suur tÔenÀosus, et mÔni viga jÔuab tootmisse.

Miks ei saa igale arendajale anda testkeskkonda, tÀiskohaga koopiat? Ma arvan, et on selge, mis takistab.
Kellel on andmebaas, mis on suurem kui terabyte? Suuremal osal rahvast.
Ja on selge, et hoida masinate infrastruktuuri iga arendaja jaoks, kui tootmine on nii suur, on vÀga kallis ja ka aeganÔudev.
Meil on kliente, kes mÔistsid, kui oluline on kÔik muudatused testida tÀismahus koopiatel. Kuid nende andmebaas on vÀiksem kui tera, ning ressursid, et iga arendaja jaoks testimisstandi hoida, puuduvad. SeetÔttu peavad nad laadima dump'id oma kohalikule masinale ja testima seelÀbi. See vÔtab palju aega.

Isegi kui teete seda infrastruktuuri sees, on ĂŒhe terabaiandmete allalaadimine tunnis juba vĂ€ga hea saavutus. Kuid nad kasutavad loogilisi dump'e, laadides neid pilvest kohalikule masinale. Nende allalaadimise kiirus on umbes 200 gigabaiti tunnis. Ja lisaks on vaja aega, et loogilisest dump'ist taastuda, indekseid rakendada jne.
Kuid nad kasutavad seda lÀhenemist, kuna see vÔimaldab hoida tootmiskeskkonna usaldusvÀÀrsena.
Mida me siin teha saame? Teeme nii, et testimisstandid oleksid odavad ja anname igale arendajale oma isikliku testimisstandi.
Ja see on teostatav.

Ja ja, sellise lĂ€henemisviisi korral, kus loome iga arendaja jaoks Ă”hukesed kloonid, saame selle jagada ĂŒhel masinal. NĂ€iteks kui teil on nelja terabaidi andmebaas ja soovite anda selle 10 arendajale, ei pea teil olema 10 x nelja terabaiti andmebaase. Ăks masin piisab selleks, et luua iga arendaja jaoks Ă”hukesed eraldatud koopiad, kasutades ĂŒhte masinat. Kuidas see töötab, selgitan natuke hiljem.

Reaalne nÀide:
Andmebaas â 4,5 terabaiti.
Saame saada iseseisvaid koopiaid 30 sekundiga.
Te ei pea ootama testimispinda ja sÔltuma selle suurusest. Saate selle sekundite jooksul. Need on tÀielikult eraldatud keskkonnad, kuid jagavad andmeid omavahel.
See on Àge. Siin rÀÀgime maagiast ja paralleelsest universumist.

Meie puhul toimib see OpenZFS sĂŒsteemi abil.

OpenZFS on copy-on-write failisĂŒsteem, mis toob juba vĂ€lja kastist toetuse snapshot'ide ja kloonide jaoks. See on usaldusvÀÀrne ja skaleeritav. Selle haldamine on vĂ€ga lihtne. Saate selle kahe kĂ€suga kĂ€ivitada.
On ka teisi vÔimalusi:
LVM,
SAN (nÀiteks Pure Storage).
Andmebaasi labor, millest ma rÀÀgin, on modulaarsed. Seda saab rakendada kasutades erinevaid variante. Kuid praegu keskendume OpenZFS-ile, kuna LVM-iga olid konkreetselt probleeme.

Kuidas see töötab? Selle asemel, et iga kord, kui me andmeid muudame, neid uuesti kirjutada, salvestame me need lihtsalt, mÀrkides, et need uued andmed kuuluvad uuele ajamomendile, uuele snapshots.
Ja edaspidi, kui me soovime tagasi minna vĂ”i teha uue klooni mingist vanemast versioonist, ĂŒtlemeki: âOlgu, palun andke meile need andmepangad, mis on nii tĂ€histatud.â
Ja kasutaja töötab selliste andmete kogumiga. Ta hakkab neid jÀrk-jÀrgult muutma, luues oma snapshots.
Ja meil on hargnemine. Igal arendajal on meie puhul vĂ”imalus omada oma kloni, mida ta redigeerib, ning ĂŒldised andmed jagatakse kĂ”ikide vahel.

Sellise sĂŒsteemi kĂ€ivitamiseks tuleb lahendada kaks probleemi:
Esimene on andmeallikas, kust te andmeid vĂ”tate. Saab seadistada replikaate production'ist. VĂ”ite kasutada juba olemasolevaid varukoopiaid, loodan, et need on olemas. WAL-E, WAL-G vĂ”i Barman. Kui kasutate mĂ”nda pilvelahendust, nĂ€iteks RDS vĂ”i Cloud SQL, vĂ”ite kasutada loogilisi dump'e. Siiski soovitame kasutada varukoopiaid, kuna sellisel lĂ€henemisel sĂ€ilib ka failide fĂŒĂŒsiline struktuur, mis aitab lĂ€hemale pÀÀseda neile meetrikaile, mida nĂ€eksite production'is, et tuvastada olemasolevad probleemid.
Teine on koht, kus soovite Database Labi majutada. See vÔib olla Cloud vÔi On-premise. Oluline on mÀrkida, et ZFS toetab andmete tihendamist. Ja teeb seda piisavalt hÀsti.
Kujutage ette, et igal sellisel kloonil, sÔltuvalt toimingutest, mida me andmebaasiga teeme, hakkab kogunema mingi dev. Selleks tuleb ka dev'ile ruumi. Kuid kuna me vÔtsime andmebaasi 4,5 terabaiti, tihendab ZFS selle 3,5 terabaidiks. SÔltuvalt seadetest saab seda varieerida. Ja meil jÀÀb veel ruumi dev'ile.
Sellist sĂŒsteemi saab kasutada erinevate juhtumite jaoks.
Need to optimize database queries? Our developers and DBAs are here for you.
This can be utilized in QA testing to validate specific migrations before we deploy to production. We can also create specialized environments for QA with real data, allowing for testing of new features. This process takes seconds instead of waiting hours or even days in cases where thin clones arenât employed.
Additionally, if the company lacks an analytics system, we can allocate a thin clone of the production database for long queries or for special indexes that could be used in analytics.

With this approach:
There is a low likelihood of errors in production since all changes have been tested on full-sized data.
We promote a culture of testing because there's no need to wait for hours for your own environment anymore.
There are no barriers or waiting times between tests. You can genuinely go and check. This improves the process as we accelerate development.
Refactoring will be reduced. Fewer bugs will reach production. We will spend less time refactoring later.
We can revert irreversible changes. This is not available in standard approaches.
- This is beneficial because we share resources for testing environments.
It's already good, but what else could we enhance?

With such a system, we can significantly lower the entry barrier to this type of testing.
Currently, there is a vicious circle where a developer must become an expert to access real full-scale data. They have to be trusted with such access.
But how can one grow without it? And what if you only have access to a very small set of test data? Then you won't gain real experience.

How to break out of this cycle? As the first interface, convenient for developers at any level, we chose a Slack bot. However, it can be any other interface.
Mida see vÔimaldab teha? Saame vÔtta konkreetse pÀringu ja saata selle andmebaasi spetsiaalsesse kanalisse. Me loome automaatselt sekunditega Ôhukese klooni. KÀitame selle pÀringu. Kogume metrikad ja soovitused. NÀitame visualiseerimist. Ja edasi jÀÀb see kloon selleks, et saaksime pÀringut kuidagi optimeerida, lisada indekseid jne.
Slack pakub meile ka koostöövÔimalusi paketi sees. Kuna see on lihtsalt kanal, saab seal pÀringu kohta arutelu alustada, pingsida oma kolleege, DBA-sid, kes on ettevÔttes.

Kuid muidugi on ka probleeme. Kuna see on reaalses maailmas ja kasutame serverit, kus toimetame mitme klooniga, peame piirama mÀlu ja protsessorivÔimsuse hulka, mis kloonidele on kÀttesaadav.
Aga et need testid oleksid realistlikud, tuleb see probleem kuidagi lahendada.
On selge, et oluline aspekt on andmete ĂŒhtekuuluvus. Kuid see on meil juba olemas. Soovime saavutada sama konfiguratsiooni. Ja saame anda praktiliselt sama konfiguratsiooni.
Ăge oleks omada sama riistvara nagu tootmises, kuid see vĂ”ib erineda.

Tuletame meelde, kuidas Postgres mĂ€lu kasutab. Meil on kaks vahemĂ€lu. Ăks failisĂŒsteemist ja teine, Postgresi enda, st Shared Buffer Cache.
Oluline on mÀrkida, et Shared Buffer Cache eraldatakse Postgresi kÀivitamisel sÔltuvalt sellest, millise suuruse mÀÀrate konfiguratsioonis.
Teine vahemÀlu kasutab kogu saadaval oleva ruumi.

Ja kui teeme mitu klooni ĂŒhel masinal, siis hakkame jĂ€rk-jĂ€rgult mĂ€lu tĂ€itma. Ja ideaalis peaks Shared Buffer Cache olema 25% kogu mĂ€lu mahust, mis masinal on saadaval.
Selgub, et kui me seda parameetrit ei muuda, saame ĂŒhel masinal kĂ€itada ainult 4 instantsi, st 4 ĂŒsna Ă”hukest klooni. Ja see pole muidugi hea, sest tahame neid palju rohkem.
Teiselt poolt kasutatakse Buffer Cache'i pÀringute tÀitmiseks, indeksite jaoks, st plaan sÔltub sellest, kui suured meie vahemÀlud on. Ja kui me lihtsalt vÔtame selle parameetri ja vÀhendame seda, siis vÔivad meie plaanid oluliselt muutuda.
NÀiteks, kui meil on produkus suur vahemÀlu, siis Postgres eelistab indeksi kasutamist. Kui ei, siis kasutatakse SeqScan'i. Mis oleks mÔte, kui need plaanid ei klappiks?
Kuid siin jÔuame selleni, et tÔeliselt ei sÔltu Postgres'e plaan konkreetsest Shared Buffer suurusest, vaid sellest, mida defineerib effective_cache_size.

Effective_cache_size on eeldatav vahemĂ€lu maht, mis meile kĂ€ttesaadav on, st Buffer Cache ja failisĂŒsteemi vahemĂ€lu kogumaht. See mÀÀratakse seadistustes. Ja see mĂ€lu ei ole eraldatud.
Selle parameetri tÔttu saame me Petta Postgres'e, öeldes, et meil on tegelikult palju andmeid kÀttesaadavad, isegi kui meil neid andmeid pole. Niiviisi kattuvad plaanid tÀielikult tootmisest.
Aga see vÔib mÔjutada ajastust. Optimeerime pÀringud ajastuse jÀrgi, kuid oluline on, et ajastus sÔltub paljuski teguritest:
See sÔltub hetkelisest koormusest producuses.
See sÔltub masina omadustest.
Ja see on kaudne parameeter, kuid tÔeliselt saame optimeerida just andmete hulga pÔhjal, mida see pÀring loeb, et saavutada tulemus.
Ja kui soovite, et ajastus oleks lĂ€hedane sellele, mida nĂ€eme tootmises, peame vĂ”tma maksimaalselt sarnase raudvara ja vĂ”ib-olla isegi rohkem, et kĂ”ik kloonid Ă€ra mahuksid. Kuid see on kompromiss, see tĂ€hendab, et saate samasugused plaanid, nĂ€ete, kui palju andmeid konkreetne pĂ€ring loeb, ja saate jĂ€reldada â kas see pĂ€ring on hea (vĂ”i migratsioon) vĂ”i halb, ja seda tuleb veel optimeerida.
AnalĂŒĂŒsime, kuidas Joe optimeerimise protsess tegelikult kĂ€ib.

VĂ”tame pĂ€ringu reaalsest sĂŒsteemist. Antud juhul on andmebaas 1 terabait. Ja me tahame arvutada vĂ€rskete postituste arvu, millel on ĂŒle 10 meeldimise.

Kirjutame sÔnumi kanalisse, kloon avanes meie jaoks. Ja me nÀeme, et selline pÀring töötab 2,5 minuti jooksul. See on esimene, mida me mÀrkame.
Joe nÀitab automaatseid soovitusi, mis pÔhinevad plaanil ja mÔÔdikutel.
Me nÀeme, et pÀring töötleb liiga palju andmeid, et saada suhteliselt vÀike rida. Ja on vajalik mÔni spetsialiseeritud indeks, kuna 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 faili vahemÀlust vÔi isegi diskilt. Ja see pole hea, kuna saime kÀtte vaid 142 rida.

Ja tundub, et meil on siin indeksiskane ja see pidi kiiresti töötama, kuid kuna filtreerisime liiga palju ridu (me pidime neid arvestama), töötas pÀring aeglaselt.

Ja see juhtus plaani tĂ”ttu, kuna pĂ€ringu tingimused ja indeksi tingimused ei ĂŒhtinud osaliselt.

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

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

Ja nĂŒĂŒd kasutame ainult indeksiskane.
Teine oluline lugu on see, et me tahame plaani esitada arusaadavamal viisil. Oleme rakendanud visualiseerimist Flame Graphs abil.

See on teine, keerukam pĂ€ring. Flame Graph-e ehitame kahest parameetrist: andmete hulgast, mida konkreetne sĂ”lm on analĂŒĂŒsinud, ja ajast, st sĂ”lme tĂ€itmise ajast.
Siin saame tÀpselt vÔrrelda sÔlmi. On selge, milline neist nÔuab rohkem vÔi vÀhem, mis on tavaliselt teistes visualiseerimise meetodites keeruline.

Muidugi, kÔik tunnevad explain.depesz.com'i. Selle visualiseerimise hea omadus on see, et me salvestame tekstiplani ja toome vÀlja mÔned peamised parameetrid tabelis, et saaksime need jÀrjestada.
Ja arendajad, kes pole veel sellesse teemasse sĂŒvenenud, kasutavad samuti explain.depesz.com'i, kuna neile on lihtsam aru saada, millised mÔÔdikud on olulised ja millised mitte.

On uus lĂ€henemine visualiseerimisele â explain.dalibo.com. Nad teevad puu struktuuri visualiseerimise, kuid siin on vĂ€ga keeruline sĂ”lmi omavahel vĂ”rrelda. Siin on hea mĂ”ista struktuuri, kuid kui pĂ€ring on suur, tuleb kerida edasi-tagasi, kuid 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 tundub ebaselge, saame Slackis selle kĂŒsimuse oma kolleegide seas arutada.

Me arvame, et on oluline testida tÀismahus andmete peal. Selleks oleme loonud tööriista Update Database Lab, mis on saadaval avatud lÀhtekoodiga. Samuti vÔite kasutada bot Joe-d. Saate selle kohe endale vÔtta ja rakendada. KÔik juhendid on seal saadaval.
Oluline on ka mÀrkida, et see lahendus iseenesest ei ole revolutsiooniline, kuna Delphix on olemas, aga see on ettevÔtetasandi lahendus. See on tÀiesti suletud ja maksab vÀga palju. Meie spetsialiseerume just Postgressile. KÔik meie tooted on avatud lÀhtekoodiga. Liituge meiega!
Sellega lÔpetan. AitÀh!
KĂŒsimused
Tere! AitĂ€h ettekande eest! VĂ€ga huvitav, eriti mulle, kuna ma lahendasin umbes sellise ĂŒlesande mĂ”ni aeg tagasi. SeetĂ”ttu on mul mitmeid kĂŒsimusi. Loodan, et saan vĂ€hemalt mĂ”ned neist esitada.
Kuidas te kuvatavat ruumi selle keskkonna jaoks arvutate? Tehnoloogia tĂ€hendab, et teatud asjaoludel vĂ”ivad teie kloonid suureneda maksimaalse suuruseni. Lihtsalt öeldes, kui teil on kĂŒmme terabaiti andmeid ja 10 klooni, siis on kerge modelleerida olukorda, kus iga kloon kannab 10 unikaalset andmestikku. Kuidas te seda ruumi arvutate, st seda delta, millest olete rÀÀkinud, kus need kloonid elavad?
Hea kĂŒsimus. Siin on oluline jĂ€lgida konkreetseid kloone. Ja kui kloonil toimub mĂ”ni liiga suur muutus ja see hakkab suurenema, siis saame kĂ”igepealt kasutajale selle kohta hoiatuse anda vĂ”i kohe selle klooni peatada, et meil ei tekiks tĂ”rkeolukorda.
Jah, mul on tĂ€iendav kĂŒsimus. Kuidas te tagate nende moodulite elutsĂŒkli? Meil on see probleem ja tĂ€iesti eraldi lugu. Kuidas see toimub?
Igal kloonil on mingi ttl. Ăldiselt on meil fikseeritud ttl.
Mis see on, kui saladus ei ole?
1 tund, stabiilselt â 1 tund. Kui seda ei kasutata, siis hĂ€vitame selle. Siiski pole siin ĂŒllatust, kuna saame kloone sekunditega luua. Ja kui seda taas vajatakse, siis olge lahkesti.
Mulle on tehnoloogiate valik samuti huvitav, kuna me, nĂ€iteks, kasutame paralleelselt mitmeid meetodeid erinevatel pĂ”hjustel. Miks just ZFS? Miks te ei kasutanud LVM-i? Te mainisite, et LVM-iga olid probleemid. Millised need probleemid olid? Minu arvates on kĂ”ige optimaalsem lahendus, mis pĂ”hineb sĂŒdamekompleksil, arvestades jĂ”udlust.
Mis on peamine probleem ZFS-iga? See, et peate kĂ€ivitama selle ĂŒhel hostil, mis tĂ€hendab, et kĂ”ik instances elavad ĂŒhe operatsioonisĂŒsteemi raamides. Ja sĂŒdamekompleksi puhul saate erinevat riistvara ĂŒhendada. Kitsaskohad on ainult need plokid, mis on sĂŒdamekompleksis. Ja huvitav on just tehnoloogiate valiku kĂŒsimus. Miks mitte LVM?
Conkreetsem LVM-i arutame kohtumisel. Andmesalvestuslahendused â see on lihtsalt kulukas. ZFS-sĂŒsteemi saame rakendada igal pool. Sa vĂ”id selle oma masinas ĂŒles seada. Lihtsalt laadi alla repositoorium ja kĂ€ivita see. ZFS sobib praktiliselt kĂ”igile, kui rÀÀgime Linuxist. See tĂ€hendab, et saame vĂ€ga paindliku lahenduse. Ja ZFS annab juba iseenesest vĂ€ga palju funktsioone. Sa saad laadida sinna lĂ”pmatus koguses andmeid, ĂŒhendada palju kettaid, on olemas snapshot'id. Ja nagu ma juba ĂŒtlesin, on selle haldamine vĂ€ga lihtne. See on tĂ”eliselt mugav kasutada. See on tĂ”estatud, tal on palju aastaid kogemust. Sellel on suur kasvav kogukond. ZFS on vĂ€ga usaldusvÀÀrne lahendus.
Nikolai Samokhvalov: Kas ma saaksin veel kommenteerida? Minu nimi on Nikolai, töötan koos Anatoliiga. Olen nÔus, et andmesalvestuslahendused on suurepÀrased. Ja mÔnel meie kliendil on olemas Pure Storage jne.
Anatoli tĂ”i Ă”igesti esile, et meie fookus on modulaarsete lahenduste loomisel. Tulevikus saame rakendada ĂŒhe liidese â tee snapshot, tee kloon, hĂ€vita kloon. See on kĂ”ik lihtne. Ja andmesalvestuslahendus on suurepĂ€rane, kui see on olemas.
Aga ZFS on kergesti kÀtte saadaval. Piisab DelPhixist, neil on 300 klienti. Neist Fortune 100 seas on 50 klienti, st nad sihivad NASA-d jne. On aeg, et see tehnoloogia oleks kÔikidele kergesti kÀttesaadav. SeetÔttu on meil avatud lÀhtekoodiga tuum. Meil on osa liidesest, mis ei ole avatud lÀhtekoodiga. See on platvorm, mida me tutvustame. Aga me tahame, et kÔigil oleks sellele ligipÀÀs. Soovime teha revolutsiooni, et kÔik testijad saaksid lÔpetada arvutite peal spekuleerimise. Peame kirjutama SELECT ja kohe nÀgema, et see on aeglane. Piisab ootamisest, kuni DBA sellest rÀÀgib. See on meie peamine eesmÀrk. Ja ma usun, et me jÔuame selleni. Ja selle ehitame, et see oleks kÔigile. SeetÔttu ZFS, sest see saab olema igal pool kergesti kÀtte saadav. AitÀh kogukonnale probleemide lahendamise eest ja avatud lÀhtekoodiga litsentsi eest jne.
Tere! AitĂ€h ettekande eest! Minu nimi on Maxim. Me lahendasime samasuguseid probleeme. Meie juures on need lahendatud. Kuidas jagate ressursse nende kloonide vahel? Iga kloon vĂ”ib igal hetkel tegeleda oma asjadega: ĂŒks testib ĂŒhte, teine teist, kellelgi ehitatakse indeksit, kellelgi on kĂ€imas keeruline töö. Ja kui CPU-d saab veel jagada, siis kuidas jagate IO-d? See on esimene kĂŒsimus.
Ja teine kĂŒsimus seondub stendide erinevusele. Oletame, et mul on siin ZFS ja kĂ”ik on suurepĂ€rane, aga kliendi prod keskkonnas on ext4, nĂ€iteks. Kuidas sellisel juhul toimida?
KĂŒsimused on tĂ”esti head. Mainisin veidi seda probleemi, et jagame ressursse. Lahendus on jĂ€rgmine. Kujutage ette, et testite staging keskkonnas. Seal vĂ”ib samuti korraga tekkida olukord, kus keegi annab ĂŒhe koormuse, keegi teine teise. Ja lĂ”puks nĂ€ete veidraid mÔÔdikuid. Sama probleem vĂ”ib esineda ka prod keskkonnas. Kui soovite mĂ”nda pĂ€ringut testida ja nĂ€ete, et sellega on mingi probleem â see töötab aeglaselt, siis tegelikult pole probleem pĂ€ringus, vaid selles, et on mingi paralleelne koormus.
SeetÔttu on oluline keskenduda sellele, milline on plaan, millised on sammud meie plaani raames ja kui palju andmeid me selleks tÔstame. See, et meil on diskid, nÀiteks, koormatud millegagi, mÔjutab otseselt ajakava. Kuid saame andmete hulga pÔhjal hinnata, kui koormav see pÀring on. Pole nii oluline, et samal ajal toimub veel mÔni tÀitmine.
Mul on kaks kĂŒsimust. See on tĂ”esti lahe asi. Kas on olnud juhtumeid, kus andmed tootmises on kriitilise tĂ€htsusega, nĂ€iteks krediitkaardinumber? Kas on midagi valmis tehtud vĂ”i on see eraldi ĂŒlesanne? Ja teine kĂŒsimus â kas MySQL jaoks on midagi sarnast?
Andmete osas. Me teeme obfuskatsiooni nii kaua, kui me seda ei tee. Aga kui te kasutate Joe'd, ja kui te ei anna arendajatele juurdepÀÀsu, siis andmetele ligipÀÀsu ei ole. Miks? Sest Joe ei nĂ€ita andmeid. Ta nĂ€itab ainult nĂ€itajaid, plaane ja muud. Nii tehti teadlikult, kuna see on ĂŒks meie kliendi nĂ”udmistest. Nad soovisid optimeerimise vĂ”imalust, aga samas mitte anda kĂ”igile hoolimatult ligipÀÀsu.
MySQL-i kohta. Seda sĂŒsteemi saab kasutada igasugusel otstarbel, mis salvestab oleku kettale. Ja kuna me tegeleme Postgres'iga, teeme praegu kĂ”igepealt tĂ€ielikku automatiseerimist Postgres'e jaoks. Me tahame automatiseerida andmete hankimist varukoopiast. Konfigureerime Postgres'i Ă”igesti. Me teame, kuidas tagada, et plaanid kattuksid jms.
Kuna sĂŒsteem on laiendatav, saab seda kasutada ka MySQL jaoks. Selliseid nĂ€iteid leidub. Sarnane lahendus on ka Yandexil, kuid nad ei avalda seda kuskil. Nad kasutavad seda sisemiselt Yandex.Metriks. Ja seal ongi tegemist MySQL looga. Ent tehnoloogiad on samad, ZFS.
AitĂ€h ettekande eest! Mul on paar kĂŒsimust. Mainisite, et kloonimist saab kasutada analĂŒĂŒtikas, nĂ€iteks tĂ€iendavate indeksite loomiseks. Kas saaksite rÀÀkida, kuidas see töötab?
Ja esitan kohe teise kĂŒsimuse identsete standide ning plaanide osas. Aja sĂ”ltub ka Postgres'i kogutud statistikatest. Kuidas te seda probleemi lahendate?
Konkreetsete juhtumite analĂŒĂŒtika osas meil pole veel kogemusi, kuid see vĂ”imalus on olemas. Kui rÀÀgime indeksitest, siis kujutage ette, et pĂ€ringut aetakse lĂ€bi tabeli, kus on sadu miljoneid kirjeid ja veergu, mis tavaliselt prod-is ei ole indekseeritud. Ja me tahame seal andmeid arvutada. Kui seda pĂ€ringut prod-is korraldada, vĂ”ib esineda vĂ”imalus, et prod-is on peatus, kuna pĂ€ring töötab seal minut aega.
Selge, teeme peene klooni, mida ei ole hirmus mĂ”neks minutiks peatada. Ja et analĂŒĂŒtikat oleks mugavam jĂ€lgida, lisame indeksid neisse veergudesse, kus meid andmed huvitavad.
Kas indeks luuakse iga kord uuesti?
Saame teha nii, et muudetud andmetest teeme snapshot'id, ja seejÀrel taastume sellest snapshot'ist ning edastame uusi pÀringuid. See tÀhendab, et saame luua uusi kloone juba eelnevalt mÀÀratud indeksitega.
Statistika kohta, kui taastume varukoopiast vÔi teeme replikatsiooni, siis meie statistika jÀÀb tÀpselt samaks. Sest toome tagasi kogu andmekonstruktsiooni, st andmed koos kÔikide statistikamÔÔdikute ja metrikatega.
Siin on teine probleem. Kui kasutate pilvelahendust, on seal saadaval ainult loogilised dump'id, sest Google ja Amazon ei luba fĂŒĂŒsilist koopiat vĂ”tta. See toob kaasa sellise probleemi.
AitĂ€h esituse eest. Siin kĂ”las kaks head kĂŒsimust MySQL ja ressursside jagamise kohta. Kuid pĂ”himĂ”tteliselt on see teema, mis ei puuduta ainult konkreetseid andmebaase, vaid kĂ€sitleb laiemalt failisĂŒsteemi. Seega peaksid ka ressursside jagamise kĂŒsimused olema sealt lĂ€htuvad, mitte alla viimase, et see on Postgres, vaid failisĂŒsteemi tasandil. serveril, instance.
Minu kĂŒsimus on pisut teistsugune. See on lĂ€hedasem andmebaasi mitmekihilisusele, kus on mitu kihti. NĂ€iteks oleme seadistanud kĂŒmnete terabaitide suuruse pildi uuendamise, meie replikatsioon on töös. Me kasutame selle lahendust andmebaasides. Replikatsioon toimub, andmete uuendamine aset leiab. Samal ajal töötab 100 töötajat, kes pidevalt kĂ€ivitavad neid erinevaid hetkepilte. Mida teha? Kuidas vĂ€ltida konflikte, et nad kĂ€ivitasid ĂŒhte, kuid siis failisĂŒsteem muudeti ja need hetkepildid kĂ”ik katki lĂ€ksid?
Need ei lĂ€he katki, sest ZFS töötab just niimoodi. Me saame hoida ĂŒhes voos eraldi failisĂŒsteemi muudatused, mis tulevad replikatsiooni kaudu. Ja vanade andmeversioonide peal hoida kloone, mida arendajad kasutavad. Ja see töötab meil hĂ€sti, kĂ”ik on korras.
Tundub, et vÀrskendus toimub lisakihtina, ja kÔik uued pildid pÔhinevad just sellel kihil, eks?
Eelmised kihid, mis olid varasemate replikatsioonide kÀigus tehtud.
Eelmised kihid kaovad, kuid nad viitavad vanale kihile, ja uued pildid vÔtavad nad viimasest kihist, mis saadi vÀrskenduse kÀigus?
Ăldiselt, jah.
Seega, meil tuleb hulganisti kihte. Ja aja jooksul tuleb neid kokku suruda?
Jah, see on Ôige. On mingi aeg. Me salvestame nÀdalased snappid. See sÔltub sellest, kui palju ressursse teil on. Kui teil on vÔimalus palju andmeid salvestada, saate snappe pika aja jooksul hoida. Need ei kustuta end ise. Andmete rikkumist ei toimu. Kui snappid on ajale jalgu jÀÀnud, nagu me arvame, s.t. see sÔltub ettevÔtte poliitikast, siis saame need lihtsalt kustutada ja ruumi vabastada.
Tere, aitĂ€h ettekande eest! Joe teema osas. Te ĂŒtlesite, et tellija ei tahtnud andmetele igaĂŒhel ligipÀÀsu anda. Rangelt öeldes, kui inimesel on Explain Analyze tulemus, siis ta vĂ”ib andmeid piiluda.
Just so. For example, we can write: "SELECT FROM WHERE email = some value". That is, we won't see the actual data, but we can look at some indirect signs. This needs to be understood. However, on the other hand, everything is visible. We have log auditing, and we have oversight from other colleagues who can also see what the developers are doing. If someone tries to do that, the security service will come to them and address the issue.
Good afternoon! Thank you for the presentation! I have a quick question. If Slack is not used in the company, is there any current connection to it, or can developers deploy instances to connect a test application to the databases?
Currently, there is a connection to Slack, meaning there's no other messenger being used, but we really want to support other messengers as well. What can you do? You can deploy a DB Lab without Joe, access it via REST API or our platform, create clones, and connect using PSQL. But that can only be done if you are willing to give your developers access to the data, as there won't be any screen in that case.
I donât need this intermediary; I need that capability.
Siis â jah, see on vĂ”imalik.
Allikas: habr.com
