WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

Navrhuji, abyste si přečetli přepis zprávy Georgy Rylova z počátku roku 2020 „WAL-G: nové příležitosti a rozšíření komunity“

Správci open-source čelí při svém růstu mnoha výzvám. Jak psát stále více požadovaných funkcí, opravovat stále více problémů a zvládat zobrazovat stále více žádostí o stažení? Na příkladu WAL-G (backup-tool for PostgreSQL) vám řeknu, jak jsme tyto problémy vyřešili spuštěním kurzu Open-source vývoje na univerzitě, čeho jsme dosáhli a kam se dále posuneme.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

Zdravím všechny znovu! Jsem vývojář Yandex z Jekatěrinburgu. A dnes budu mluvit o WAL-G.

Název zprávy neříkal, že jde o něco o zálohách. Nevíte někdo co je to WAL-G? Nebo to všichni vědí? Zvedněte ruku, pokud nevíte. Sakra, přišel jsi na zprávu a nevíš, o co jde.

Řeknu vám, co se dnes stane. Stává se, že náš tým dělal zálohy už nějakou dobu. A toto je další zpráva ze série, kde mluvíme o tom, jak uchováváme data bezpečně, bezpečně, pohodlně a efektivně.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

V předchozích sériích bylo mnoho zpráv od Andreje Borodina a Vladimíra Leskova. Bylo nás mnoho. A o WAL-G se bavíme už mnoho let.

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

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

Tato zpráva se bude od ostatních trochu lišit v tom, že byla spíše o technické části, ale zde budu mluvit o tom, jak jsme narazili na problémy spojené s růstem komunity. A jak jsme přišli na malý nápad, který nám pomáhá se s tím vyrovnat.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

Před několika lety byl WAL-G poměrně malý projekt, který jsme získali od Citus Data. A právě jsme to vzali. A byl vyvinut jedním člověkem.

A pouze WAL-G neměl:

  • Záloha z repliky.
  • Neexistovaly žádné přírůstkové zálohy.
  • Neexistovaly žádné zálohy WAL-Delta.
  • A ještě toho hodně chybělo.

Během těchto několika let se WAL-G hodně rozrostla.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

A do roku 2020 se již vše výše uvedené objevilo. A k tomu bylo přidáno to, co nyní máme:

  • Více než 1 000 hvězdiček na GitHubu.
  • 150 vidliček.
  • Asi 15 otevřených PR.
  • A mnoho dalších přispěvatelů.
  • A neustále otevřená témata. A to i přesto, že tam jezdíme doslova každý den a něco s tím děláme.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

A došli jsme k závěru, že tento projekt vyžaduje více naší pozornosti, i když my sami nepotřebujeme nic implementovat pro naši službu Managed Databases v Yandexu.

A někde na podzim roku 2018 nás napadla myšlenka. Obvykle má tým několik způsobů, jak vyvinout některé funkce nebo opravit chyby, pokud nemáte dostatek rukou. Můžete si například najmout jiného vývojáře a zaplatit mu peníze. Nebo můžete na nějaký čas přijmout stážistu a také mu zaplatit nějaký plat. Ale stále existuje poměrně velká skupina lidí, z nichž někteří už opravdu umí psát kód. Jen ne vždy víte, jakou kvalitu má kód.

Přemýšleli jsme o tom a rozhodli jsme se zkusit přilákat studenty. Studenti se ale s námi nebudou účastnit všeho. Udělají jen určitou část práce. A budou například psát testy, opravovat chyby, implementovat funkce, které neovlivňují hlavní funkčnost. Hlavní funkcí je vytváření záloh a obnova záloh. Pokud při vytváření zálohy uděláme chybu, dojde ke ztrátě dat. A to samozřejmě nikdo nechce. Každý chce, aby bylo vše velmi bezpečné. Proto samozřejmě nechceme nechat kód, kterému důvěřujeme méně než svému vlastnímu. To znamená, že jakýkoli nekritický kód bychom chtěli získat od našich dalších pracovníků.

