WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Siūlau perskaityti 2020 m. pradžios Georgijaus Rylovo pranešimo „WAL-G: naujos galimybės ir bendruomenės plėtra“ stenogramą.

Atvirojo kodo prižiūrėtojai, augdami, susiduria su daugybe iššūkių. Kaip parašyti vis daugiau reikalingų funkcijų, išspręsti vis daugiau problemų ir sugebėti peržiūrėti vis daugiau užklausų? Kaip pavyzdį naudodamas WAL-G (atsarginės kopijos kūrimo įrankis, skirtas PostgreSQL), papasakosiu, kaip išsprendėme šias problemas, universitete pradėdami kursą apie atvirojo kodo kūrimą, ką pasiekėme ir kur judėsime toliau.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Sveiki dar kartą visi! Esu „Yandex“ kūrėjas iš Jekaterinburgo. Ir šiandien kalbėsiu apie WAL-G.

Ataskaitos pavadinime nebuvo parašyta, kad tai kažkas apie atsargines kopijas. Ar kas nors žino, kas yra WAL-G? O gal visi žino? Pakelk ranką, jei nežinai. Velnias, tu atėjai į reportažą ir nežinai, apie ką jis.

Leiskite man pasakyti, kas bus šiandien. Taip atsitiko, kad mūsų komanda jau ilgą laiką kuria atsargines kopijas. Ir tai dar vienas reportažas iš serijos, kurioje kalbame apie tai, kaip saugiai, saugiai, patogiai ir efektyviai saugome duomenis.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Ankstesnėse serijose buvo daug Andrejaus Borodino ir Vladimiro Leskovo pranešimų. Mūsų buvo daug. O apie WAL-G kalbame jau daug metų.

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

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

Šis pranešimas šiek tiek skirsis nuo kitų tuo, kad buvo daugiau apie techninę dalį, tačiau čia pakalbėsiu apie tai, kaip susidūrėme su bendruomenės augimu susijusiomis problemomis. Ir kaip mes sugalvojome nedidelę idėją, kuri mums padeda su tuo susidoroti.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Prieš kelerius metus WAL-G buvo gana mažas projektas, kurį gavome iš „Citus Data“. Ir mes tiesiog paėmėme. Ir jį sukūrė vienas žmogus.

Ir tik WAL-G neturėjo:

  • Atsarginė kopija iš kopijos.
  • Nebuvo papildomų atsarginių kopijų.
  • Nebuvo WAL-Delta atsarginių kopijų.
  • Ir dar labai daug ko trūko.

Per šiuos kelerius metus WAL-G labai išaugo.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Ir iki 2020 m. visa tai, kas išdėstyta aukščiau, jau pasirodė. Ir prie to buvo pridėta tai, ką dabar turime:

  • Daugiau nei 1 žvaigždučių „GitHub“.
  • 150 šakių.
  • Apie 15 atvirų PR.
  • Ir daug kitų bendradarbių.
  • Ir visą laiką atviri klausimai. Ir tai nepaisant to, kad mes tiesiogine prasme ten einame kiekvieną dieną ir ką nors darome.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Ir padarėme išvadą, kad šis projektas reikalauja daugiau mūsų dėmesio, net kai mums patiems nereikia nieko diegti mūsų valdomų duomenų bazių paslaugai „Yandex“.

Ir kažkur 2018-ųjų rudenį mums šovė į galvą idėja. Paprastai komanda turi keletą būdų, kaip sukurti kai kurias funkcijas arba ištaisyti klaidas, jei neturite pakankamai rankų. Pavyzdžiui, galite pasamdyti kitą kūrėją ir sumokėti jam pinigus. Arba galite kuriam laikui priimti stažuotoją ir sumokėti jam atlyginimą. Tačiau vis dar yra gana didelė žmonių grupė, kai kurie iš jų jau tikrai moka rašyti kodą. Jūs tiesiog ne visada žinote, kokios kokybės kodas.

