WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Soovitan teil lugeda Georgy Rylovi 2020. aasta alguse raporti "WAL-G: uued võimalused ja kogukonna laienemine" ärakirja.

Avatud lähtekoodiga hooldajad seisavad kasvades silmitsi paljude väljakutsetega. Kuidas kirjutada üha rohkem vajalikke funktsioone, parandada üha rohkem probleeme ja vaadata järjest rohkem tõmbetaotlusi? WAL-G (PostgreSQL-i varundustööriist) näitel räägin teile, kuidas me need probleemid lahendasime, käivitades ülikoolis avatud lähtekoodiga arenduskursuse, mida saavutasime ja kuhu edasi liigume.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Tere taas kõigile! Olen Yandexi arendaja Jekaterinburgist. Ja täna räägin ma WAL-G-st.

Aruande pealkiri ei öelnud, et tegemist on varukoopiatega. Kas keegi teab, mis on WAL-G? Või teavad kõik? Tõstke käsi, kui te ei tea. Kurat, sa tulid aruande juurde ega tea, milles see on.

Las ma ütlen teile, mis täna juhtub. Juhtub nii, et meie meeskond on varukoopiaid teinud juba mõnda aega. Ja see on järjekordne aruanne sarjast, kus räägime sellest, kuidas me andmeid ohutult, turvaliselt, mugavalt ja tõhusalt salvestame.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Eelmistes sarjades oli palju Andrei Borodini ja Vladimir Leskovi reportaaže. Meid oli palju. Ja me oleme WAL-G-st rääkinud palju aastaid.

clck.ru/F8ioz — https://www.highload.ru/moscow/2018/abstracts/3964

clck.ru/Ln8Qw — https://www.highload.ru/moscow/2019/abstracts/5981

See aruanne erineb teistest veidi selle poolest, et see puudutas rohkem tehnilist osa, kuid siin räägin sellest, kuidas tekkisid kogukonna kasvuga seotud probleemid. Ja kuidas me jõudsime väikese ideeni, mis aitab meil sellega toime tulla.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Mõni aasta tagasi oli WAL-G üsna väike projekt, mille saime firmalt Citus Data. Ja me lihtsalt võtsime selle. Ja selle töötas välja üks inimene.

Ja ainult WAL-G-l polnud:

  • Varundamine koopiast.
  • Täiendavaid varukoopiaid ei tehtud.
  • WAL-Delta varukoopiaid polnud.
  • Ja veel oli palju puudu.

Selle paari aasta jooksul on WAL-G palju kasvanud.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Ja aastaks 2020 on kõik eelnev juba ilmunud. Ja sellele lisandus see, mis meil praegu on:

  • Rohkem kui 1 tärni GitHubis.
  • 150 kahvlit.
  • Umbes 15 avatud PR-i.
  • Ja palju teisi kaastöölisi.
  • Ja teemad on kogu aeg lahtised. Ja seda hoolimata sellest, et me sõna otseses mõttes iga päev seal käime ja sellega midagi ette võtame.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Ja jõudsime järeldusele, et see projekt nõuab rohkem meie tähelepanu, isegi kui me ise ei pea Yandexis oma hallatavate andmebaaside teenuse jaoks midagi juurutama.

Ja kuskil 2018. aasta sügisel tuli meile pähe mõte. Tavaliselt on meeskonnal mitu võimalust mõne funktsiooni arendamiseks või vigade parandamiseks, kui teil pole piisavalt käsi. Näiteks võite palgata teise arendaja ja maksta talle raha. Või võite võtta mõneks ajaks praktikandi ja maksta talle ka palka. Aga ikka on päris suur seltskond inimesi, kellest osa juba päriselt koodi kirjutada oskab. Sa lihtsalt ei tea alati, mis kvaliteediga kood on.

Mõtlesime selle üle ja otsustasime proovida õpilasi meelitada. Kuid õpilased ei osale meiega kõiges. Nad teevad vaid osa tööst. Ja nad näiteks kirjutavad teste, parandavad vigu, rakendavad funktsioone, mis ei mõjuta põhifunktsioone. Peamine funktsioon on varukoopiate loomine ja varukoopiate taastamine. Kui teeme varukoopia loomisel vea, kogeme andmete kadumist. Ja seda ei taha loomulikult keegi. Kõik tahavad, et kõik oleks väga turvaline. Seetõttu ei taha me loomulikult lubada koodi, mida usaldame vähem kui enda oma. See tähendab, et me sooviksime oma täiendavatelt töötajatelt saada mis tahes mittekriitilist koodi.