Za jakých podmínek je studentské PR akceptováno?

  • Jsou povinni pokrýt svůj kód testy. Vše by mělo probíhat v CI.
  • A také procházíme 2 recenzemi. Jeden od Andreyho Borodina a jeden ode mě.
  • A navíc, abych si ověřil, že to v naší službě nic nezlomí, nahrávám samostatně sestavu s tímto commitem. A v end-to-end testech kontrolujeme, že nic neselže.

Speciální kurz na téma Open Source

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

Něco málo o tom, proč je to potřeba a proč je to, jak se mi zdá, skvělý nápad.

Pro nás je zisk jasný:

  • Dostaneme ruce navíc.
  • A kandidáty do týmu hledáme mezi chytrými studenty, kteří píší chytrý kód.

Jaký je přínos pro studenty?

Mohou být méně zřejmé, protože studenti minimálně nedostávají peníze za kód, který napíší, ale pouze známky za své studentské záznamy.

Ptal jsem se jich na to. A jejich slovy:

  • Zkušenosti přispěvatelů v Open Source.
  • Získejte řádek v životopise.
  • Prokažte se a absolvujte pohovor v Yandexu.
  • Staňte se členem GSoC.
  • +1 speciální kurz pro ty, kteří chtějí psát kód.

Nebudu mluvit o tom, jak byl kurz strukturován. Řeknu jen, že WAL-G byl hlavní projekt. Do tohoto kurzu jsme zahrnuli také projekty jako Odyssey, PostgreSQL a ClickHouse.

A dělali problémy nejen v tomto kurzu, ale také rozdávali diplomy a ročníkové práce.

A co přínos pro uživatele?

Nyní přejděme k části, která vás zajímá nejvíce. K čemu ti to je? Jde o to, že studenti opravili spoustu chyb. A vytvořili jsme funkce požadavku, o které jste nás požádali.

A dovolte mi, abych vám řekl o věcech, které jste si dlouho přáli a které byly realizovány.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

Podpora tabulkových prostorů. Tabulkové prostory ve WAL-G byly očekávány pravděpodobně od vydání WAL-G, protože WAL-G je nástupcem dalšího zálohovacího nástroje WAL-E, kde byly podporovány zálohy databází s tabulkovými prostory.

Dovolte mi, abych vám krátce připomněl, co to je a proč je to všechno potřeba. Všechna vaše data Postgresu obvykle zabírají jeden adresář v systému souborů, který se nazývá základní. A tento adresář již obsahuje všechny soubory a podadresáře požadované Postgresem.

Tabulkové prostory jsou adresáře, které obsahují data Postgres, ale nenacházejí se mimo základní adresář. Snímek ukazuje, že tablespacs jsou umístěny mimo základní adresář.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

Jak to vypadá pro samotný Postgres? V základním adresáři je samostatný podadresář pg_tblspc. A obsahuje symbolické odkazy na adresáře, které ve skutečnosti obsahují data Postgresu mimo základní adresář.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

Když toto všechno použijete, pak pro vás mohou tyto příkazy vypadat nějak takto. To znamená, že vytvoříte tabulku v určitém určeném tabulkovém prostoru a uvidíte, kde se nyní nachází. Toto jsou poslední dva řádky, poslední dva volané příkazy. A tam je jasné, že nějaký způsob existuje. Ale ve skutečnosti to není ta pravá cesta. Toto je předponou cesta ze základního adresáře do tabulkového prostoru. A odtud je spojen se symbolickým odkazem, který vede k vašim skutečným datům.

Toto všechno v našem týmu nepoužíváme, ale využilo to mnoho dalších uživatelů WAL-E, kteří nám napsali, že chtějí přejít na WAL-G, ale to je brzdilo. Toto je nyní podporováno.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

Další funkcí, kterou nám náš speciální kurz přinesl, je catchup. Lidé, kteří pravděpodobně pracovali více s Oracle než s Postgres, vědí o catchup.

