DBA bot Joe. Anatoly Stansler (Postgres.ai)

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Hur förstÄr en backend-utvecklare att en SQL-frÄga kommer att fungera bra pÄ en "prod"? I stora eller snabbt vÀxande företag har inte alla tillgÄng till "produkten". Och med Ätkomst kan inte alla förfrÄgningar kontrolleras smÀrtfritt, och att skapa en kopia av databasen tar ofta timmar. För att lösa dessa problem skapade vi en konstgjord DBA - Joe. Det har redan framgÄngsrikt implementerats i flera företag och hjÀlper mer Àn ett dussin utvecklare.

videor:

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Hej alla! Jag heter Anatoly Stansler. Jag jobbar pÄ ett företag postgres.ai. Vi Àr fast beslutna att pÄskynda utvecklingsprocessen genom att ta bort förseningarna som Àr förknippade med Postgres arbete frÄn utvecklare, DBA:er och QA:er.

Vi har fantastiska kunder och idag kommer en del av rapporten att Àgnas Ät de fall som vi trÀffade under arbetet med dem. Jag kommer att prata om hur vi hjÀlpte dem att lösa ganska allvarliga problem.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

NÀr vi utvecklar och gör komplexa högbelastningsmigreringar stÀller vi oss frÄgan: "Kommer den hÀr migreringen att ta fart?". Vi anvÀnder oss av recension, vi anvÀnder oss av kunskapen hos mer erfarna kollegor, DBA-experter. Och de kan sÀga om den kommer att flyga eller inte.

Men det kanske vore bÀttre om vi kunde testa det sjÀlva pÄ fullstora kopior. Och idag ska vi bara prata om vilka metoder för testning som finns nu och hur det kan göras bÀttre och med vilka verktyg. Vi kommer ocksÄ att prata om för- och nackdelar med sÄdana tillvÀgagÄngssÀtt och vad vi kan fixa hÀr.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Vem har nÄgonsin gjort index direkt pÄ prod eller gjort nÄgra Àndringar? Ganska lite av. Och för vem ledde detta till att data gick förlorade eller att det blev stillestÄnd? DÄ vet du denna smÀrta. Tack gode gud att det finns backuper.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Det första tillvÀgagÄngssÀttet Àr testning i prod. Eller, nÀr en utvecklare sitter pÄ en lokal maskin har han testdata, det finns nÄgot slags begrÀnsat urval. Och vi rullar ut för att driva, och vi fÄr den hÀr situationen.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Det gör ont, det Àr dyrt. Det Àr nog bÀst att lÄta bli.

Och vad Àr det bÀsta sÀttet att göra det?

DBA bot Joe. Anatoly Stansler (Postgres.ai)

LÄt oss ta iscensÀttning och vÀlja nÄgon del av prod dÀr. Eller i bÀsta fall, lÄt oss ta en riktig prod, all data. Och efter att vi har utvecklat det lokalt kommer vi dessutom att kontrollera om det finns iscensÀttning.

Detta gör att vi kan ta bort nÄgra av felen, dvs förhindra att de finns pÄ prod.

Vilka Àr problemen?

  • Problemet Ă€r att vi delar denna iscensĂ€ttning med kollegor. Och vĂ€ldigt ofta hĂ€nder det att du gör nĂ„gon form av förĂ€ndring, bam - och det finns inga data, arbetet Ă€r nere i avloppet. Staging var flera terabyte. Och man fĂ„r vĂ€nta lĂ€nge pĂ„ att den ska stiga igen. Och vi bestĂ€mmer oss för att slutföra det imorgon. Det Ă€r det, vi har en utveckling.
  • Och naturligtvis har vi mĂ„nga kollegor som jobbar dĂ€r, mĂ„nga team. Och det mĂ„ste göras manuellt. Och detta Ă€r obekvĂ€mt.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Och det Àr vÀrt att sÀga att vi bara har ett försök, ett skott, om vi vill göra nÄgra Àndringar i databasen, tryck pÄ data, Àndra strukturen. Och om nÄgot gick fel, om det fanns ett fel i migreringen, sÄ kommer vi inte snabbt att rulla tillbaka.

Detta Àr bÀttre Àn det tidigare tillvÀgagÄngssÀttet, men det Àr fortfarande stor sannolikhet att nÄgot slags fel kommer att gÄ till produktion.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Vad hindrar oss frÄn att ge varje utvecklare en testbÀnk, en kopia i full storlek? Jag tycker att det Àr tydligt vad som kommer i vÀgen.

Vem har en databas som Àr större Àn en terabyte? Mer Àn halva rummet.