Pagalvojome ir nusprendėme pabandyti pritraukti studentų. Bet mokiniai ne viskuo su mumis dalyvaus. Jie atliks tik dalį darbo. Ir jie, pavyzdžiui, rašys testus, taisys klaidas, įdiegs funkcijas, kurios neturi įtakos pagrindiniam funkcionalumui. Pagrindinė funkcija yra atsarginių kopijų kūrimas ir atsarginių kopijų atkūrimas. Jei padarysime klaidą kurdami atsarginę kopiją, patirsime duomenų praradimą. Ir, žinoma, niekas to nenori. Visi nori, kad viskas būtų labai saugu. Todėl, žinoma, nenorime leisti kodo, kuriuo pasitikime mažiau nei savo. Tai yra, bet kokį nekritinį kodą norėtume gauti iš savo papildomų darbuotojų.

Kokiomis sąlygomis priimamas studentų PR?

  • Jie privalo padengti savo kodą testais. Viskas turėtų vykti CI.
  • Taip pat peržiūrime 2 apžvalgas. Vienas Andrejus Borodinas ir vienas aš.
  • Be to, norėdamas patikrinti, ar tai nieko nesugadins mūsų paslaugoje, atskirai įkeliu komplektą su šiuo įsipareigojimu. Ir mes patikriname, ar niekas nepavyksta.

Specialus atvirojo kodo kursas

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Šiek tiek apie tai, kodėl to reikia ir kodėl tai, man atrodo, yra šauni idėja.

Mums pelnas akivaizdus:

  • Gauname papildomų rankų.
  • O kandidatų į komandą ieškome tarp protingų studentų, rašančių išmanųjį kodą.

Kokia nauda studentams?

Jie gali būti ne tokie akivaizdūs, nes studentai negauna pinigų už parašytą kodą, o gauna tik pažymius už savo studentų įrašus.

Aš jų paklausiau apie tai. Ir jų žodžiais:

  • Patirtis dirbant su atviruoju šaltiniu.
  • Įrašykite eilutę į savo CV.
  • Įrodykite save ir pradėkite interviu „Yandex.
  • Tapkite GSoC nariu.
  • +1 specialus kursas norintiems rašyti kodą.

Nekalbėsiu apie kurso struktūrą. Aš tiesiog pasakysiu, kad WAL-G buvo pagrindinis projektas. Į šį kursą taip pat įtraukėme tokius projektus kaip Odyssey, PostgreSQL ir ClickHouse.

Ir jie davė problemų ne tik šiame kurse, bet ir išdavė diplomus bei kursinius darbus.

Ką apie naudą vartotojams?

Dabar pereikime prie labiausiai jus dominančios dalies. Kuo tau tai naudinga? Esmė ta, kad mokiniai ištaisė daug klaidų. Mes sukūrėme užklausos funkcijas, kurių prašėte mūsų.

Ir leiskite man papasakoti apie dalykus, kurių seniai norėjote ir kurie buvo įgyvendinti.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Stalo erdvių palaikymas. Lentelių laukų WAL-G buvo tikimasi tikriausiai nuo WAL-G išleidimo, nes WAL-G yra kito atsarginio įrankio WAL-E, kuriame buvo palaikomos duomenų bazės atsarginės kopijos su lentelių erdvėmis, įpėdinis.

Leiskite trumpai priminti, kas tai yra ir kodėl viso to reikia. Paprastai visi jūsų Postgres duomenys užima vieną failų sistemos katalogą, vadinamą baze. Ir šiame kataloge jau yra visi „Postgres“ reikalingi failai ir pakatalogiai.

