WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Navrhujem, aby ste si prečítali prepis správy Georgy Rylov zo začiatku roka 2020 „WAL-G: nové príležitosti a rozšírenie komunity“

Správcovia open-source čelia počas svojho rastu mnohým výzvam. Ako písať stále viac požadovaných funkcií, opravovať stále viac problémov a zvládať zobrazovať stále viac požiadaviek na stiahnutie? Na príklade WAL-G (backup-tool for PostgreSQL) vám poviem, ako sme tieto problémy vyriešili spustením kurzu Open source development na univerzite, čo sme dosiahli a kam sa posunieme ďalej.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Zdravím všetkých ešte raz! Som vývojár Yandex z Jekaterinburgu. A dnes budem hovoriť o WAL-G.

V názve správy nebolo napísané, že ide o niečo o zálohovaní. Vie niekto čo je WAL-G? Alebo to všetci vedia? Zdvihni ruku, ak nevieš. Sakra, prišiel si na správu a nevieš, o čo ide.

Poviem vám, čo sa dnes stane. Stáva sa, že náš tím robí zálohy už dosť dlho. A toto je ďalšia správa zo série, v ktorej hovoríme o tom, ako ukladáme údaje bezpečne, bezpečne, pohodlne a efektívne.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

V predchádzajúcich sériách bolo veľa správ od Andreja Borodina a Vladimíra Leskova. Bolo nás veľa. A o WAL-G hovoríme už mnoho rokov.

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

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

Táto správa bude trochu odlišná od ostatných v tom, že bola skôr o technickej časti, no tu budem rozprávať o tom, ako sme sa stretli s problémami spojenými s rastom komunity. A ako sme prišli na malý nápad, ktorý nám pomáha sa s tým vyrovnať.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Pred niekoľkými rokmi bol WAL-G pomerne malý projekt, ktorý sme dostali od Citus Data. A práve sme to zobrali. A vyvinul ho jeden človek.

A iba WAL-G nemal:

  • Zálohovanie z repliky.
  • Neexistovali žiadne prírastkové zálohy.
  • Neexistovali žiadne zálohy WAL-Delta.
  • A ešte toho veľa chýbalo.

Za tých pár rokov sa WAL-G veľmi rozrástla.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

A do roku 2020 sa už objavilo všetko vyššie uvedené. A k tomu sa pridalo to, čo teraz máme:

  • Viac ako 1 000 hviezdičiek na GitHub.
  • 150 vidlíc.
  • Asi 15 otvorených PR.
  • A mnoho ďalších prispievateľov.
  • A neustále otvorené problémy. A to aj napriek tomu, že tam chodíme doslova každý deň a niečo s tým robíme.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

A prišli sme k záveru, že tento projekt si vyžaduje viac našej pozornosti, aj keď my sami nepotrebujeme nič implementovať pre našu službu Managed Databases v Yandex.

A niekde na jeseň 2018 nám skrsol v hlave nápad. Zvyčajne má tím niekoľko spôsobov, ako vyvinúť niektoré funkcie alebo opraviť chyby, ak nemáte dostatok rúk. Môžete si napríklad najať iného vývojára a zaplatiť mu peniaze. Alebo môžeš na nejaký čas prijať stážistu a zaplatiť mu aj nejaký plat. Stále však existuje pomerne veľká skupina ľudí, z ktorých niektorí už naozaj vedia písať kód. Len nie vždy viete, aká je kvalita kódu.

Premýšľali sme o tom a rozhodli sme sa, že skúsime prilákať študentov. Ale študenti sa s nami nebudú podieľať na všetkom. Urobia len určitú časť práce. A budú napríklad písať testy, opravovať chyby, implementovať funkcie, ktoré neovplyvňujú hlavnú funkčnosť. Hlavnou funkciou je vytváranie záloh a obnova záloh. Ak sa pri vytváraní zálohy pomýlime, dôjde k strate údajov. A toto samozrejme nikto nechce. Každý chce, aby bolo všetko veľmi bezpečné. Preto, samozrejme, nechceme nechať kód, ktorému dôverujeme menej ako nášmu vlastnému. To znamená, že akýkoľvek nekritický kód by sme chceli získať od našich ďalších pracovníkov.