Och det Àr klart att det Àr vÀldigt dyrt att behÄlla maskiner för varje utvecklare, nÀr det Àr sÄ stor produktion, och dessutom tar det lÄng tid.

Vi har kunder som har insett att det Àr vÀldigt viktigt att testa alla Àndringar pÄ kopior i full storlek, men deras databas Àr mindre Àn en terabyte, och det finns inga resurser för att hÄlla en testbÀnk för varje utvecklare. DÀrför mÄste de ladda ner dumparna lokalt till sin maskin och testa pÄ detta sÀtt. Det tar mycket tid.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Även om du gör det inom infrastrukturen Ă€r det redan mycket bra att ladda ner en terabyte data per timme. Men de anvĂ€nder logiska dumpar, de laddar ner lokalt frĂ„n molnet. För dem Ă€r hastigheten cirka 200 gigabyte per timme. Och det tar fortfarande tid att vĂ€nda frĂ„n den logiska soptippen, rulla upp indexen osv.

Men de anvÀnder detta tillvÀgagÄngssÀtt eftersom det tillÄter dem att hÄlla proden pÄlitlig.

Vad kan vi göra hÀr? LÄt oss göra testbÀnkar billiga och ge varje utvecklare sin egen testbÀnk.

Och detta Àr möjligt.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Och i detta tillvÀgagÄngssÀtt, nÀr vi gör tunna kloner för varje utvecklare, kan vi dela det pÄ en maskin. Till exempel, om du har en 10TB-databas och vill ge den till 10 utvecklare, behöver du inte ha XNUMX x XNUMXTB-databaser. Du behöver bara en maskin för att göra tunna isolerade kopior för varje utvecklare som anvÀnder en maskin. Jag ska berÀtta hur det fungerar lite senare.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Verkligt exempel:

  • DB - 4,5 terabyte.

  • Vi kan fĂ„ oberoende kopior pĂ„ 30 sekunder.

Du behöver inte vÀnta pÄ ett provstÀll och beror pÄ hur stort det Àr. Du kan fÄ det pÄ nÄgra sekunder. Det blir helt isolerade miljöer, men som delar data sinsemellan.

Det hÀr Àr bra. HÀr pratar vi om magi och ett parallellt universum.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

I vÄrt fall fungerar detta med OpenZFS-systemet.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

OpenZFS Àr ett kopiera-pÄ-skriv-filsystem som stöder ögonblicksbilder och kloner direkt. Det Àr pÄlitligt och skalbart. Hon Àr vÀldigt lÀtt att hantera. Det kan bokstavligen distribueras i tvÄ lag.

Det finns andra alternativ:

  • lvm,

  • Förvaring (till exempel Pure Storage).

Databaslabbet jag pratar om Àr modulÀrt. Kan implementeras med dessa alternativ. Men för tillfÀllet har vi fokuserat pÄ OpenZFS, eftersom det var problem med LVM specifikt.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Hur det fungerar? IstÀllet för att skriva över data varje gÄng vi Àndrar den, sparar vi den genom att helt enkelt markera att denna nya data kommer frÄn en ny tidpunkt, en ny ögonblicksbild.

Och i framtiden, nÀr vi vill ÄterstÀlla eller vi vill göra en ny klon frÄn nÄgon Àldre version, sÀger vi bara: "OK, ge oss dessa datablock som Àr markerade sÄ hÀr."

Och den hÀr anvÀndaren kommer att arbeta med en sÄdan datamÀngd. Han kommer gradvis att Àndra dem, göra sina egna ögonblicksbilder.

Och vi kommer att förgrena oss. Varje utvecklare i vÄrt fall kommer att ha möjlighet att ha sin egen klon som han redigerar, och den data som delas kommer att delas mellan alla.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

För att distribuera ett sÄdant system hemma mÄste du lösa tvÄ problem:

  • Den första Ă€r kĂ€llan till data, varifrĂ„n du kommer att ta den. Du kan stĂ€lla in replikering med produktion. Du kan redan anvĂ€nda sĂ€kerhetskopiorna som du har konfigurerat, hoppas jag. WAL-E, WAL-G eller Barman. Och Ă€ven om du anvĂ€nder nĂ„gon form av molnlösning som RDS eller Cloud SQL, sĂ„ kan du anvĂ€nda logiska dumpar. Men vi rĂ„der dig fortfarande att anvĂ€nda sĂ€kerhetskopior, för med detta tillvĂ€gagĂ„ngssĂ€tt kommer du ocksĂ„ att behĂ„lla den fysiska strukturen för filerna, vilket gör att du kan komma Ă€nnu nĂ€rmare de mĂ€tvĂ€rden som du skulle se i produktionen för att fĂ„nga upp de problem som finns.

  • Det andra Ă€r dĂ€r du vill vara vĂ€rd för databaslabbet. Det kan vara Cloud, det kan vara On-premise. Det Ă€r viktigt att sĂ€ga hĂ€r att ZFS stöder datakomprimering. Och det gör det ganska bra.