Millistel tingimustel üliõpilaste suhtekorraldust aktsepteeritakse?

  • Nad peavad katma oma koodi testidega. Kõik peaks toimuma CI-s.
  • Ja me läbime ka 2 arvustust. Üks Andrei Borodinilt ja teine ​​minult.
  • Lisaks, kontrollimaks, et see meie teenuses midagi ei rikuks, laadin selle kinnitusega koostu eraldi üles. Ja me kontrollime end-to-end testides, et miski ei ebaõnnestuks.

Avatud lähtekoodi erikursus

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Natuke sellest, miks seda vaja on ja miks see minu arvates on lahe idee.

Meie jaoks on kasum ilmne:

  • Saame lisakäed.
  • Ja meeskonda otsime kandidaate nutikate õpilaste hulgast, kes kirjutavad nutikoodi.

Mis kasu on õpilastele?

Need võivad olla vähem ilmsed, sest õpilased ei saa vähemalt raha kirjutatud koodi eest, vaid saavad ainult hindeid oma õpilaste arvestuse eest.

Küsisin neilt selle kohta. Ja nende sõnadega:

  • Kaastöötaja kogemus avatud lähtekoodiga.
  • Kirjutage oma CV-sse rida.
  • Tõestage ennast ja läbige intervjuu Yandexis.
  • Hakka GSoC liikmeks.
  • +1 erikursus neile, kes soovivad koodi kirjutada.

Ma ei räägi sellest, kuidas kursus oli üles ehitatud. Ütlen lihtsalt, et WAL-G oli põhiprojekt. Kaasasime sellele kursusele ka sellised projektid nagu Odyssey, PostgreSQL ja ClickHouse.

Ja nad ei andnud probleeme mitte ainult sellel kursusel, vaid andsid välja ka diplomeid ja kursusetöid.

Mis kasu kasutajatele saab?

Liigume nüüd selle osa juurde, mis teile kõige rohkem huvi pakub. Mis kasu see sulle teeb? Asi on selles, et õpilased parandasid palju vigu. Ja tegime taotluse funktsioonid, mida te meilt palusite.

Ja las ma räägin teile asjadest, mida olete juba ammu soovinud ja mis on teoks saanud.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Lauapindade tugi. Tabeliruume WAL-G-s on oodatud ilmselt alates WAL-G väljaandmisest, sest WAL-G on teise varundustööriista WAL-E järglane, kus toetati andmebaasi varukoopiaid tabeliruumidega.

Lubage mul lühidalt meelde tuletada, mis see on ja miks seda kõike vaja on. Tavaliselt asuvad kõik teie Postgresi andmed failisüsteemis ühes kataloogis, mida nimetatakse baasiks. Ja see kataloog sisaldab juba kõiki Postgresi nõutavaid faile ja alamkatalooge.

Tabeliruumid on kataloogid, mis sisaldavad Postgresi andmeid, kuid need ei asu väljaspool põhikataloogi. Slaid näitab, et tabeliruumid asuvad väljaspool põhikataloogi.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Kuidas see Postgresi enda jaoks välja näeb? Põhikataloogis on eraldi alamkataloog pg_tblspc. Ja see sisaldab sümbollinke kataloogidele, mis tegelikult sisaldavad Postgresi andmeid väljaspool põhikataloogi.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Kui kasutate seda kõike, võivad need käsud teie jaoks välja näha umbes sellised. See tähendab, et loote tabeli teatud tabeliruumi ja näete, kus see praegu on. Need on kaks viimast rida, kaks viimast käsku kutsutakse. Ja seal on selge, et mingi võimalus on olemas. Kuid tegelikult pole see õige tee. See on eesliitega tee baaskataloogist tabeliruumi. Ja sealt sobitatakse see sümlingiga, mis viib teie tegelike andmeteni.

Me ei kasuta seda kõike oma meeskonnas, kuid seda kasutasid paljud teised WAL-E kasutajad, kes kirjutasid meile, et soovivad kolida WAL-G-sse, kuid see takistas neid. See on nüüd toetatud.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Teine funktsioon, mille meie erikursus meile tõi, on järelejõudmine. Inimesed, kes on tõenäoliselt Oracle'iga rohkem töötanud kui Postgresiga, teavad järelejõudmisest.

