WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Predlažem da pročitate transkript izvještaja Georgija Rylova za početak 2020. „WAL-G: nove mogućnosti i širenje zajednice”

Održavači otvorenog koda suočavaju se s mnogim izazovima kako rastu. Kako napisati sve više i više potrebnih funkcija, popraviti sve više i više problema i uspjeti vidjeti sve više i više zahtjeva za povlačenjem? Koristeći WAL-G (backup-alat za PostgreSQL) kao primjer, reći ću vam kako smo riješili ove probleme pokretanjem kursa o open-source razvoju na univerzitetu, šta smo postigli i kuda ćemo dalje krenuti.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Pozdrav svima! Ja sam Yandex programer iz Jekaterinburga. A danas ću govoriti o WAL-G.

U naslovu izvještaja nije stajalo da se radi o sigurnosnoj kopiji. Da li neko zna šta je WAL-G? Ili svi znaju? Podigni ruku ako ne znaš. Sranje, došli ste do izvještaja i ne znate o čemu se radi.

Dozvolite mi da vam kažem šta će se dogoditi danas. Desilo se da naš tim već neko vrijeme radi rezervne kopije. I ovo je još jedan izvještaj u nizu u kojem govorimo o tome kako pohranjujemo podatke sigurno, bezbedno, povoljno i efikasno.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

U prethodnim serijama bilo je mnogo reportaža Andreja Borodina i Vladimira Leskova. Bilo nas je mnogo. A o WAL-G pričamo mnogo godina.

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

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

Ovaj izvještaj će se malo razlikovati od ostalih po tome što je više bio o tehničkom dijelu, ali ovdje ću govoriti o tome kako smo naišli na probleme vezane za rast zajednice. I kako smo došli do male ideje koja nam pomaže da se nosimo s ovim.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Prije nekoliko godina, WAL-G je bio prilično mali projekat koji smo dobili od Citus Data. I upravo smo ga uzeli. I razvila ga je jedna osoba.

I samo WAL-G nije imao:

  • Sigurnosna kopija sa replike.
  • Nije bilo inkrementalnih rezervnih kopija.
  • Nije bilo rezervnih kopija za WAL-Delta.
  • I još je mnogo toga nedostajalo.

Tokom ovih nekoliko godina, WAL-G je dosta porastao.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

A do 2020. godine sve navedeno već se pojavilo. I ovome je dodato ono što sada imamo:

  • Više od 1 zvjezdica na GitHubu.
  • 150 viljuški.
  • Oko 15 otvorenih PR-ova.
  • I još mnogo saradnika.
  • I stalno otvorena pitanja. I to uprkos činjenici da bukvalno svaki dan idemo tamo i radimo nešto po tom pitanju.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

I došli smo do zaključka da ovaj projekt zahtijeva više naše pažnje, čak i kada mi sami ne trebamo ništa implementirati za našu uslugu Managed Databases u Yandexu.

I negdje u jesen 2018. pala nam je na pamet ideja. Obično tim ima nekoliko načina da razvije neke funkcije ili popravi greške ako nemate dovoljno ruku. Na primjer, možete unajmiti drugog programera i platiti mu novac. Ili možete uzeti pripravnika na neko vrijeme i također mu platiti neku platu. Ali još uvijek postoji prilično velika grupa ljudi, od kojih neki već stvarno znaju pisati kod. Jednostavno ne znate uvijek kakvog je kvaliteta kod.

Razmislili smo o tome i odlučili da pokušamo privući studente. Ali studenti neće sa nama učestvovati u svemu. Oni će odraditi samo dio posla. I oni će, na primjer, pisati testove, ispravljati greške, implementirati funkcije koje ne utiču na glavnu funkcionalnost. Glavna funkcionalnost je stvaranje sigurnosnih kopija i vraćanje sigurnosnih kopija. Ako pogriješimo u kreiranju sigurnosne kopije, doživjet ćemo gubitak podataka. I niko ovo ne želi, naravno. Svi žele da sve bude veoma bezbedno. Stoga, naravno, ne želimo dozvoliti kodu kojem vjerujemo manje nego svome. Odnosno, svaki nekritičan kod je ono što bismo željeli dobiti od naših dodatnih radnika.