FörestÀll dig att för varje sÄdan klon, beroende pÄ operationerna som vi gör med basen, kommer nÄgon form av dev att vÀxa. För detta behöver dev ocksÄ utrymme. Men pÄ grund av att vi tog en bas pÄ 4,5 terabyte kommer ZFS att komprimera den till 3,5 terabyte. Detta kan variera beroende pÄ instÀllningarna. Och vi har fortfarande plats för dev.

Ett sÄdant system kan anvÀndas för olika fall.

  • Dessa Ă€r utvecklare, DBA:er för frĂ„gevalidering, för optimering.

  • Detta kan anvĂ€ndas i QA-testning för att testa en viss migration innan vi rullar ut den till prod. Och vi kan ocksĂ„ lyfta speciella miljöer för QA med riktiga data, dĂ€r de kan testa ny funktionalitet. Och det kommer att ta sekunder istĂ€llet för att vĂ€nta timmar, och kanske dagar i vissa andra fall dĂ€r tunna kopior inte anvĂ€nds.

  • Och ett annat fall. Om företaget inte har ett analyssystem inrĂ€ttat kan vi isolera en tunn klon av produktbasen och ge den till lĂ„nga frĂ„gor eller speciella index som kan anvĂ€ndas i analys.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Med detta tillvÀgagÄngssÀtt:

  1. LÄg sannolikhet för fel pÄ "prod", eftersom vi testade alla Àndringar pÄ data i full storlek.

  2. Vi har en testkultur, för nu behöver du inte vÀnta i timmar pÄ din egen monter.

  3. Och det finns ingen barriÀr, ingen vÀntan mellan proven. Du kan faktiskt gÄ och kolla. Och det blir bÀttre pÄ det hÀr sÀttet nÀr vi snabbar pÄ utvecklingen.

  • Det blir mindre refaktorering. FĂ€rre buggar kommer att hamna i prod. Vi kommer att refaktorera dem mindre senare.

  • Vi kan vĂ€nda oĂ„terkalleliga förĂ€ndringar. Detta Ă€r inte standardmetoden.

  1. Detta Àr fördelaktigt eftersom vi delar pÄ testbÀnkarnas resurser.

Redan bra, men vad mer skulle kunna pÄskyndas?

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Tack vare ett sÄdant system kan vi kraftigt minska tröskeln för att gÄ in i sÄdana tester.

Nu finns det en ond cirkel dÀr en utvecklare mÄste bli expert för att fÄ tillgÄng till riktig fullstor data. Han mÄste anförtros sÄdan tillgÄng.

Men hur man vÀxer om det inte finns dÀr. Men vad hÀnder om du bara har en mycket liten uppsÀttning testdata tillgÀnglig för dig? DÄ fÄr du ingen riktig upplevelse.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Hur tar man sig ur denna cirkel? Som det första grÀnssnittet, bekvÀmt för utvecklare pÄ alla nivÄer, valde vi Slack-boten. Men det kan vara vilket annat grÀnssnitt som helst.

Vad tillÄter det dig att göra? Du kan ta en specifik frÄga och skicka den till en speciell kanal för databasen. Vi kommer automatiskt att distribuera en tunn klon pÄ nÄgra sekunder. LÄt oss köra denna begÀran. Vi samlar in mÀtvÀrden och rekommendationer. LÄt oss visa en visualisering. Och dÄ kommer den hÀr klonen att finnas kvar sÄ att den hÀr frÄgan kan optimeras pÄ nÄgot sÀtt, lÀgga till index, etc.

Och Àven Slack ger oss möjligheter till samarbete utanför boxen. Eftersom detta bara Àr en kanal kan du börja diskutera denna begÀran direkt i trÄden för en sÄdan begÀran, pinga dina kollegor, DBA:er som finns inne i företaget.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Men det finns naturligtvis problem. Eftersom detta Àr den verkliga vÀrlden, och vi anvÀnder en server som Àr vÀrd för mÄnga kloner samtidigt, mÄste vi komprimera mÀngden minne och CPU-kraft som Àr tillgÀnglig för klonerna.

Men för att dessa tester ska vara rimliga mÄste du pÄ nÄgot sÀtt lösa det hÀr problemet.

Det Àr tydligt att den viktiga punkten Àr samma data. Men vi har det redan. Och vi vill uppnÄ samma konfiguration. Och vi kan ge en sÄdan nÀstan identisk konfiguration.