Lentelių erdvės yra katalogai, kuriuose yra „Postgres“ duomenų, tačiau jie nėra už bazinio katalogo ribų. Skaidrėje parodyta, kad tablespacs yra už pagrindinio katalogo ribų.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Kaip tai atrodo pačiam Postgres? Baziniame kataloge yra atskiras pakatalogis pg_tblspc. Jame yra simbolių nuorodų į katalogus, kuriuose iš tikrųjų yra „Postgres“ duomenų už pagrindinio katalogo ribų.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Kai naudojate visa tai, jums šios komandos gali atrodyti maždaug taip. Tai yra, jūs sukuriate lentelę tam tikroje nurodytoje lentelės srityje ir matote, kur ji yra dabar. Tai yra paskutinės dvi eilutės, paskutinės dvi komandos. Ir ten aišku, kad yra kažkoks būdas. Tačiau iš tikrųjų tai nėra tikrasis būdas. Tai yra priešdėlis kelias iš pagrindinio katalogo į lentelės sritį. Ir iš ten jis suderinamas su simboliu, kuris nukreipia į jūsų tikrus duomenis.

Viso to nenaudojame savo komandoje, tačiau tuo naudojosi daugelis kitų WAL-E vartotojų, kurie mums parašė, kad nori pereiti prie WAL-G, tačiau tai juos sustabdė. Dabar tai palaikoma.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Kitas mūsų specialaus kurso bruožas yra pasivyti. Žmonės, kurie tikriausiai daugiau dirbo su „Oracle“, nei su „Postgres“, žino apie pasisavinimą.

Trumpai apie tai, kas tai yra. Klasterio topologija mūsų paslaugoje paprastai gali atrodyti maždaug taip. Mes turime meistrą. Yra kopija, kuri iš jos perduoda įrašymo į priekį žurnalą. Ir kopija praneša meistrui, kuriame LSN ji šiuo metu yra. Ir kažkur lygiagrečiai žurnalą galima archyvuoti. Be žurnalo archyvavimo, atsarginės kopijos taip pat siunčiamos į debesį. Ir delta atsarginės kopijos siunčiamos.

Kokia gali būti problema? Kai turite gana didelę duomenų bazę, gali pasirodyti, kad jūsų kopija pradeda gerokai atsilikti nuo pagrindinio. Ir ji taip atsilieka, kad niekada negali jo pasivyti. Šią problemą dažniausiai reikia kažkaip išspręsti.

O paprasčiausias būdas yra pašalinti kopiją ir įkelti iš naujo, nes ji niekada nepasivys, o problemą reikia spręsti. Bet tai yra gana ilgas laikas, nes visos 10 TB duomenų bazės atsarginės kopijos atkūrimas yra labai labai ilgas laikas. Ir norime visa tai padaryti kuo greičiau, jei iškiltų tokių problemų. Ir kaip tik tam yra skirtas gaudymas.

Catchup leidžia naudoti delta atsargines kopijas, kurios tokiu būdu saugomos debesyje. Jūs nurodote, kuris LSN šiuo metu yra įjungtas atsiliekančioji kopija, ir nurodote jį gaudymo komandoje, kad sukurtumėte delta atsarginę kopiją tarp to LSN ir LSN, kuriame šiuo metu yra jūsų klasteris. Ir po to atkuriate šią atsarginę kopiją, kuri atsiliko.

Kitos bazės

Mokiniai mums taip pat atnešė daug funkcijų vienu metu. Kadangi „Yandex“ gaminame ne tik „Postgres“, mes taip pat turime „MySQL“, „MongoDB“, „Redis“, „ClickHouse“, tam tikru momentu mums reikėjo turėti galimybę daryti atsargines kopijas naudojant „MySQL“ atkūrimą tašku ir kad būtų galimybė įkelti juos į debesį.

Ir mes norėjome tai padaryti panašiai kaip WAL-G. Ir nusprendėme paeksperimentuoti ir pažiūrėti, kaip viskas atrodys.