Stručně o tom, co to je. Topologie clusteru v naší službě může obvykle vypadat nějak takto. Máme mistra. Existuje replika, která z ní streamuje protokol pro zápis. A replika sdělí hlavnímu serveru, na kterém LSN se aktuálně nachází. A někde paralelně s tím lze protokol archivovat. A kromě archivace logu se zálohy odesílají i do cloudu. A odesílají se zálohy delta.

V čem by mohl být problém? Když máte poměrně velkou databázi, může se ukázat, že vaše replika začne za předlohou výrazně zaostávat. A zaostává tak daleko, že ho nikdy nemůže dohnat. Tento problém je většinou potřeba nějak vyřešit.

A nejjednodušší způsob je odstranit repliku a znovu ji nahrát, protože to nikdy nedožene a problém je třeba řešit. To je ale poměrně dlouhá doba, protože obnova celé zálohy 10 TB databáze je velmi, velmi dlouhá doba. A to vše chceme udělat co nejrychleji, pokud takové problémy nastanou. A přesně k tomu slouží catchup.

Catchup umožňuje využívat delta zálohy, které se takto ukládají do cloudu. Řeknete, na kterém LSN je aktuálně zpožděná replika, a uvedete to v příkazu catchup, abyste vytvořili rozdílovou zálohu mezi tímto LSN a LSN, na kterém se váš cluster aktuálně nachází. A poté obnovíte tuto zálohu do repliky, která zaostávala.

Jiné základy

Studenti nám také přinesli spoustu funkcí najednou. Vzhledem k tomu, že v Yandexu vaříme nejen Postgres, máme také MySQL, MongoDB, Redis, ClickHouse, v určitém okamžiku jsme potřebovali být schopni provádět zálohy s obnovením v určitém okamžiku pro MySQL, a aby byla možnost nahrát je do cloudu.

A chtěli jsme to udělat podobným způsobem jako WAL-G. A rozhodli jsme se experimentovat a uvidíme, jak to celé bude vypadat.

A zpočátku, aniž by tuto logiku jakkoli sdíleli, napsali kód do forku. Viděli, že máme nějaký funkční model a umí létat. Pak jsme si mysleli, že naší hlavní komunitou jsou postgresisté, ti používají WAL-G. A proto musíme tyto části nějak oddělit. To znamená, že když upravujeme kód pro Postgres, nerozbijeme MySQL; když upravujeme MySQL, nerozbijeme Postgres.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

První nápad, jak to oddělit, byl nápad použít stejný přístup, jaký se používá v rozšířeních PostgreSQL. A ve skutečnosti, abyste vytvořili zálohu MySQL, museli jste nainstalovat nějaký druh dynamické knihovny.

Ale zde je asymetrie tohoto přístupu okamžitě viditelná. Když zálohujete Postgres, dáte na něj normální zálohu pro Postgres a vše je v pořádku. A pro MySQL se ukazuje, že nainstalujete zálohu pro Postgres a také k němu nainstalujete dynamickou knihovnu pro MySQL. Zní to nějak divně. Mysleli jsme si to také a rozhodli jsme se, že to není řešení, které potřebujeme.

Různé sestavení pro Postgres, MySQL, MongoDB, Redis

To nám ale umožnilo, jak se nám zdá, dospět ke správnému rozhodnutí – přidělit různé sestavy pro různé základny. To umožnilo izolovat logiku vázanou na zálohy různých databází, které budou přistupovat ke společnému API, které WAL-G implementuje.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

Toto je část, kterou jsme napsali sami - předtím, než jsme studentům dali problémy. To je přesně ta část, kde by mohli udělat něco špatně, takže jsme se rozhodli, že uděláme něco takového a všechno bude v pořádku.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

Poté jsme rozdali problémy. Byly okamžitě demontovány. Studenti byli povinni podporovat tři základny.

Jedná se o MySQL, kterou tímto způsobem zálohujeme pomocí WAL-G již více než rok.

A nyní se MongoDB blíží k výrobě, kde to dokončují pilníkem. Ve skutečnosti jsme pro toto všechno napsali rámec. Poté studenti napsali několik funkčních věcí. A pak je přivedeme do stavu, který můžeme přijmout ve výrobě.