Det skulle vara coolt att ha samma hÄrdvara som i produktionen, men det kan skilja sig Ät.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

LÄt oss komma ihÄg hur Postgres arbetar med minne. Vi har tvÄ cacher. En frÄn filsystemet och en inbyggd Postgres, det vill sÀga Shared Buffer Cache.

Det Àr viktigt att notera att den delade buffertcachen tilldelas nÀr Postgres startar, beroende pÄ vilken storlek du anger i konfigurationen.

Och den andra cachen anvÀnder allt tillgÀngligt utrymme.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Och nÀr vi gör flera kloner pÄ en maskin visar det sig att vi gradvis fyller minnet. Och pÄ ett bra sÀtt Àr Shared Buffer Cache 25 % av den totala mÀngden minne som Àr tillgÀngligt pÄ maskinen.

Och det visar sig att om vi inte Àndrar denna parameter kommer vi att kunna köra endast 4 instanser pÄ en maskin, dvs 4 av alla sÄdana tunna kloner. Och detta Àr förstÄs dÄligt, eftersom vi vill ha mycket fler av dem.

Men Ä andra sidan anvÀnds Buffer Cache för att exekvera frÄgor för index, det vill sÀga planen beror pÄ hur stora vÄra cacher Àr. Och om vi bara tar den hÀr parametern och minskar den, kan vÄra planer förÀndras mycket.

Till exempel, om vi har en stor cache pÄ prod, sÄ kommer Postgres att föredra att anvÀnda ett index. Och om inte, sÄ kommer det att finnas SeqScan. Och vad vore poÀngen om vÄra planer inte sammanföll?

Men hÀr kommer vi till slutsatsen att planen i Postgres faktiskt inte beror pÄ den specifika storleken som anges i den delade bufferten i planen, den beror pÄ effektiv_cache_storlek.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Effective_cache_size Àr den uppskattade mÀngden cache som Àr tillgÀnglig för oss, dvs summan av buffertcache och filsystemcache. Detta stÀlls in av konfigurationen. Och detta minne Àr inte tilldelat.

Och pÄ grund av denna parameter kan vi pÄ ett sÀtt lura Postgres och sÀga att vi faktiskt har mycket data tillgÀnglig, Àven om vi inte har dessa data. Och dÀrmed kommer planerna helt att sammanfalla med produktionen.

Men detta kan pÄverka timingen. Och vi optimerar frÄgor efter timing, men det Àr viktigt att timing beror pÄ mÄnga faktorer:

  • Det beror pĂ„ belastningen som för nĂ€rvarande Ă€r pĂ„ prod.

  • Det beror pĂ„ sjĂ€lva maskinens egenskaper.

Och detta Àr en indirekt parameter, men i sjÀlva verket kan vi optimera exakt efter mÀngden data som den hÀr frÄgan kommer att lÀsa för att fÄ resultatet.

Och om du vill att timingen ska vara nÀra vad vi kommer att se i prod, dÄ mÄste vi ta den mest liknande hÄrdvaran och, möjligen, Ànnu mer sÄ att alla kloner passar. Men det hÀr Àr en kompromiss, det vill sÀga du kommer att fÄ samma planer, du kommer att se hur mycket data en viss frÄga kommer att lÀsa och du kommer att kunna dra slutsatsen om den hÀr frÄgan Àr bra (eller migrering) eller dÄlig, den behöver fortfarande optimeras .

LÄt oss ta en titt pÄ hur Joe Àr specifikt optimerad.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

LÄt oss ta en förfrÄgan frÄn ett riktigt system. I det hÀr fallet Àr databasen 1 terabyte. Och vi vill rÀkna antalet fÀrska inlÀgg som haft fler Àn 10 likes.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Vi skriver ett meddelande till kanalen, en klon har distribuerats Ät oss. Och vi kommer att se att en sÄdan begÀran kommer att slutföras pÄ 2,5 minuter. Det hÀr Àr det första vi lÀgger mÀrke till.

B Joe kommer att visa dig automatiska rekommendationer baserat pÄ planen och mÀtvÀrdena.

Vi kommer att se att frÄgan bearbetar för mycket data för att fÄ ett relativt litet antal rader. Och nÄgot slags specialiserat index behövs, eftersom vi mÀrkte att det finns för mÄnga filtrerade rader i frÄgan.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

LÄt oss ta en nÀrmare titt pÄ vad som hÀnde. Vi ser faktiskt att vi har lÀst nÀstan en och en halv gigabyte data frÄn filcachen eller till och med frÄn disken. Och det hÀr Àr inte bra, eftersom vi bara fick 142 rader.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Och, det verkar som, vi har en indexskanning hÀr och borde ha fungerat snabbt, men eftersom vi filtrerade bort för mÄnga rader (vi var tvungna att rÀkna dem) löste sig begÀran lÄngsamt.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Och detta hÀnde i planen pÄ grund av att villkoren i frÄgan och villkoren i indexet delvis inte stÀmmer överens.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