Ir iš pradžių, niekaip nesidalydami šia logika, jie surašė kodą į šakutę. Pamatė, kad turime kažkokį veikiantį modelį ir gali skristi. Tada pagalvojome, kad pagrindinė mūsų bendruomenė yra postgresistai, jie naudoja WAL-G. Ir todėl turime kažkaip atskirti šias dalis. Tai yra, kai redaguojame „Postgres“ kodą, nepažeidžiame „MySQL“; kai redaguojame „MySQL“, nepažeidžiame „Postgres“.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Pirmoji idėja, kaip tai atskirti, buvo idėja naudoti tą patį metodą, kuris naudojamas PostgreSQL plėtiniuose. Ir iš tikrųjų, norėdami sukurti MySQL atsarginę kopiją, turėjote įdiegti tam tikrą dinaminę biblioteką.

Bet čia iš karto matosi šio požiūrio asimetrija. Kai kuriate atsarginę Postgres atsarginę kopiją, įdedate įprastą Postgres atsarginę kopiją ir viskas gerai. O MySQL atveju pasirodo, kad įdiegiate atsarginę Postgres kopiją ir taip pat įdiegiate dinaminę MySQL biblioteką. Skamba kažkaip keistai. Mes taip pat pagalvojome ir nusprendėme, kad tai nėra tas sprendimas, kurio mums reikia.

Įvairūs Postgres, MySQL, MongoDB, Redis versijos

Bet tai leido mums, mums atrodo, priimti teisingą sprendimą – skirti skirtingus mazgus skirtingoms bazėms. Tai leido atskirti logiką, susietą su įvairių duomenų bazių atsarginėmis kopijomis, kurios pasieks bendrą API, kurią įgyvendina WAL-G.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Tai dalis, kurią parašėme patys – prieš pateikdami mokiniams problemas. Tai yra būtent ta dalis, kur jie gali padaryti kažką ne taip, todėl nusprendėme, kad geriau padarysime kažką panašaus ir viskas bus gerai.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Po to išdavėme problemas. Jie buvo nedelsiant išmontuoti. Studentai turėjo palaikyti tris bazes.

Tai yra „MySQL“, kurio atsargines kopijas naudojame tokiu būdu WAL-G jau daugiau nei metus.

O dabar MongoDB artėja prie gamybos, kur baigia su byla. Tiesą sakant, mes parašėme viso to pagrindą. Tada mokiniai parašė keletą naudingų dalykų. Ir tada mes juos atnešame į būseną, kurią galime priimti gamyboje.

Šios problemos neatrodė taip, kad studentams reikėjo parašyti visas atsargines kopijas kiekvienai iš šių duomenų bazių. Mes neturėjome tokios problemos. Mūsų problema buvo ta, kad norėjome momentinio atkūrimo ir norėjome sukurti atsarginę kopiją debesyje. Ir jie paprašė mokinių parašyti kodą, kuris tai išspręstų. Mokiniai naudojo jau turimus atsarginių kopijų kūrimo įrankius, kurie kažkaip daro atsargines kopijas, o paskui viską suklijavo su WAL-G, kuris viską persiuntė į debesį. Jie taip pat pridėjo prie to momentinio atkūrimo.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Ką dar mokiniai atsinešė? Jie atnešė Libsodium šifravimo palaikymą WAL-G.

Taip pat turime atsarginių kopijų saugojimo politiką. Dabar atsargines kopijas galima pažymėti kaip nuolatines. Ir jūsų tarnybai kažkaip patogiau automatizuoti jų saugojimo procesą.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Koks buvo šio eksperimento rezultatas?

Iš pradžių į kursus užsiregistravo daugiau nei 100 žmonių. Iš pradžių nesakiau, kad Jekaterinburgo universitetas yra Uralo federalinis universitetas. Ten viską paskelbėme. Užsiregistravo 100 žmonių. Realiai ką nors daryti pradėjo daug mažiau žmonių, apie 30 žmonių.

Kursą baigė dar mažiau žmonių, nes reikėjo rašyti testus jau esamiems kodams. Taip pat pataisykite klaidą arba sukurkite kokią nors funkciją. Ir kai kurie studentai vis tiek uždarė kursą.