Za akých podmienok je študentské PR akceptované?

  • Sú povinní pokryť svoj kód testami. Všetko by malo prebiehať v CI.
  • A tiež prechádzame 2 recenziami. Jeden od Andreyho Borodina a jeden odo mňa.
  • A navyše, aby som si overil, že to nič nepokazí v našej službe, samostatne nahrávam zostavu s týmto odovzdaním. A kontrolujeme v end-to-end testoch, že nič nezlyhá.

Špeciálny kurz o Open Source

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Trochu o tom, prečo je to potrebné a prečo je to, zdá sa mi, skvelý nápad.

Pre nás je zisk zrejmý:

  • Dostávame ruky navyše.
  • A kandidátov do tímu hľadáme medzi šikovnými študentmi, ktorí píšu smart kód.

Aký je prínos pre študentov?

Môžu byť menej zrejmé, pretože študenti prinajmenšom nedostávajú peniaze za kód, ktorý napíšu, ale iba známky za svoje študentské záznamy.

Spýtal som sa ich na to. A ich slovami:

  • Skúsenosti prispievateľa s otvoreným zdrojom.
  • Získajte riadok v životopise.
  • Ukážte sa a absolvujte pohovor v Yandex.
  • Staňte sa členom GSoC.
  • +1 špeciálny kurz pre tých, ktorí chcú písať kód.

Nebudem hovoriť o tom, ako bol kurz štruktúrovaný. Poviem len, že WAL-G bol hlavný projekt. Do tohto kurzu sme zaradili aj projekty ako Odyssey, PostgreSQL a ClickHouse.

A dávali problémy nielen v tomto kurze, ale rozdávali aj diplomy a ročníkové práce.

A čo prínos pre používateľov?

Teraz prejdime k časti, ktorá vás najviac zaujíma. Načo ti to je? Ide o to, že študenti opravili veľa chýb. A vytvorili sme funkcie žiadosti, o ktoré ste nás požiadali.

A dovoľte mi povedať vám o veciach, po ktorých ste dlho túžili a ktoré sa podarilo zrealizovať.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Podpora tabuľkových priestorov. Tabuľkové priestory vo WAL-G sa očakávali pravdepodobne od vydania WAL-G, pretože WAL-G je nástupcom iného zálohovacieho nástroja WAL-E, kde boli podporované zálohy databáz s tabuľkovými priestormi.

Dovoľte mi stručne pripomenúť, čo to je a prečo je to všetko potrebné. Všetky vaše údaje Postgres zvyčajne zaberajú jeden adresár v súborovom systéme, ktorý sa nazýva základ. A tento adresár už obsahuje všetky súbory a podadresáre požadované Postgresom.

Tabuľkové priestory sú adresáre, ktoré obsahujú údaje Postgres, ale nenachádzajú sa mimo základného adresára. Snímka ukazuje, že tablespacs sú umiestnené mimo základného adresára.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Ako to vyzerá pre samotný Postgres? V základnom adresári je samostatný podadresár pg_tblspc. A obsahuje symbolické odkazy na adresáre, ktoré v skutočnosti obsahujú údaje Postgres mimo základného adresára.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Keď toto všetko použijete, potom pre vás môžu tieto príkazy vyzerať asi takto. To znamená, že vytvoríte tabuľku v určitom určenom tabuľkovom priestore a uvidíte, kde sa teraz nachádza. Toto sú posledné dva riadky, posledné dva príkazy tzv. A tam je jasné, že nejaký spôsob existuje. Ale v skutočnosti to nie je tá pravá cesta. Toto je predpona cesta zo základného adresára do tabuľkového priestoru. A odtiaľ je spárovaný so symbolickým odkazom, ktorý vedie k vašim skutočným údajom.

Toto všetko v našom tíme nepoužívame, no využívalo to mnoho ďalších používateľov WAL-E, ktorí nám napísali, že by chceli prejsť na WAL-G, ale to ich brzdilo. Toto je teraz podporované.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Ďalšou vlastnosťou, ktorú nám náš špeciálny kurz priniesol, je dobiehanie. Ľudia, ktorí pravdepodobne pracovali viac s Oracle ako s Postgres, vedia o catchup.