Pod kojim uslovima se prihvata studentski PR?

  • Od njih se traži da pokriju svoj kod testovima. Sve bi se trebalo odvijati u CI.
  • I također prolazimo kroz 2 recenzije. Jedan Andrej Borodin i jedan ja.
  • I dodatno, da provjerim da to neće slomiti ništa u našem servisu, zasebno učitavam sklop sa ovim urezivanjem. I provjeravamo u end-to-end testovima da ništa ne uspijeva.

Specijalni kurs o otvorenom kodu

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Malo o tome zašto je ovo potrebno i zašto je ovo, čini mi se, dobra ideja.

Za nas je profit očigledan:

  • Dobijamo dodatne ruke.
  • I tražimo kandidate za tim među pametnim studentima koji pišu pametan kod.

Koja je korist za studente?

Oni mogu biti manje očigledni, jer studenti, u najmanju ruku, ne primaju novac za šifru koju napišu, već samo dobijaju ocjene za svoju studentsku evidenciju.

Pitao sam ih o ovome. I njihovim riječima:

  • Iskustvo saradnika u otvorenom kodu.
  • Stavite red u svoj CV.
  • Dokažite se i položite intervju u Yandexu.
  • Postanite član GSoC-a.
  • +1 specijalni kurs za one koji žele pisati kod.

Neću govoriti o tome kako je kurs bio strukturiran. Reći ću samo da je WAL-G bio glavni projekat. U ovaj kurs smo uključili i projekte kao što su Odyssey, PostgreSQL i ClickHouse.

I davali su probleme ne samo na ovom kursu, već su davali i diplome i nastavne radove.

Šta je sa pogodnostima za korisnike?

Sada pređimo na dio koji vas najviše zanima. Šta ti ovo koristi? Poenta je da su učenici ispravili mnogo grešaka. I napravili smo karakteristike zahtjeva koje ste tražili od nas.

I da vam ispričam o stvarima koje ste dugo željeli i koje su ostvarene.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Podrška za tablične prostore. Tablični prostori u WAL-G-u su se očekivali vjerovatno od izlaska WAL-G-a, jer je WAL-G nasljednik drugog alata za pravljenje rezervnih kopija WAL-E, gdje su podržane sigurnosne kopije baze podataka sa prostorima tablica.

Dozvolite mi da vas ukratko podsjetim šta je to i zašto je sve potrebno. Obično svi vaši Postgres podaci zauzimaju jedan direktorij na sistemu datoteka, koji se zove baza. I ovaj direktorij već sadrži sve datoteke i poddirektorije koje zahtijeva Postgres.

Tablični prostori su direktoriji koji sadrže Postgres podatke, ali se ne nalaze izvan osnovnog direktorija. Slajd pokazuje da se tablični prostori nalaze izvan osnovnog direktorija.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Kako ovo izgleda za sam Postgres? Postoji poseban poddirektorij pg_tblspc u osnovnom direktoriju. I sadrži simbolične veze do direktorija koji zapravo sadrže Postgres podatke izvan osnovnog direktorija.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Kada koristite sve ovo, onda za vas ove komande mogu izgledati otprilike ovako. To jest, kreirate tabelu u nekom specificiranom prostoru tablice i vidite gdje se sada nalazi. Ovo su posljednja dva reda, posljednje dvije pozvane naredbe. I tu je jasno da postoji neki način. Ali u stvarnosti, ovo nije pravi način. Ovo je staza s prefiksom od osnovnog direktorija do prostora tablice. I odatle se poklapa sa simboličkom vezom koja vodi do vaših stvarnih podataka.

Sve ovo ne koristimo u našem timu, ali su ga koristili mnogi drugi korisnici WAL-E-a koji su nam pisali da žele da pređu na WAL-G, ali ih je to zaustavilo. Ovo je sada podržano.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Još jedna karakteristika koju nam je donio naš specijalni kurs je catchup. Ljudi koji su vjerovatno radili više sa Oracleom nego sa Postgresom znaju za nadoknadu.

Ukratko o čemu se radi. Topologija klastera u našoj usluzi obično može izgledati otprilike ovako. Imamo gospodara. Postoji replika koja iz nje prenosi dnevnik za upisivanje unaprijed. A replika govori masteru na kojem je LSN-u trenutno. I negdje paralelno s ovim, dnevnik se može arhivirati. A osim arhiviranja dnevnika, sigurnosne kopije se šalju i u oblak. I delta rezervne kopije se šalju.