LÄt oss försöka göra indexet mer exakt och se hur frÄgekörningen Àndras efter det.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Skapandet av indexet tog ganska lÄng tid, men nu kollar vi frÄgan och ser att tiden istÀllet för 2,5 minuter bara Àr 156 millisekunder, vilket Àr bra nog. Och vi lÀser bara 6 megabyte data.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Och nu anvÀnder vi endast indexskanning.

En annan viktig historia Àr att vi vill presentera planen pÄ nÄgot mer begripligt sÀtt. Vi har implementerat visualisering med Flame Graphs.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Detta Àr en annan begÀran, mer intensiv. Och vi bygger Flame Graphs enligt tvÄ parametrar: det hÀr Àr mÀngden data som en viss nod rÀknade i planen och timingen, det vill sÀga nodens exekveringstid.

HÀr kan vi jÀmföra specifika noder med varandra. Och det blir tydligt vilken av dem som tar mer eller mindre, vilket vanligtvis Àr svÄrt att göra i andra renderingsmetoder.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Naturligtvis vet alla explain.depesz.com. En bra egenskap med denna visualisering Àr att vi sparar textplanen och Àven lÀgger in nÄgra grundlÀggande parametrar i en tabell sÄ att vi kan sortera.

Och utvecklare som Ànnu inte har fördjupat sig i det hÀr Àmnet anvÀnder ocksÄ explain.depesz.com, eftersom det Àr lÀttare för dem att ta reda pÄ vilka mÀtvÀrden som Àr viktiga och vilka som inte Àr det.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Det finns ett nytt tillvÀgagÄngssÀtt för visualisering - det hÀr Àr explain.dalibo.com. De gör en trÀdvisualisering, men det Àr vÀldigt svÄrt att jÀmföra noder med varandra. HÀr kan du förstÄ strukturen vÀl, men om det finns en stor förfrÄgan mÄste du blÀddra fram och tillbaka, men ocksÄ ett alternativ.

samarbete

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Och som sagt, Slack ger oss möjlighet att samarbeta. Till exempel, om vi stöter pÄ en komplex frÄga som inte Àr tydlig hur vi ska optimera, kan vi klargöra denna frÄga med vÄra kollegor i en trÄd i Slack.

DBA bot Joe. Anatoly Stansler (Postgres.ai)

Det verkar för oss som att det Àr viktigt att testa pÄ data i full storlek. För att göra detta gjorde vi verktyget Update Database Lab, som Àr tillgÀngligt i öppen kÀllkod. Du kan ocksÄ anvÀnda Joe-boten. Du kan ta det redan nu och implementera det pÄ din plats. Alla guider finns dÀr.

Det Àr ocksÄ viktigt att notera att lösningen i sig inte Àr revolutionerande, eftersom det finns Delphix, utan det Àr en företagslösning. Det Àr helt stÀngt, det Àr vÀldigt dyrt. Vi Àr speciellt specialiserade pÄ Postgres. Dessa Àr alla produkter med öppen kÀllkod. GÄ med oss!

Det Àr hÀr jag slutar. Tack!

frÄgor

HallÄ! Tack för rapporten! Mycket intressant, speciellt för mig, eftersom jag löste ungefÀr samma problem för en tid sedan. Och sÄ har jag ett antal frÄgor. Förhoppningsvis fÄr jag Ätminstone en del av det.

Jag undrar hur du berÀknar platsen för den hÀr miljön? Tekniken innebÀr att dina kloner under vissa omstÀndigheter kan vÀxa till maximal storlek. Grovt sett, om du har en tio terabyte databas och 10 kloner, sÄ Àr det lÀtt att simulera en situation dÀr varje klon vÀger 10 unika data. Hur berÀknar du denna plats, det vill sÀga deltat som du talade om, dÀr dessa kloner kommer att leva?

Bra frÄga. Det Àr viktigt att hÄlla reda pÄ specifika kloner hÀr. Och om en klon har en för stor förÀndring börjar den vÀxa, dÄ kan vi först utfÀrda en varning till anvÀndaren om detta, eller omedelbart stoppa denna klon sÄ att vi inte har en misslyckad situation.

Ja, jag har en kapslad frÄga. Det vill sÀga, hur sÀkerstÀller man livscykeln för dessa moduler? Vi har det hÀr problemet och en hel separat historia. Hur gÄr det till?