Lühidalt sellest, mis see on. Meie teenuse klastri topoloogia võib tavaliselt välja näha umbes selline. Meil on meister. Seal on koopia, mis voogesitab sellest ettekirjutamise logi. Ja koopia ütleb kaptenile, millise LSN-i see parajasti kasutab. Ja kuskil paralleelselt sellega saab logi arhiveerida. Ja lisaks logi arhiveerimisele saadetakse pilve ka varukoopiaid. Ja delta varukoopiad saadetakse.

Milles võib probleem olla? Kui teil on üsna suur andmebaas, võib selguda, et teie koopia hakkab kaptenist kaugele maha jääma. Ja ta jääb nii maha, et ei jõua talle kunagi järele. Tavaliselt tuleb see probleem kuidagi lahendada.

Ja kõige lihtsam on koopia eemaldada ja uuesti üles laadida, sest see ei jõua kunagi järele ja probleemiga tuleb tegeleda. Kuid see on üsna pikk aeg, sest terve 10 TB andmebaasi varukoopia taastamine on väga-väga pikk aeg. Ja me tahame seda kõike teha nii kiiresti kui võimalik, kui sellised probleemid tekivad. Ja just selle jaoks on püüdmine.

Catchup võimaldab kasutada delta-varukoopiaid, mis salvestatakse sel viisil pilve. Ütlete, millise LSN-i mahajäänud koopia on praegu sisse lülitatud, ja määrate selle püüdmiskäskluses, et luua delta-varukoopia selle LSN-i ja selle LSN-i vahel, millel teie klaster praegu asub. Ja pärast seda taastate selle varukoopia mahajäänud koopiasse.

Muud alused

Õpilased tõid meile ka korraga palju funktsioone. Kuna Yandexis kokkame mitte ainult Postgresi, vaid meil on ka MySQL, MongoDB, Redis, ClickHouse, siis mingil hetkel pidime saama MySQL-i jaoks õigeaegse taastamisega varukoopiaid teha ja et oleks võimalus üles laadida. nad pilve.

Ja me tahtsime seda teha WAL-G-ga sarnasel viisil. Ja me otsustasime katsetada ja vaadata, kuidas see kõik välja näeb.

Ja alguses, ilma seda loogikat kuidagi jagamata, kirjutasid nad koodi kahvlisse. Nad nägid, et meil on mingi töötav mudel ja see oskab lennata. Siis mõtlesime, et meie põhikommuun on postgresistid, nad kasutavad WAL-G-d. Ja seetõttu peame need osad kuidagi eraldama. See tähendab, et kui muudame Postgresi koodi, ei riku me MySQL-i; MySQL-i redigeerides ei riku me Postgresi.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Esimene idee selle eraldamise kohta oli idee kasutada sama lähenemisviisi, mida kasutatakse PostgreSQL-i laiendustes. Ja tegelikult pidite MySQL-i varukoopia tegemiseks installima mingi dünaamilise raamatukogu.

Kuid siin on selle lähenemisviisi asümmeetria kohe näha. Postgresi varundamisel paned sellele tavalise Postgresi varukoopia ja kõik on korras. Ja MySQL-i puhul selgub, et installite Postgresi varukoopia ja installite selle jaoks ka MySQL-i dünaamilise teegi. See kõlab kuidagi imelikult. Ka meie arvasime nii ja otsustasime, et see pole see lahendus, mida vajame.

Erinevad versioonid Postgresi, MySQL-i, MongoDB ja Redise jaoks

Kuid see võimaldas meil, nagu meile tundub, jõuda õige otsuseni - eraldada erinevatele alustele erinevad koostud. See võimaldas eraldada loogika, mis on seotud erinevate andmebaaside varukoopiatega, mis pääsevad juurde WAL-G rakendatavale ühisele API-le.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

See on osa, mille me ise kirjutasime – enne õpilastele probleemide esitamist. See on täpselt see osa, kus nad võivad midagi valesti teha, nii et otsustasime, et teeme parem midagi sellist ja kõik saab korda.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Pärast seda andsime probleemid välja. Need võeti kohe lahti. Õpilased pidid toetama kolme alust.

See on MySQL, mida oleme sel viisil WAL-G abil varundanud juba üle aasta.

Ja nüüd on MongoDB lähenemas tootmisele, kus nad viimistlevad seda failiga. Tegelikult kirjutasime selle kõige jaoks raamistiku. Seejärel kirjutasid õpilased mõned toimivad asjad. Ja siis viime need olekusse, mille saame tootmises vastu võtta.