Šta bi mogao biti problem? Kada imate prilično veliku bazu podataka, može se ispostaviti da vaša replika počinje znatno zaostajati za glavnom. I toliko zaostaje da ga nikako ne može sustići. Ovaj problem obično treba nekako riješiti.

A najlakši način je da uklonite repliku i ponovo je postavite, jer se ona nikada neće sustići, a problem treba riješiti. Ali ovo je prilično dugo, jer je vraćanje cijele sigurnosne kopije baze podataka od 10 TB vrlo, jako dugo. I želimo da sve to uradimo što je pre moguće ako se pojave takvi problemi. A to je upravo ono čemu služi sustizanje.

Catchup vam omogućava da koristite delta sigurnosne kopije, koje se na ovaj način pohranjuju u oblaku. Kažete na kojem je LSN-u trenutno zaostala replika i specificirate ga u naredbi catchup kako biste kreirali delta sigurnosnu kopiju između tog LSN-a i LSN-a na kojem se trenutno nalazi vaš klaster. I nakon toga vratite ovu sigurnosnu kopiju na repliku koja je zaostala.

Druge baze

Studenti su nam također donijeli mnogo funkcija odjednom. Pošto u Yandex-u ne kuvamo samo Postgres, imamo i MySQL, MongoDB, Redis, ClickHouse, u nekom trenutku smo morali da budemo u mogućnosti da napravimo rezervne kopije sa oporavkom u trenutku za MySQL, i tako da postoji mogućnost za upload ih u oblak.

I htjeli smo to učiniti na sličan način kao što radi WAL-G. I odlučili smo eksperimentirati i vidjeti kako će sve to izgledati.

I u početku su, ne dijeleći tu logiku na bilo koji način, napisali kod u fork. Videli su da imamo nekakav model koji radi i da može da leti. Tada smo mislili da su naša glavna zajednica postgresisti, oni koriste WAL-G. I zato moramo nekako razdvojiti ove dijelove. To jest, kada uređujemo kod za Postgres, ne razbijamo MySQL; kada uređujemo MySQL, ne razbijamo Postgres.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Prva ideja o tome kako to razdvojiti bila je ideja korištenja istog pristupa koji se koristi u PostgreSQL ekstenzijama. I, zapravo, da biste napravili sigurnosnu kopiju MySQL-a morali ste instalirati neku vrstu dinamičke biblioteke.

Ali ovdje je odmah vidljiva asimetrija ovog pristupa. Kada napravite rezervnu kopiju Postgresa, stavite normalnu rezervnu kopiju za Postgres i sve je u redu. A za MySQL se ispostavilo da instalirate rezervnu kopiju za Postgres i takođe instalirate dinamičku biblioteku za MySQL za njega. Zvuči nekako čudno. I mi smo tako mislili i odlučili da to nije rješenje koje nam treba.

Različite verzije za Postgres, MySQL, MongoDB, Redis

Ali to nam je omogućilo, čini nam se, da dođemo do prave odluke – da različite skupštine rasporedimo za različite baze. Ovo je omogućilo da se izoluje logika vezana za rezervne kopije različitih baza podataka koje će pristupiti zajedničkom API-ju koji WAL-G implementira.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Ovo je dio koji smo sami napisali - prije nego što učenicima zadamo probleme. Odnosno, to je upravo dio u kojem bi mogli nešto pogriješiti, pa smo odlučili da je bolje da uradimo ovako nešto i sve će biti u redu.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Nakon toga smo izdavali probleme. Odmah su demontirani. Od učenika se tražilo da podrže tri baze.

Ovo je MySQL za koji na ovaj način pravimo rezervnu kopiju koristeći WAL-G više od godinu dana.

I sada se MongoDB približava proizvodnji, gdje ga završavaju sa fajlom. Zapravo, mi smo napisali okvir za sve ovo. Zatim su učenici napisali neke izvodljive stvari. I onda ih dovedemo u stanje koje možemo prihvatiti u proizvodnji.