Det finns nÄgon ttl för varje klon. I grund och botten har vi en fast ttl.

Vad, om inte en hemlighet?

1 timme, dvs tomgÄng - 1 timme. Om den inte anvÀnds, dÄ slÄr vi den. Men det Àr ingen överraskning hÀr, eftersom vi kan höja klonen pÄ nÄgra sekunder. Och om du behöver det igen, snÀlla.

Jag Àr ocksÄ intresserad av valet av teknologier, eftersom vi till exempel anvÀnder flera metoder parallellt av en eller annan anledning. Varför ZFS? Varför anvÀnde du inte LVM? Du nÀmnde att det fanns problem med LVM. Vilka var problemen? Enligt min mening Àr det mest optimala alternativet med lagring, sett till prestanda.

Vad Àr huvudproblemet med ZFS? Det faktum att du mÄste köra pÄ samma vÀrd, dvs alla instanser kommer att leva inom samma OS. Och vid förvaring kan du ansluta olika utrustningar. Och flaskhalsen Àr bara de block som finns pÄ lagringssystemet. Och frÄgan om valet av teknologier Àr intressant. Varför inte LVM?

Specifikt kan vi diskutera LVM pÄ meetup. Om förvaring - det Àr bara dyrt. Vi kan implementera ZFS-systemet var som helst. Du kan distribuera den pÄ din maskin. Du kan helt enkelt ladda ner förvaret och distribuera det. ZFS Àr installerat nÀstan överallt om vi pratar om Linux. Det vill sÀga att vi fÄr en vÀldigt flexibel lösning. Och ZFS sjÀlv ger mycket ur lÄdan. Du kan ladda upp hur mycket data du vill, ansluta ett stort antal diskar, det finns ögonblicksbilder. Och det Àr som sagt lÀtt att administrera. Det vill sÀga, den verkar vÀldigt trevlig att anvÀnda. Han Àr testad, han Àr mÄnga Är gammal. Han har ett vÀldigt stort samhÀlle som vÀxer. ZFS Àr en mycket pÄlitlig lösning.

Nikolai Samokhvalov: FÄr jag kommentera ytterligare? Jag heter Nikolay, vi arbetar tillsammans med Anatoly. Jag hÄller med om att förvaring Àr bra. Och nÄgra av vÄra kunder har Pure Storage mm.

Anatoly noterade korrekt att vi Àr fokuserade pÄ modularitet. Och i framtiden kan du implementera ett grÀnssnitt - ta en ögonblicksbild, skapa en klon, förstör klonen. Allt Àr enkelt. Och förvaring Àr cool, om den Àr det.

Men ZFS Àr tillgÀngligt för alla. DelPhix rÀcker redan, de har 300 kunder. Av dessa har Fortune 100 50 klienter, det vill sÀga de Àr riktade till NASA etc. Det Àr dags för alla att skaffa sig denna teknik. Och det Àr dÀrför vi har en öppen kÀllkodskÀrna. Vi har en grÀnssnittsdel som inte Àr öppen kÀllkod. Det hÀr Àr plattformen som vi kommer att visa. Men vi vill att det ska vara tillgÀngligt för alla. Vi vill göra en revolution sÄ att alla testare slutar gissa pÄ bÀrbara datorer. Vi mÄste skriva SELECT och se direkt att det gÄr lÄngsamt. Sluta vÀnta pÄ att DBA ska berÀtta om det. HÀr Àr huvudmÄlet. Och jag tror att vi alla kommer att komma fram till detta. Och vi gör denna sak för alla att ha. DÀrför ZFS, eftersom det kommer att vara tillgÀngligt överallt. Tack till communityn för att ha löst problem och för att det finns en öppen kÀllkodslicens etc. *

HÀlsningar! Tack för rapporten! Jag heter Maxim. Vi har hanterat samma frÄgor. De bestÀmde sig sjÀlva. Hur delar du resurser mellan dessa kloner? Varje klon kan göra sin egen sak vid varje given tidpunkt: en testar en sak, en annan en annan, nÄgon bygger ett index, nÄgon har ett tungt jobb. Och om du fortfarande kan dividera med CPU, sedan med IO, hur delar du? Detta Àr den första frÄgan.

Och den andra frÄgan handlar om lÀktarnas olikheter. LÄt oss sÀga att jag har ZFS hÀr och allt Àr coolt, men klienten pÄ prod har inte ZFS, utan ext4 till exempel. Hur i det hÀr fallet?