Need probleemid ei paistnud olevat nii, et õpilastel oleks vaja kirjutada kõigi nende andmebaaside jaoks täielikud varundustööriistad. Meil sellist probleemi ei olnud. Meie probleem oli selles, et tahtsime ajakohastatud taastamist ja tahtsime pilve varundada. Ja nad palusid õpilastel kirjutada koodi, mis selle lahendaks. Õpilased kasutasid juba olemasolevaid varundustööriistu, mis kuidagi varukoopiaid teevad ja seejärel liimisid kõik kokku WAL-G-ga, mis edastas selle kõik pilve. Ja nad lisasid sellele ka punkt-aja taastamise.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Mida õpilased veel kaasa tõid? Nad tõid WAL-G-le Libsodium krüptimise toe.

Meil on ka varundussalvestuseeskirjad. Nüüd saab varukoopiaid märkida püsivaks. Ja millegipärast on teie teenuse jaoks mugavam nende salvestamise protsessi automatiseerida.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

Mis oli selle katse tulemus?

Algselt registreerus kursusele üle 100 inimese. Alguses ma ei öelnud, et Jekaterinburgi ülikool on Uurali föderaalülikool. Seal andsime kõik teada. Registreeritud 100 inimest. Tegelikkuses hakkas midagi tegema palju vähem inimesi, umbes 30 inimest.

Kursuse läbis veelgi vähem inimesi, sest juba olemasolevatele koodidele oli vaja testid kirjutada. Ja parandage ka mõni viga või tehke mõni funktsioon. Ja mõned õpilased pani kursuse siiski kinni.

Praegu on selle kursuse käigus tudengid parandanud umbes 14 probleemi ja teinud 10 erineva suurusega funktsiooni. Ja mulle tundub, et see on ühe või kahe arendaja täieõiguslik asendus.

Muuhulgas andsime välja diplomeid ja kursusetöid. Ja diplomi said 12. Neist 6 on end juba kaitsnud punktil 5. Neil, kes alles jäid, polnud veel kaitset, aga ma arvan, et ka nendega saab kõik korda.

Tuleviku plaanid

Millised plaanid on meil tulevikuks?

Vähemalt need funktsioonisoovid, mida oleme kasutajatelt juba kuulnud ja tahame teha. See:

  • Ajaskaala jälgimise õigsuse jälgimine HA klastri varundusarhiivis. Seda saate teha WAL-G-ga. Ja ma arvan, et meil on õpilasi, kes selle asja käsile võtavad.
  • Meil on juba olemas isik, kes vastutab varukoopiate ja WAL-i pilvede vahel ülekandmise eest.
  • Ja avaldasime hiljuti idee, et saame WAL-G-d veelgi kiirendada, pakkides lahti järkjärgulised varukoopiad ilma lehti ümber kirjutamata ja sinna saadetavaid arhiive optimeerimata.

Saate neid siin jagada

Mille jaoks see aruanne oli? Veelgi enam, nüüd on meil lisaks neljale inimesele, kes seda projekti toetavad, lisakäed, mida on päris palju. Eriti kui neile isikliku sõnumiga kirjutada. Ja kui varundate oma andmed ja teete seda WAL-G-ga või soovite kolida WAL-G-le, siis saame teie soovidele üsna hõlpsalt vastata.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

See on QR-kood ja link. Saate need läbi vaadata ja kõik oma soovid kirja panna. Näiteks me ei paranda mõnda viga. Või soovite tõesti mõnda funktsiooni, kuid mingil põhjusel pole seda veel üheski varukoopias, sealhulgas meie omas. Kirjutage sellest kindlasti.

WAL-G: uued funktsioonid ja kogukonna laienemine. Georgi Rylov

küsimused

Tere! Täname raporti eest! Küsimus WAL-G kohta, aga mitte Postgresi kohta. WAL-G varundab MySQL-i ja kutsub välja lisavarukoopia. Kui kasutame CentOS-is kaasaegseid installimisi ja kui installite MySQL-i, installitakse MariDB. Alates versioonist 10.3 täiendavat varundamist ei toetata, MariDB varundamist toetatakse. Kuidas teil sellega läheb?

Hetkel ei ole me MariDB varundada proovinud. Meil on olnud FoundationDB toetuse taotlusi, kuid üldiselt on nii, et kui selline taotlus on, siis leiame inimesed, kes seda teevad. See pole nii pikk ega nii raske, kui ma arvan.