Stručne o tom, čo to je. Topológia klastra v našej službe môže zvyčajne vyzerať nejako takto. Máme majstra. Existuje replika, ktorá z nej streamuje protokol zapisovania vopred. A replika povie hlavnému zariadeniu, na ktorom LSN je momentálne. A niekde paralelne s tým môže byť denník archivovaný. A okrem archivácie denníka sa zálohy posielajú aj do cloudu. A delta zálohy sa posielajú.

V čom môže byť problém? Keď máte pomerne veľkú databázu, môže sa ukázať, že vaša replika začne výrazne zaostávať za predlohou. A zaostáva tak ďaleko, že ho nikdy nedokáže dobehnúť. Tento problém je zvyčajne potrebné nejako vyriešiť.

A najjednoduchším spôsobom je odstrániť repliku a znova ju nahrať, pretože to nikdy nedobehne a problém treba riešiť. To je ale dosť dlhá doba, pretože obnova celej 10 TB zálohy databázy je veľmi, veľmi dlhá doba. A toto všetko chceme urobiť čo najrýchlejšie, ak sa takéto problémy vyskytnú. A presne na to slúži doháňanie.

Catchup umožňuje využívať delta zálohy, ktoré sú takto uložené v cloude. Poviete, na ktorom LSN sa oneskorená replika momentálne nachádza a špecifikujte ho v príkaze catchup, aby ste vytvorili delta zálohu medzi týmto LSN a LSN, na ktorom sa váš klaster momentálne nachádza. A potom obnovíte túto zálohu do repliky, ktorá zaostávala.

Iné základy

Študenti nám tiež priniesli veľa funkcií naraz. Keďže v Yandex nevaríme len Postgres, máme aj MySQL, MongoDB, Redis, ClickHouse, v určitom okamihu sme potrebovali, aby sme mohli zálohovať s bodovým obnovením pre MySQL, a aby bola možnosť nahrať ich do cloudu.

A chceli sme to urobiť podobným spôsobom ako WAL-G. A rozhodli sme sa experimentovať a zistiť, ako to celé bude vyzerať.

A najprv, bez toho, aby akýmkoľvek spôsobom zdieľali túto logiku, napísali kód do forku. Videli, že máme nejaký funkčný model a môže lietať. Potom sme si mysleli, že našou hlavnou komunitou sú postgresisti, ktorí používajú WAL-G. A preto potrebujeme tieto časti nejako oddeliť. To znamená, že keď upravujeme kód pre Postgres, neporušujeme MySQL; keď upravujeme MySQL, neporušujeme Postgres.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Prvou myšlienkou, ako to oddeliť, bola myšlienka použiť rovnaký prístup, aký sa používa v rozšíreniach PostgreSQL. A v skutočnosti na vytvorenie zálohy MySQL ste museli nainštalovať nejaký druh dynamickej knižnice.

Ale tu je asymetria tohto prístupu okamžite viditeľná. Keď zálohujete Postgres, dáte naň normálnu zálohu pre Postgres a všetko je v poriadku. A pre MySQL sa ukazuje, že si nainštalujete zálohu pre Postgres a nainštalujete k nemu aj dynamickú knižnicu pre MySQL. Znie to nejako zvláštne. Mysleli sme si to aj my a rozhodli sme sa, že toto nie je riešenie, ktoré potrebujeme.

Rôzne zostavy pre Postgres, MySQL, MongoDB, Redis

Zdá sa nám však, že to nám umožnilo dospieť k správnemu rozhodnutiu - prideliť rôzne zostavy pre rôzne základne. To umožnilo izolovať logiku viazanú na zálohy rôznych databáz, ktoré budú pristupovať k spoločnému API, ktoré implementuje WAL-G.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Toto je časť, ktorú sme si sami napísali – predtým, ako sme študentom zadali úlohy. To je presne tá časť, kde by mohli urobiť niečo zlé, a tak sme sa rozhodli, že radšej urobíme niečo takéto a všetko bude v poriadku.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Potom sme rozdali problémy. Boli okamžite demontované. Študenti boli povinní podporovať tri základne.

Ide o MySQL, ktorý týmto spôsobom zálohujeme pomocou WAL-G už viac ako rok.

A teraz sa MongoDB blíži k výrobe, kde to dokončujú pilníkom. V skutočnosti sme pre toto všetko napísali rámec. Potom študenti napísali niekoľko funkčných vecí. A potom ich privedieme do stavu, ktorý vieme prijať vo výrobe.