Tyto problémy nevypadaly tak, že by studenti potřebovali napsat kompletní zálohovací nástroje pro každou z těchto databází. My jsme takový problém neměli. Naším problémem bylo, že jsme chtěli obnovení v určitém okamžiku a chtěli jsme zálohovat do cloudu. A požádali studenty, aby napsali nějaký kód, který by to vyřešil. Studenti použili již existující zálohovací nástroje, které zálohy nějak berou, a pak to celé slepili pomocí WAL-G, která to vše přeposlala do cloudu. A také k tomu přidali bodové zotavení.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

Co dalšího si studenti přinesli? Přinesli podporu šifrování Libsodium do WAL-G.

Máme také zásady pro ukládání záloh. Nyní lze zálohy označit jako trvalé. A pro vaši službu je nějak pohodlnější automatizovat proces jejich ukládání.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

Jaký byl výsledek tohoto experimentu?

Na kurz se původně přihlásilo více než 100 lidí. Nejprve jsem neřekl, že univerzita v Jekatěrinburgu je Uralská federální univerzita. Vše jsme tam oznámili. Přihlášeno 100 lidí. Reálně začalo něco dělat mnohem méně lidí, asi 30 lidí.

Kurz absolvovalo ještě méně lidí, protože bylo nutné psát testy na již existující kódy. A také opravit nějakou chybu nebo vytvořit nějakou funkci. A někteří studenti kurz přesto uzavřeli.

V současné době studenti během tohoto kurzu opravili asi 14 problémů a vytvořili 10 funkcí různých velikostí. A zdá se mi, že se jedná o plnohodnotnou náhradu jednoho nebo dvou vývojářů.

Mimo jiné jsme vydávali diplomy a ročníkové práce. A 12 obdrželo diplom. 6 z nich se již ubránilo na „5“. Ti, co zůstali, ještě neměli protekci, ale myslím, že i pro ně bude vše v pořádku.

Plány do budoucna

Jaké plány máme do budoucna?

Alespoň ty požadavky na funkce, které jsme již od uživatelů slyšeli a chceme je splnit. Tento:

  • Sledování správnosti sledování časové osy v archivu záloh HA clusteru. Můžete to udělat pomocí WAL-G. A myslím, že budeme mít studenty, kteří se této záležitosti ujmou.
  • Již máme osobu odpovědnou za přenos záloh a WAL mezi cloudy.
  • A nedávno jsme zveřejnili nápad, že můžeme WAL-G ještě více urychlit rozbalováním přírůstkových záloh bez přepisování stránek a optimalizací archivů, které tam posíláme.

Zde je můžete sdílet

K čemu byla tato zpráva? Navíc teď máme kromě 4 lidí, kteří tento projekt podporují, další ruce, kterých je docela dost. Zvlášť když jim napíšete do osobní zprávy. A pokud zálohujete svá data a děláte to pomocí WAL-G nebo byste chtěli přejít na WAL-G, pak můžeme docela snadno vyhovět vašim přáním.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

Toto je QR kód a odkaz. Můžete si je projít a napsat všechna svá přání. Například neopravujeme nějakou chybu. Nebo opravdu chcete nějakou funkci, ale z nějakého důvodu ještě není v žádné záloze, včetně té naší. Určitě o tom napište.

WAL-G: nové funkce a rozšíření komunity. Georgy Rylov

otázky

Ahoj! Díky za zprávu! Otázka o WAL-G, ale ne o Postgres. WAL-G zálohuje MySQL a volá další zálohu. Pokud vezmeme moderní instalace na CentOS a pokud nainstalujete MySQL, MariDB se nainstaluje. Od verze 10.3 není podporována extra záloha, záloha MariDB je podporována. jak jsi na tom s tím?

V tuto chvíli jsme nezkoušeli zálohovat MariDB. Měli jsme žádosti o podporu FoundationDB, ale obecně, pokud taková žádost existuje, můžeme najít lidi, kteří to udělají. Není to tak dlouhé ani tak těžké, jak si myslím.