Ovi problemi nisu izgledali kao da studenti trebaju napisati kompletne alate za sigurnosnu kopiju za svaku od ovih baza podataka. Nismo imali takav problem. Naš problem je bio što smo željeli oporavak u trenutku i željeli smo napraviti sigurnosnu kopiju u oblaku. I zamolili su studente da napišu neki kod koji bi to riješio. Učenici su koristili već postojeće alate za pravljenje rezervnih kopija, koji na neki način preuzimaju rezervne kopije, a zatim su sve to zalijepili WAL-G-om koji je sve proslijedio u oblak. Ovome su također dodali oporavak u trenutku.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Šta su još studenti doneli? Donijeli su podršku za Libsodium enkripciju u WAL-G.

Također imamo pravila za pohranu rezervnih kopija. Sada rezervne kopije mogu biti označene kao trajne. I nekako je zgodnije da vaš servis automatizuje proces njihovog skladištenja.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Šta je bio rezultat ovog eksperimenta?

Više od 100 ljudi prvobitno se prijavilo za kurs. U početku nisam rekao da je univerzitet u Jekaterinburgu Uralski federalni univerzitet. Tamo smo sve najavili. Registrovano 100 ljudi. U stvarnosti je mnogo manje ljudi počelo nešto da radi, oko 30 ljudi.

Još manje ljudi je završilo kurs, jer je bilo potrebno pisati testove za kodove koji već postoje. I također popraviti neki bug ili napraviti neku funkciju. Neki studenti su ipak zatvorili kurs.

Trenutno, tokom ovog kursa, studenti su popravili oko 14 problema i napravili 10 karakteristika različitih veličina. I, čini mi se, ovo je puna zamjena jednog ili dva programera.

Između ostalog, izdavali smo diplome i kurseve. I 12 je dobilo diplome. Njih 6 se već branilo na “5”. Oni koji su ostali još nisu imali zaštitu, ali mislim da će i njima sve biti u redu.

Planovi za budućnost

Kakve planove imamo za budućnost?

Barem one zahtjeve za funkcije koje smo već čuli od korisnika i koje želimo učiniti. Ovo:

  • Praćenje ispravnosti praćenja vremenske linije u arhivi sigurnosne kopije HA klastera. To možete učiniti sa WAL-G. I mislim da ćemo imati studente koji će se pozabaviti ovim pitanjem.
  • Već imamo osobu odgovornu za prijenos sigurnosnih kopija i WAL-a između oblaka.
  • Nedavno smo objavili ideju da možemo još više ubrzati WAL-G tako što ćemo raspakirati inkrementalne sigurnosne kopije bez ponovnog pisanja stranica i optimizacije arhiva koje tamo šaljemo.

Možete ih podijeliti ovdje

Čemu je služio ovaj izvještaj? Štaviše, sada, pored 4 osobe koje podržavaju ovaj projekat, imamo dodatne ruke, kojih ima dosta. Pogotovo ako im pišete u ličnoj poruci. A ako napravite sigurnosnu kopiju svojih podataka i to učinite koristeći WAL-G ili želite da pređete na WAL-G, onda možemo vrlo lako udovoljiti vašim željama.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Ovo je QR kod i link. Možete ih proći i napisati sve svoje želje. Na primjer, ne popravljamo neki bug. Ili stvarno želite neku funkciju, ali iz nekog razloga još nije ni u jednoj sigurnosnoj kopiji, uključujući i našu. Svakako pišite o ovome.

WAL-G: nove funkcije i proširenje zajednice. Georgij Rylov

Vaša pitanja

Zdravo! Hvala na izvještaju! Pitanje o WAL-G-u, ali ne o Postgresu. WAL-G pravi rezervnu kopiju MySQL-a i poziva dodatnu rezervnu kopiju. Ako uzmemo moderne instalacije na CentOS i ako yum instalirate MySQL, MariDB će biti instaliran. Od verzije 10.3 dodatna sigurnosna kopija nije podržana, MariDB sigurnosna kopija je podržana. kako si sa ovim?

Trenutno nismo pokušali napraviti sigurnosnu kopiju MariDB-a. Imali smo zahtjeva za FoundationDB podršku, ali općenito, ako postoji takav zahtjev, onda možemo naći ljude koji će to učiniti. Nije tako dugo ili teško kao što mislim.