Tieto problémy nevyzerali tak, že by študenti potrebovali napísať kompletné zálohovacie nástroje pre každú z týchto databáz. My sme taký problém nemali. Naším problémom bolo, že sme chceli obnovu v určitom čase a chceli sme zálohovať do cloudu. A požiadali študentov, aby napísali nejaký kód, ktorý by to vyriešil. Študenti použili už existujúce zálohovacie nástroje, ktoré nejakým spôsobom berú zálohy, a potom to všetko zlepili pomocou WAL-G, ktorý to všetko preposielal do cloudu. A k tomu pridali aj bodové zotavenie.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Čo ešte žiaci priniesli? Do WAL-G priniesli podporu šifrovania Libsodium.

Máme tiež zásady ukladania záloh. Teraz môžu byť zálohy označené ako trvalé. A akosi je pre vašu službu pohodlnejšie automatizovať proces ich ukladania.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Aký bol výsledok tohto experimentu?

Na kurz sa pôvodne zaregistrovalo viac ako 100 ľudí. Najprv som nepovedal, že univerzita v Jekaterinburgu je Uralská federálna univerzita. Všetko sme tam oznámili. Zaregistrovalo sa 100 ľudí. Reálne začalo niečo robiť oveľa menej ľudí, asi 30 ľudí.

Kurz absolvovalo ešte menej ľudí, pretože bolo potrebné písať testy na už existujúce kódy. A tiež opraviť nejakú chybu alebo urobiť nejakú funkciu. A niektorí študenti kurz stále uzavreli.

V súčasnosti študenti počas tohto kurzu opravili asi 14 problémov a vytvorili 10 prvkov rôznych veľkostí. A zdá sa mi, že ide o plnohodnotnú náhradu jedného alebo dvoch vývojárov.

Okrem iného sme vydávali diplomy a ročníkové práce. A 12 dostalo diplom. 6 z nich sa už bránilo na „5“. Tí, čo zostali, ešte ochranu nemali, ale myslím si, že aj pre nich bude všetko v poriadku.

Plány do budúcnosti

Aké plány máme do budúcna?

Aspoň tie požiadavky na funkcie, ktoré sme už od používateľov počuli a chceme ich splniť. toto:

  • Sledovanie správnosti sledovania časovej osi v archíve zálohy klastra HA. Môžete to urobiť pomocou WAL-G. A myslím si, že budeme mať študentov, ktorí sa tejto veci ujmú.
  • Už máme osobu zodpovednú za prenos záloh a WAL medzi cloudmi.
  • A nedávno sme zverejnili nápad, že WAL-G môžeme ešte viac zrýchliť rozbalením prírastkových záloh bez prepisovania stránok a optimalizáciou archívov, ktoré tam posielame.

Môžete ich zdieľať tu

Na čo bola táto správa? Navyše teraz máme okrem 4 ľudí, ktorí podporujú tento projekt, ďalšie ruky, ktorých je pomerne veľa. Najmä ak im napíšete do osobnej správy. A ak si zálohujete dáta a robíte to pomocou WAL-G, alebo by ste chceli prejsť na WAL-G, potom môžeme celkom jednoducho vyhovieť vašim želaniam.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

Toto je QR kód a odkaz. Môžete si ich prejsť a napísať všetky svoje želania. Napríklad neopravujeme nejakú chybu. Alebo naozaj chcete nejakú funkciu, ale z nejakého dôvodu ešte nie je v žiadnej zálohe, vrátane našej. Určite o tom napíšte.

WAL-G: nové funkcie a rozšírenie komunity. Georgy Rylov

otázky

Ahoj! Ďakujeme za správu! Otázka o WAL-G, ale nie o Postgres. WAL-G zálohuje MySQL a volá ďalšiu zálohu. Ak vezmeme moderné inštalácie na CentOS a ak si nainštalujete MySQL, nainštaluje sa MariDB. Od verzie 10.3 nie je podporovaná extra záloha, podporovaná je záloha MariDB. ako ste na tom vy?

Momentálne sme sa nepokúšali zálohovať MariDB. Mali sme žiadosti o podporu FoundationDB, ale vo všeobecnosti, ak takáto žiadosť existuje, môžeme nájsť ľudí, ktorí to urobia. Nie je to také dlhé ani ťažké, ako si myslím.