Dobré odpoledne Díky za zprávu! Otázka ohledně potenciálních nových funkcí. Jste připraveni, aby WAL-G fungoval s páskami, abyste mohli zálohovat na pásky?

Zálohování na páskové úložiště zřejmě znamená?

Ano.

Je tu Andrei Borodin, který na tuto otázku dokáže odpovědět lépe než já.

(Andrey) Ano, děkuji za otázku! Měli jsme požadavek na přenesení zálohy na pásku z cloudového úložiště. A za tohle řezání přenos mezi mraky. Protože přenos z cloudu do cloudu je zobecněná verze přenosu na pásku. Kromě toho máme rozšiřitelnou architekturu, pokud jde o úložiště. Mimochodem, mnoho Storoges napsali studenti. A pokud napíšete Storage for tape, pak to bude samozřejmě podporováno. Jsme připraveni zvážit žádosti o stažení. Tam je potřeba zapsat soubor, přečíst soubor. Pokud tyto věci provedete v Go, obvykle skončíte s 50 řádky kódu. A pak bude páska podporována ve WAL-G.

Díky za zprávu! Zajímavý proces vývoje. Zálohování je vážná funkce, která by měla být dobře pokryta testy. Když jste implementovali funkcionalitu pro nové databáze, psali testy také studenti, nebo jste si testy psali sami a implementaci pak dali studentům?

Studenti také psali testy. Ale studenti psali více pro funkce, jako jsou nové databáze. Psali integrační testy. A psali jednotkové testy. Pokud integrace projde, tedy v tuto chvíli, jedná se o skript, který spouštíte ručně nebo jej provádíte například cronem. To znamená, že scénář je tam velmi jasný.

Studenti nemají mnoho zkušeností. Zabere kontrola hodně času?

Ano, recenze zaberou hodně času. To znamená, že obvykle, když přijde několik komisařů najednou a řeknou, že jsem udělal tohle, udělal jsem tamto, pak musíte přemýšlet a vyhradit si asi půl dne, abyste zjistili, co tam napsali. Protože kód je třeba číst pozorně. Neměli rozhovor. Moc je neznáme, takže to zabere značné množství času.

Díky za zprávu! Dříve Andrey Borodin uvedl, že příkaz archive_command ve WAL-G by měl být volán přímo. Ale v případě nějakého druhu kazety clusteru potřebujeme další logiku, abychom určili uzel, ze kterého se mají hřídele poslat. Jak tento problém řešíte sami?

jaký máš tady problém? Řekněme, že máte synchronní repliku, se kterou vytváříte zálohu? Nebo co?

(Andrey) Faktem je, že WAL-G je skutečně určen k použití bez shellových skriptů. Pokud něco chybí, pak doplňte logiku, která by měla být uvnitř WAL-G. Pokud jde o to, odkud by měla archivace pocházet, domníváme se, že archivace by měla být z aktuálního hlavního serveru v clusteru. Archivace z repliky je špatný nápad. Existují různé možné scénáře problémů. Zejména problémy s archivací časových os a případných doplňujících informací. Děkuji za otázku!

(Vysvětlení: Zbavili jsme se skriptů shellu v tomto problému)

Dobrý večer! Díky za zprávu! Zajímá mě funkce catchup, o které jste mluvil. Byli jsme postaveni před situaci, kdy byla replika za námi a nemohla ji dohnat. A popis této funkce jsem v dokumentech WAL-G nenašel.

Catchup se objevil doslova 20. ledna 2020. Dokumentace může vyžadovat další práci. Píšeme to sami a nepíšeme to úplně dobře. A možná bychom měli začít vyžadovat, aby to studenti psali.

Je již vydán?

Požadavek na stažení je již mrtvý, tj. zkontroloval jsem ho. Zkoušel jsem to na testovacím clusteru. Zatím jsme neměli situaci, kdy bychom to mohli vyzkoušet na bojovém příkladu.

Kdy očekávat?

Nevím. Počkej měsíc, určitě to zkontrolujeme.

Zdroj: www.habr.com

Přidat komentář