FrĂ„gorna Ă€r mycket bra. Jag nĂ€mnde det hĂ€r problemet lite med det faktum att vi delar resurser. Och lösningen Ă€r denna. FörestĂ€ll dig att du testar pĂ„ iscensĂ€ttning. Man kan ocksĂ„ ha en sĂ„dan situation samtidigt som nĂ„gon ger ett lass, nĂ„gon annan. Och som ett resultat ser du obegripliga mĂ€tvĂ€rden. Även samma problem kan vara med prod. NĂ€r du vill kontrollera nĂ„gon begĂ€ran och se att det Ă€r nĂ„got problem med det - det fungerar lĂ„ngsamt, dĂ„ lĂ„g faktiskt problemet inte i förfrĂ„gan, utan i det faktum att det finns nĂ„gon form av parallell belastning.

Och dÀrför Àr det hÀr viktigt att fokusera pÄ vad planen kommer att vara, vilka steg vi kommer att ta i planen och hur mycket data vi kommer att samla in för detta. Det faktum att vÄra diskar till exempel kommer att laddas med nÄgot, det kommer specifikt att pÄverka timingen. Men vi kan uppskatta hur laddad denna begÀran Àr utifrÄn mÀngden data. Det Àr inte sÄ viktigt att det samtidigt blir nÄgon form av avrÀttning.

Jag har tvÄ frÄgor. Det hÀr Àr vÀldigt coola grejer. Har det förekommit fall dÀr produktionsdata Àr kritiska, till exempel kreditkortsnummer? Finns det redan nÄgot klart eller Àr det en separat uppgift? Och den andra frÄgan - finns det nÄgot liknande för MySQL?

Om uppgifterna. Vi kommer att göra förvirring tills vi gör det. Men om du distribuerar exakt Joe, om du inte ger Ätkomst till utvecklare, sÄ finns det ingen tillgÄng till data. Varför? För att Joe inte visar data. Det visar bara mÀtvÀrden, planer och det Àr allt. Detta gjordes med flit, eftersom detta Àr ett av kraven frÄn vÄr kund. De ville kunna optimera utan att ge alla tillgÄng.

Om MySQL. Detta system kan anvÀndas för allt som lagrar tillstÄnd pÄ disk. Och eftersom vi hÄller pÄ med Postgres sÄ gör vi nu all automatisering för Postgres först och frÀmst. Vi vill automatisera att hÀmta data frÄn en sÀkerhetskopia. Vi konfigurerar Postgres korrekt. Vi vet hur man fÄr planer att matcha osv.

Men eftersom systemet Àr utbyggbart kan det Àven anvÀndas för MySQL. Och det finns sÄdana exempel. Yandex har en liknande sak, men de publicerar den inte nÄgonstans. De anvÀnder det i Yandex.Metrica. Och det finns bara en historia om MySQL. Men teknikerna Àr desamma, ZFS.

Tack för rapporten! Jag har ocksÄ ett par frÄgor. Du nÀmnde att kloning kan anvÀndas för analyser, till exempel för att bygga ytterligare index dÀr. Kan du berÀtta lite mer om hur det fungerar?

Och jag kommer omedelbart att stÀlla den andra frÄgan om likheten mellan montrarna, likheten mellan planerna. Planen beror ocksÄ pÄ den statistik som samlas in av Postgres. Hur löser du detta problem?

Enligt analysen finns det inga specifika fall, eftersom vi inte har anvĂ€nt det Ă€nnu, men det finns en sĂ„dan möjlighet. Om vi ​​pratar om index, tĂ€nk dig dĂ„ att en frĂ„ga jagar en tabell med hundratals miljoner poster och en kolumn som vanligtvis inte Ă€r indexerad i prod. Och vi vill rĂ€kna ut lite data dĂ€r. Om denna förfrĂ„gan skickas till prod, sĂ„ finns det en möjlighet att det blir enkelt pĂ„ prod, eftersom förfrĂ„gan kommer att behandlas dĂ€r i en minut.

Ok, lÄt oss göra en tunn klon som inte Àr hemsk att stoppa i nÄgra minuter. Och för att göra det bekvÀmare att lÀsa analyserna kommer vi att lÀgga till index för de kolumner dÀr vi Àr intresserade av data.

Kommer indexet att skapas varje gÄng?

Du kan göra det sÄ att vi rör vid data, gör ögonblicksbilder, sedan kommer vi att ÄterhÀmta oss frÄn denna ögonblicksbild och köra nya förfrÄgningar. Det vill sÀga, du kan göra det sÄ att du kan skapa nya kloner med redan anbringade index.

NÀr det gÀller frÄgan om statistik, om vi ÄterstÀller frÄn en sÀkerhetskopia, om vi replikerar, kommer vÄr statistik att vara exakt densamma. Eftersom vi har hela den fysiska datastrukturen, det vill sÀga, vi kommer att ta med data som den Àr med alla statistikmÄtt ocksÄ.