Dobrý deň Ďakujeme za správu! Otázka o potenciálnych nových funkciách. Ste pripravení, aby WAL-G fungoval s páskami, aby ste mohli zálohovať na pásky?

Zálohovanie na páskové úložisko zrejme znamená?

Áno.

Je tu Andrei Borodin, ktorý vie na túto otázku odpovedať lepšie ako ja.

(Andrey) Áno, ďakujem za otázku! Mali sme požiadavku na prenos zálohy na pásku z cloudového úložiska. A pre toto pílenie prenos medzi oblakmi. Pretože prenos z cloudu do cloudu je zovšeobecnená verzia prenosu na pásku. Okrem toho máme rozšíriteľnú architektúru, pokiaľ ide o úložiská. Mimochodom, veľa Storoges napísali študenti. A ak napíšete Storage for tape, potom to bude, samozrejme, podporované. Sme pripravení zvážiť žiadosti o stiahnutie. Tam musíte napísať súbor, prečítať súbor. Ak robíte tieto veci v Go, zvyčajne skončíte s 50 riadkami kódu. A potom bude páska podporovaná vo WAL-G.

Ďakujeme za správu! Zaujímavý vývojový proces. Zálohovanie je vážna funkcia, ktorá by mala byť dobre pokrytá testami. Keď ste implementovali funkcionalitu pre nové databázy, písali testy aj študenti, alebo ste testy písali sami a implementáciu ste potom dali študentom?

Študenti písali aj testy. Študenti však písali viac pre funkcie, ako sú nové databázy. Písali integračné testy. A písali testy na jednotku. Ak integrácia prebehne, teda momentálne, ide o skript, ktorý spúšťate manuálne alebo vám to robí napríklad cron. To znamená, že scenár je tam veľmi jasný.

Študenti nemajú veľa skúseností. Zaberie vám kontrola veľa času?

Áno, recenzie zaberú dosť času. To znamená, že väčšinou, keď príde viacero komisárov naraz a povedia, že som urobil toto, urobil som tamto, potom sa treba zamyslieť a vyhradiť si asi pol dňa, aby ste prišli na to, čo tam napísali. Pretože kód treba čítať pozorne. Nemali rozhovor. Nepoznáme ich veľmi dobre, takže to zaberie značné množstvo času.

Ďakujeme za správu! Predtým Andrey Borodin uviedol, že príkaz archive_command vo WAL-G by sa mal volať priamo. Ale v prípade nejakého druhu klastrovej kazety potrebujeme dodatočnú logiku na určenie uzla, z ktorého sa majú poslať hriadele. Ako riešite tento problém sami?

Aký máš problém tu? Povedzme, že máte synchrónnu repliku, z ktorej vytvárate zálohu? Alebo čo?

(Andrey) Faktom je, že WAL-G je skutočne určený na použitie bez shell skriptov. Ak niečo chýba, tak dodajme logiku, ktorá by mala byť vo vnútri WAL-G. Pokiaľ ide o to, odkiaľ by mala pochádzať archivácia, domnievame sa, že archivácia by mala byť z aktuálneho hlavného servera v klastri. Archivácia z repliky je zlý nápad. Existujú rôzne možné scenáre problémov. Najmä problémy s archiváciou časových osí a prípadných dodatočných informácií. Ďakujem za otázku!

(Vysvetlenie: Zbavili sme sa shell skriptov v tomto probléme)

Dobrý večer! Ďakujeme za správu! Zaujíma ma funkcia dobiehania, o ktorej ste hovorili. Boli sme konfrontovaní so situáciou, keď bola replika pozadu a nemohla ju dobehnúť. A v dokumentoch WAL-G som nenašiel popis tejto funkcie.

Catchup sa objavil doslova 20. januára 2020. Dokumentácia môže vyžadovať ďalšiu prácu. Píšeme to sami a nepíšeme to veľmi dobre. A možno by sme mali začať od študentov vyžadovať, aby to napísali.

Je to už vydané?

Požiadavka na stiahnutie je už mŕtva, t. j. skontroloval som ju. Skúšal som to na testovacom klastri. Zatiaľ sme nemali situáciu, kedy by sme to mohli vyskúšať na bojovom príklade.

Kedy očakávať?

Neviem. Počkaj mesiac, určite to skontrolujeme.

Zdroj: hab.com

Pridať komentár