Tere päevast Täname raporti eest! Küsimus võimalike uute funktsioonide kohta. Kas olete valmis panema WAL-G lintidega tööle, et saaksite lintidele varundada?

Ilmselt tähendab varundamine lindile?

Jah.

On Andrei Borodin, kes oskab sellele küsimusele paremini vastata kui mina.

(Andrey) Jah, tänan küsimuse eest! Meil oli taotlus pilvesalvestusest varukoopia ülekandmiseks lindile. Ja selle eest saagimine ülekanne pilvede vahel. Kuna pilvest pilve ülekanne on lindiedastuse üldistatud versioon. Lisaks on meil laiendatav arhitektuur salvestusruumide osas. Muide, paljud Storogid on õpilaste kirjutatud. Ja kui kirjutada lindile Storage, siis seda loomulikult toetatakse. Oleme valmis tõmbetaotlusi kaaluma. Seal peate faili kirjutama, faili lugema. Kui teete neid asju Go-s, on teil tavaliselt 50 koodirida. Ja siis toetab WAL-G linti.

Täname raporti eest! Huvitav arendusprotsess. Varundamine on tõsine funktsionaalsus, mis peaks olema testidega hästi kaetud. Kas uute andmebaaside funktsionaalsuse juurutamisel kirjutasid ka õpilased testid või kirjutasite testid ise ja andsite siis teostuse õpilastele?

Õpilased kirjutasid ka kontrolltöid. Kuid õpilased kirjutasid rohkem selliste funktsioonide jaoks nagu uued andmebaasid. Nad kirjutasid integratsiooniteste. Ja nad kirjutasid ühikuteste. Kui integreerimine läbib, st hetkel, siis on tegemist skriptiga, mille käivitad käsitsi või laseb sul seda teha näiteks cronil. See tähendab, et sealne stsenaarium on väga selge.

Õpilastel pole palju kogemusi. Kas ülevaatamine võtab palju aega?

Jah, ülevaated võtavad üsna palju aega. See tähendab, et tavaliselt, kui mitu pühendujat tulevad korraga ja ütlevad, et ma tegin seda, ma tegin seda, siis peate mõtlema ja varuma umbes pool päeva, et aru saada, mida nad sinna kirjutasid. Sest koodi tuleb hoolikalt lugeda. Neil polnud intervjuud. Me ei tunne neid kuigi hästi, nii et see võtab palju aega.

Täname raporti eest! Varem väitis Andrei Borodin, et WAL-G-s archive_command tuleks kutsuda otse. Kuid mingi klastri kasseti puhul vajame täiendavat loogikat, et määrata sõlm, kust šahtid saata. Kuidas te seda probleemi ise lahendate?

Mis su probleem siin on? Oletame, et teil on sünkroonne koopia, millega teete varukoopiat? Või mis?

(Andrey) Fakt on see, et WAL-G on tõepoolest mõeldud kasutamiseks ilma shelliskriptideta. Kui midagi on puudu, siis lisame loogika, mis peaks olema WAL-G sees. Mis puutub sellesse, kust arhiveerimine peaks tulema, siis usume, et arhiveerimine peaks toimuma klastri praeguselt juhilt. Koopiast arhiveerimine on halb mõte. Probleemidega on võimalikud erinevad stsenaariumid. Eelkõige probleemid ajakavade ja igasuguse lisateabe arhiveerimisega. Aitäh küsimuse eest!

(Täpsus: saime shelliskriptidest lahti selles numbris)

Tere õhtust! Täname raporti eest! Mind huvitab järelejäämisfunktsioon, millest te rääkisite. Olime silmitsi olukorraga, kus koopia oli taga ega jõudnud järele. Ja ma ei leidnud WAL-G dokumentidest selle funktsiooni kirjeldust.

Catchup ilmus sõna otseses mõttes 20. jaanuaril 2020. Dokumentatsioon võib vajada veel tööd. Me kirjutame seda ise ja me ei kirjuta seda eriti hästi. Ja võib-olla peaksime hakkama nõudma õpilastelt selle kirjutamist.

Kas see on juba välja antud?

Tõmbetaotlus on juba surnud, st kontrollisin seda. Proovisin seda testklastris. Meil pole seni olnud olukorda, kus saaksime seda lahingunäites testida.

Millal oodata?

ma ei tea. Oodake kuu, me kontrollime kindlasti.

Allikas: www.habr.com

Lisa kommentaar