Šiuo metu šio kurso metu studentai išsprendė apie 14 problemų ir pagamino 10 įvairaus dydžio funkcijų. Ir, man atrodo, tai yra pilnavertis vieno ar dviejų kūrėjų pakeitimas.

Be kita ko, išdavėme diplomus ir kursinius darbus. O diplomus gavo 12. 6 iš jų jau apsigynė ties „5“. Tie, kurie liko, dar neturėjo apsaugos, bet manau, kad ir jiems viskas bus gerai.

Ateities planai

Kokius planus turime ateičiai?

Bent jau tie funkcijų prašymai, kuriuos jau girdėjome iš vartotojų ir norime atlikti. Tai:

  • Stebėti laiko juostos sekimo teisingumą HA klasterio atsarginių kopijų archyve. Tai galite padaryti su WAL-G. Ir manau, kad turėsime studentų, kurie imsis šio reikalo.
  • Jau turime asmenį, atsakingą už atsarginių kopijų ir WAL perdavimą tarp debesų.
  • Neseniai paskelbėme idėją, kad galime dar labiau paspartinti WAL-G išpakuodami atsargines kopijas neperrašydami puslapių ir optimizuodami ten siunčiamus archyvus.

Galite jais pasidalinti čia

Kam skirta ši ataskaita? Be to, dabar be 4 žmonių, kurie palaiko šį projektą, turime papildomų rankų, kurių yra gana daug. Ypač jei rašote jiems asmenine žinute. O jei kuriate atsargines duomenų kopijas ir tai darote naudodami WAL-G arba norite pereiti prie WAL-G, mes galime gana nesunkiai patenkinti jūsų pageidavimus.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Tai QR kodas ir nuoroda. Galite pereiti juos ir parašyti visus savo pageidavimus. Pavyzdžiui, mes netaisome kai kurių klaidų. Arba jūs tikrai norite kokios nors funkcijos, bet dėl ​​kokių nors priežasčių jos dar nėra jokioje atsarginėje kopijoje, įskaitant mūsų. Būtinai parašykite apie tai.

WAL-G: naujos funkcijos ir bendruomenės plėtra. Georgijus Rylovas

Klausimai

Sveiki! Ačiū už pranešimą! Klausimas apie WAL-G, bet ne apie Postgres. WAL-G sukuria atsargines MySQL kopijas ir iškviečia papildomą atsarginę kopiją. Jei įdiegsime šiuolaikiškus „CentOS“ įrenginius, o jei įdiegsite „MySQL“, „MariDB“ bus įdiegtas. Nuo 10.3 versijos papildoma atsarginė kopija nepalaikoma, palaikoma MariDB atsarginė kopija. Kaip tau sekasi su tuo?

Šiuo metu nebandėme kurti atsarginės MariDB kopijos. Turėjome prašymų FoundationDB paramai gauti, bet apskritai, jei toks prašymas yra, tada galime rasti žmonių, kurie tai padarys. Tai nėra taip ilgai ar taip sunku, kaip aš manau.

Laba diena Ačiū už pranešimą! Klausimas apie galimas naujas funkcijas. Ar esate pasirengę priversti WAL-G veikti su juostelėmis, kad galėtumėte kurti atsargines kopijas juostose?

Atsarginė kopijavimas juostinėje, matyt, reiškia?

Taip.

Yra Andrejus Borodinas, kuris gali atsakyti į šį klausimą geriau nei aš.