Dobar dan Hvala na izvještaju! Pitanje o potencijalnim novim karakteristikama. Da li ste spremni da WAL-G radi sa trakama tako da možete napraviti rezervnu kopiju na trakama?

Očigledno znači sigurnosna kopija na kaseti?

Da.

Tu je Andrej Borodin, koji može bolje odgovoriti na ovo pitanje od mene.

(Andrey) Da, hvala na pitanju! Imali smo zahtjev za prijenos sigurnosne kopije na traku iz pohrane u oblaku. I za ovo piljenje prijenos između oblaka. Zato što je prijenos oblaka na oblak generalizirana verzija prijenosa trake. Osim toga, imamo proširivu arhitekturu u smislu skladišta. Inače, mnoge Storoge su napisali studenti. A ako napišete Storage za traku, onda će to, naravno, biti podržano. Spremni smo da razmotrimo zahtjeve za povlačenjem. Tamo trebate napisati datoteku, pročitati datoteku. Ako radite ove stvari u Go, obično završite sa 50 linija koda. I tada će traka biti podržana u WAL-G.

Hvala na izvještaju! Zanimljiv proces razvoja. Backup je ozbiljan dio funkcionalnosti koji bi trebao biti dobro pokriven testovima. Kada ste implementirali funkcionalnost za nove baze podataka, da li su i studenti pisali testove, ili ste sami pisali testove, a zatim dali implementaciju studentima?

Učenici su takođe pisali testove. Ali studenti su pisali više za funkcije kao što su nove baze podataka. Napisali su integracijske testove. I pisali su jedinične testove. Ako integracija prođe, odnosno trenutno, ovo je skripta koju izvršavate ručno ili imate cron koji to radi, na primjer. Odnosno, scenario je tamo vrlo jasan.

Učenici nemaju puno iskustva. Da li pregled oduzima puno vremena?

Da, recenzije oduzimaju dosta vremena. Odnosno, obično, kada dođe nekoliko izvršilaca odjednom i kaže da sam uradio ovo, uradio sam ono, onda treba razmisliti i izdvojiti pola dana da shvatiš šta su tu napisali. Zato što se kod mora pažljivo pročitati. Nisu imali intervju. Ne poznajemo ih dobro, pa je potrebno dosta vremena.

Hvala na izvještaju! Ranije je Andrej Borodin izjavio da archive_command u WAL-G treba pozvati direktno. Ali u slučaju neke vrste cluster kertridža, potrebna nam je dodatna logika da odredimo čvor iz kojeg se šalju osovine. Kako sami rješavate ovaj problem?

Koji je tvoj problem ovdje? Recimo da imate sinhronu repliku sa kojom pravite rezervnu kopiju? Ili šta?

(Andrey) Činjenica je da je WAL-G zaista namijenjen da se koristi bez shell skripti. Ako nešto nedostaje, dodajmo logiku koja bi trebala biti unutar WAL-G-a. Što se tiče toga odakle treba doći arhiviranje, vjerujemo da bi arhiviranje trebalo biti od trenutnog mastera u klasteru. Arhiviranje iz replike je loša ideja. Postoje različiti mogući scenariji s problemima. Konkretno, problemi sa arhiviranjem vremenskih rokova i svih dodatnih informacija. Hvala na pitanju!

(Pojašnjenje: Riješili smo se shell skripti u ovom broju)

Dobro veče! Hvala na izvještaju! Zanima me funkcija nadoknade o kojoj ste govorili. Bili smo suočeni sa situacijom u kojoj je replika bila iza i nije mogla sustići. I nisam našao opis ove funkcije u WAL-G dokumentima.

Catchup se pojavio bukvalno 20. januara 2020. Dokumentacija će možda trebati još poraditi. Mi to sami pišemo i ne pišemo to baš najbolje. I možda bismo trebali početi zahtijevati od učenika da to napišu.

Je li već objavljeno?

Zahtjev za povlačenje je već mrtav, tj. provjerio sam ga. Probao sam ovo na testnom klasteru. Do sada nismo imali situaciju da bismo to mogli testirati na borbenom primjeru.

Kada očekivati?

Ne znam. Sacekaj mesec dana, provericemo sigurno.

izvor: www.habr.com

Dodajte komentar