HÀr Àr ett annat problem. Om du anvÀnder en molnlösning sÄ Àr bara logiska dumpar tillgÀngliga dÀr, eftersom Google, Amazon inte tillÄter dig att ta en fysisk kopia. Det kommer att bli ett problem.

Tack för rapporten. Det fanns tvÄ bra frÄgor hÀr om MySQL och resursdelning. Men i sjÀlva verket beror allt pÄ att detta inte Àr ett Àmne för specifik DBMS, utan om filsystemet som helhet. Och följaktligen bör frÄgorna med resursdelning ocksÄ lösas dÀrifrÄn, inte i slutet av att det Àr Postgres, utan i filsystemet, pÄ servern, till exempel.

Min frÄga Àr lite annorlunda. Det Àr nÀrmare den flerskiktiga databasen, dÀr det finns flera lager. Till exempel sÀtter vi upp en tio terabyte bilduppdatering, vi replikerar. Och vi anvÀnder specifikt den hÀr lösningen för databaser. Replikering pÄgÄr, data uppdateras. Det Àr 100 anstÀllda som arbetar parallellt, som hela tiden lanserar dessa olika skott. Vad ska man göra? Hur försÀkrar man sig om att det inte finns nÄgon konflikt, att de startade en, och sedan Àndrades filsystemet, och alla dessa bilder försvann?

De kommer inte att gÄ eftersom det Àr sÄ ZFS fungerar. Vi kan hÄlla separat i en trÄd filsystemÀndringarna som kommer pÄ grund av replikering. Och behÄll klonerna som utvecklare anvÀnder pÄ Àldre versioner av data. Och det fungerar för oss, allt Àr i sin ordning med detta.

Det visar sig att uppdateringen kommer att ske som ett extra lager, och alla nya bilder kommer att gÄ redan, baserat pÄ detta lager, eller hur?

FrÄn tidigare lager som var frÄn tidigare replikeringar.

De tidigare lagren kommer att falla av, men de kommer att referera till det gamla lagret, och kommer de att ta nya bilder frÄn det senaste lagret som togs emot i uppdateringen?

I allmÀnhet, ja.

DÄ som en konsekvens kommer vi att ha upp till ett fikon av lager. Och med tiden kommer de att behöva komprimeras?

Ja allt stÀmmer. Det finns nÄgot fönster. Vi hÄller ögonblicksbilder varje vecka. Det beror pÄ vilken resurs du har. Om du har möjlighet att lagra mycket data kan du lagra ögonblicksbilder under lÄng tid. De kommer inte att försvinna av sig sjÀlva. Det kommer inte att finnas nÄgon datakorruption. Om ögonblicksbilderna Àr förÄldrade, som det verkar för oss, det vill sÀga det beror pÄ policyn i företaget, sÄ kan vi helt enkelt ta bort dem och frigöra utrymme.

Hej, tack för rapporten! FrÄga om Joe. Du sa att kunden inte ville ge alla tillgÄng till datan. StrÀngt taget, om en person har resultatet av Explain Analyze, kan han titta pÄ data.

Det Àr sÄ. Till exempel kan vi skriva: "SELECT FROM WHERE email = to that". Det vill sÀga, vi kommer inte att se sjÀlva datan, men vi kan se nÄgra indirekta tecken. Detta mÄste förstÄs. Men Ä andra sidan finns allt dÀr. Vi har en loggrevision, vi har koll pÄ andra kollegor som ocksÄ ser vad utvecklarna gör. Och om nÄgon försöker göra detta, kommer sÀkerhetstjÀnsten att komma till dem och arbeta med den hÀr frÄgan.

God eftermiddag Tack för rapporten! Jag har en kort frÄga. Om företaget inte anvÀnder Slack, finns det nÄgon bindning till det nu, eller Àr det möjligt för utvecklare att distribuera instanser för att koppla en testapplikation till databaserna?

Nu finns det en lÀnk till Slack, det vill sÀga det finns ingen annan budbÀrare, men jag vill verkligen göra stöd för andra budbÀrare ocksÄ. Vad kan du göra? Du kan distribuera DB Lab utan Joe, gÄ med hjÀlp av REST API eller med hjÀlp av vÄr plattform och skapa kloner och ansluta till PSQL. Men detta kan göras om du Àr redo att ge dina utvecklare tillgÄng till data, eftersom det inte lÀngre kommer att finnas nÄgon skÀrm.

Jag behöver inte det hÀr lagret, men jag behöver en sÄdan möjlighet.

DÄ ja, det gÄr att göra.

KĂ€lla: will.com

LĂ€gg en kommentar