(Andrey) Taip, ačiū už klausimą! Gavome prašymą perkelti atsarginę kopiją į juostą iš debesies saugyklos. Ir už tai pjovimas perkėlimas tarp debesų. Kadangi perkėlimas iš debesies į debesį yra apibendrinta juostos perdavimo versija. Be to, turime išplečiamą saugyklų architektūrą. Beje, daug Storogų parašė studentai. O jei rašote Storage for tape, tada ji, žinoma, bus palaikoma. Esame pasirengę svarstyti ištraukimo prašymus. Ten reikia parašyti failą, perskaityti failą. Jei atliksite šiuos veiksmus naudodami „Go“, paprastai turėsite 50 kodo eilučių. Tada juosta bus palaikoma WAL-G.

Ačiū už pranešimą! Įdomus kūrimo procesas. Atsarginė kopija yra rimta funkcija, kuri turėtų būti gerai išbandyta. Kai įdiegėte funkcionalumą naujoms duomenų bazėms, ar studentai taip pat rašė testus, ar patys rašėte testus, o tada atidavėte įgyvendinimą studentams?

Mokiniai taip pat rašė testus. Tačiau studentai daugiau rašė apie tokias funkcijas kaip naujos duomenų bazės. Jie rašė integracijos testus. Ir jie rašė vienetinius testus. Jei integracija praeina, tai yra šiuo metu, tai yra scenarijus, kurį vykdote rankiniu būdu arba, pavyzdžiui, turite tai padaryti. Tai yra, scenarijus ten yra labai aiškus.

Studentai neturi daug patirties. Ar peržiūra užima daug laiko?

Taip, peržiūros užima gana daug laiko. Tai paprastai, kai ateina keli įsipareigojantieji vienu metu ir sako, kad aš padariau taip, padariau aną, tada reikia pagalvoti ir skirti pusę dienos, kad suprastum, ką jie ten parašė. Kadangi kodas turi būti atidžiai perskaitytas. Jie neturėjo interviu. Mes jų nelabai pažįstame, todėl tai užima nemažai laiko.

Ačiū už pranešimą! Anksčiau Andrejus Borodinas teigė, kad archive_command WAL-G turėtų būti iškviestas tiesiogiai. Tačiau tam tikros klasterio kasetės atveju mums reikia papildomos logikos, kad galėtume nustatyti mazgą, iš kurio siųsti velenus. Kaip jūs pats sprendžiate šią problemą?

kame cia tavo problema? Tarkime, kad turite sinchroninę kopiją, su kuria kuriate atsarginę kopiją? Ar kas?

(Andrey) Faktas yra tas, kad WAL-G iš tikrųjų yra skirtas naudoti be apvalkalo scenarijų. Jei kažko trūksta, pridėkime logiką, kuri turėtų būti WAL-G viduje. Kalbant apie tai, iš kur turėtų atsirasti archyvavimas, manome, kad archyvavimas turėtų būti iš dabartinio klasterio pagrindinio kompiuterio. Archyvavimas iš kopijos yra bloga idėja. Galimi įvairūs scenarijai su problemomis. Visų pirma problemos, susijusios su laiko juostų ir bet kokios papildomos informacijos archyvavimu. Ačiū už klausimą!

(Paaiškinimas: atsikratėme apvalkalo scenarijų šioje problemoje)

Labas vakaras! Ačiū už pranešimą! Mane domina gaudymo funkcija, apie kurią kalbėjote. Susidūrėme su situacija, kai replika atsiliko ir negalėjo pasivyti. O šios funkcijos aprašymo WAL-G dokumentuose neradau.

„Catchup“ pasirodė tiesiogine prasme 20 m. sausio 2020 d. Gali prireikti daugiau darbo su dokumentais. Rašome patys ir rašome ne itin gerai. Ir galbūt turėtume pradėti reikalauti, kad studentai tai parašytų.

Ar jis jau išleistas?

Patraukimo prašymas jau miręs, t.y. patikrinau. Išbandžiau tai bandymų grupėje. Iki šiol neturėjome situacijos, kad galėtume tai išbandyti koviniame pavyzdyje.

Kada laukti?

Nežinau. Palaukite mėnesį, mes tikrai patikrinsime.

Šaltinis: www.habr.com

Добавить комментарий