WAL-G: nove značajke i širenje zajednice. Georgij Rylov

Predlažem da pročitate transkript izvješća Georgyja Rylova s ​​početka 2020. „WAL-G: nove prilike i širenje zajednice”

Održavatelji otvorenog koda suočavaju se s mnogim izazovima dok rastu. Kako napisati sve više i više potrebnih značajki, 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 (alat za sigurnosno kopiranje za PostgreSQL) kao primjer, reći ću vam kako smo riješili te probleme pokretanjem tečaja o razvoju otvorenog koda na sveučilištu, što smo postigli i kamo ćemo dalje ići.

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

Još jednom pozdrav svima! Ja sam Yandex programer iz Jekaterinburga. A danas ću govoriti o WAL-G-u.

U naslovu izvješća nije pisalo da se radi o nečemu o sigurnosnim kopijama. Zna li netko što je WAL-G? Ili svi znaju? Dignite ruku ako ne znate. Sranje, došli ste na izvješće i ne znate o čemu se radi.

Reći ću ti što će se danas dogoditi. Dogodilo se da naš tim već duže vrijeme radi sigurnosne kopije. A ovo je još jedno izvješće u nizu u kojem govorimo o tome kako podatke pohranjujemo sigurno, zaštićeno, praktično i učinkovito.

WAL-G: nove značajke i š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-u govorimo već mnogo godina.

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

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

Ovo izvješće bit će malo drugačije od ostalih po tome što se više odnosilo na tehnički dio, ali ovdje ću govoriti o tome kako smo naišli na probleme povezane s rastom zajednice. I kako smo došli do male ideje koja nam pomaže da se nosimo s ovim.

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

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

A samo WAL-G nije imao:

  • Sigurnosna kopija iz replike.
  • Nije bilo inkrementalnih sigurnosnih kopija.
  • Nije bilo WAL-Delta sigurnosnih kopija.
  • A nedostajalo je još puno toga.

Tijekom ovih nekoliko godina, WAL-G je dosta narastao.

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

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

  • Više od 1 zvjezdica na GitHubu.
  • 150 vilica.
  • Oko 15 otvorenih PR-ova.
  • I mnogi drugi suradnici.
  • I stalno otvorena pitanja. I to unatoč činjenici da doslovno svaki dan idemo tamo i radimo nešto po tom pitanju.

WAL-G: nove značajke i š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 upravljanih baza podataka u Yandexu.

I negdje u jesen 2018. pala nam je na pamet ideja. Obično tim ima nekoliko načina da razvije neke značajke ili popravi bugove ako nemate dovoljno ruku. Na primjer, možete unajmiti drugog programera i platiti mu novac. Ili možete uzeti pripravnika na neko vrijeme i platiti mu nešto plaće. Ali još uvijek postoji prilično velika skupina ljudi od kojih neki već stvarno znaju pisati kod. Jednostavno ne znate uvijek kakvog je koda.

Razmislili smo i odlučili pokušati privući studente. Ali studenti neće sudjelovati u svemu s nama. Oni će obaviti samo dio posla. I oni će, na primjer, pisati testove, ispravljati greške, implementirati značajke koje ne utječu na glavnu funkcionalnost. Glavna funkcija je stvaranje sigurnosnih kopija i vraćanje sigurnosnih kopija. Ako pogriješimo u izradi sigurnosne kopije, doživjet ćemo gubitak podataka. A ovo, naravno, nitko ne želi. Svatko želi da sve bude vrlo sigurno. Stoga, naravno, ne želimo dopustiti kodu kojem vjerujemo manje od vlastitog. Odnosno, svaki nekritični kod je ono što bismo željeli primiti od naših dodatnih radnika.

Pod kojim uvjetima se prihvaća studentski PR?

  • Od njih se traži da svoj kod pokriju testovima. Sve bi se trebalo odvijati u CI.
  • Također prolazimo kroz 2 recenzije. Jedan od Andreja Borodina i jedan od mene.
  • I dodatno, kako bih provjerio da ovo neće pokvariti ništa u našoj usluzi, zasebno učitavam sklop s ovim predanjem. I provjeravamo end-to-end testove da ništa ne zakaže.

Poseban tečaj o otvorenom kodu

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

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

Za nas je profit očit:

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

Koja je korist za studente?

Možda su manje očite, jer studenti, u najmanju ruku, ne dobivaju novac za šifru koju napišu, već samo dobivaju ocjene za svoje studentske evidencije.

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

  • Iskustvo suradnika u Open Sourceu.
  • Unesite redak u životopis.
  • Dokažite se i prođite intervju u Yandexu.
  • Postanite član GSoC-a.
  • +1 poseban tečaj za one koji žele pisati kod.

Neću govoriti o strukturi tečaja. Samo ću reći da je WAL-G bio glavni projekt. Također smo uključili projekte kao što su Odyssey, PostgreSQL i ClickHouse u ovaj tečaj.

I oni su zadavali probleme ne samo na ovom kolegiju, nego su davali i diplome i tečajeve.

Što je s koristima za korisnike?

Sada prijeđimo na dio koji vas najviše zanima. Što ti ovo koristi? Poanta je da su studenti popravili dosta grešaka. I napravili smo značajke zahtjeva koje ste tražili od nas.

I da ti pričam o stvarima koje si dugo želio i koje su realizirane.

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

Podrška za tablične prostore. Tablični prostori u WAL-G očekivani su vjerojatno od izdavanja WAL-G, jer je WAL-G nasljednik drugog sigurnosnog alata WAL-E, gdje su podržane sigurnosne kopije baze podataka s tabličnim prostorima.

Da vas ukratko podsjetim što je to i zašto je sve potrebno. Tipično, svi vaši Postgres podaci zauzimaju jedan direktorij u datotečnom sustavu koji se naziva 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 tablespacs nalaze izvan osnovnog direktorija.

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

Kako to izgleda za sam Postgres? Postoji odvojeni poddirektorij pg_tblspc u osnovnom direktoriju. I sadrži simboličke veze na direktorije koji zapravo sadrže Postgres podatke izvan osnovnog direktorija.

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

Kada sve ovo koristite, onda za vas ove naredbe mogu izgledati otprilike ovako. To jest, kreirate tablicu u određenom tabličnom prostoru i vidite gdje je sada. Ovo su zadnja dva retka, posljednje dvije pozvane naredbe. I tu je jasno da postoji neki način. Ali u stvarnosti to nije pravi način. Ovo je prefiksirani put od osnovnog direktorija do tabličnog prostora. A odatle se uspoređuje sa simboličkom vezom koja vodi do vaših stvarnih podataka.

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

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

Još jedna značajka koju nam je donio naš specijalni tečaj je catchup. Ljudi koji su vjerojatno više radili s Oracleom nego s Postgresom znaju za catchap.

Ukratko o čemu se radi. Topologija klastera u našoj usluzi obično može izgledati ovako. Imamo majstora. Postoji replika koja struji dnevnik pisanja unaprijed iz njega. A replika govori masteru na kojem se LSN-u trenutno nalazi. A negdje paralelno s ovim, log se može arhivirati. Osim arhiviranja dnevnika, sigurnosne kopije se također šalju u oblak. Šalju se i delta sigurnosne kopije.

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

A najlakši način je ukloniti repliku i ponovno je uploadati, jer nikada neće stići, a problem se mora riješiti. Ali to je dosta dugo, jer vraćanje cijele sigurnosne kopije baze podataka od 10 TB je jako, jako dugo. I sve to želimo učiniti što je brže moguće ako do takvih problema dođe. I upravo tome služi catchup.

Catchup vam omogućuje korištenje delta sigurnosnih kopija koje se na ovaj način pohranjuju u oblaku. Kažete na kojem se LSN-u trenutno nalazi replika koja zaostaje i specificirate ga u naredbi catchup kako biste stvorili delta sigurnosnu kopiju između tog LSN-a i LSN-a na kojem se trenutno nalazi vaš klaster. I nakon toga vraćate ovu sigurnosnu kopiju na repliku koja je zaostajala.

Ostale baze

Studenti su nam također donijeli puno značajki odjednom. Budući da u Yandexu ne kuhamo samo Postgres, imamo i MySQL, MongoDB, Redis, ClickHouse, u nekom smo trenutku trebali biti u mogućnosti napraviti sigurnosne kopije s oporavkom u trenutku za MySQL, i tako da postoji prilika za učitavanje njih u oblak.

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

I isprva su, ne dijeleći tu logiku ni na koji način, napisali kod u fork. Vidjeli su da imamo nekakav radni model i da može letjeti. Tada smo mislili da su naša glavna zajednica postgresisti, oni koriste WAL-G. I stoga te dijelove moramo nekako razdvojiti. Odnosno, kada uređujemo kod za Postgres, ne razbijamo MySQL; kada uređujemo MySQL, ne razbijamo Postgres.

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

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

Ali ovdje je odmah vidljiva asimetrija ovog pristupa. Kad napraviš backup Postgresa, staviš normalan backup za Postgres na njega i sve je u redu. A za MySQL ispada da instalirate sigurnosnu kopiju za Postgres i također instalirate dinamičku biblioteku za MySQL za njega. Zvuči nekako čudno. I mi smo tako mislili i zaključili da to nije rješenje koje nam treba.

Razne verzije za Postgres, MySQL, MongoDB, Redis

Ali to nam je omogućilo, čini nam se, da dođemo do ispravne odluke - dodijeliti različite sklopove za različite baze. To je omogućilo izolaciju logike vezane uz sigurnosne kopije različitih baza podataka koje će pristupati zajedničkom API-ju koji implementira WAL-G.

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

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

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

Nakon toga smo izdali probleme. Odmah su rastavljeni. Studenti su bili dužni podržati tri baze.

Ovo je MySQL, koji na ovaj način sigurnosno kopiramo koristeći WAL-G više od godinu dana.

I sada MongoDB pristupa produkciji, gdje ga dorađuju s datotekom. Zapravo, mi smo napisali okvir za sve ovo. Zatim su učenici napisali neke izvedive stvari. I onda ih dovedemo u stanje da ih možemo prihvatiti u proizvodnji.

Ovi problemi nisu izgledali kao da studenti trebaju napisati potpune alate za sigurnosno kopiranje za svaku od ovih baza podataka. Mi nismo imali takav problem. Naš je problem bio u tome što smo htjeli oporavak u određenom trenutku i htjeli smo napraviti sigurnosnu kopiju u oblaku. I zamolili su studente da napišu neki kod koji bi to riješio. Studenti su koristili već postojeće backup alate, koji nekako rade sigurnosne kopije, a onda su to sve zalijepili s WAL-G-om koji je sve to proslijedio u oblak. Ovome su dodali i oporavak u određenom trenutku.

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

Što su još učenici donijeli? U WAL-G su unijeli podršku za enkripciju Libsodium.

Imamo i pravila o sigurnosnoj pohrani. Sada se sigurnosne kopije mogu označiti kao trajne. I nekako je prikladnije za vašu uslugu automatizirati proces njihovog pohranjivanja.

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

Što je bio rezultat ovog eksperimenta?

Za tečaj se inicijalno prijavilo više od 100 ljudi. Isprva nisam rekao da je sveučilište u Jekaterinburgu Uralsko federalno sveučilište. Tamo smo sve najavili. Prijavljeno 100 ljudi. U stvarnosti je puno manje ljudi počelo nešto raditi, 30-ak ljudi.

Tečaj je završilo još manje ljudi jer je bilo potrebno napisati testove za šifre koje već postoje. Također ispravite neku grešku ili napravite neku značajku. A neki su studenti ipak zatvorili tečaj.

Trenutno, tijekom ovog tečaja, studenti su riješili oko 14 problema i izradili 10 značajki različitih veličina. I, čini mi se, ovo je potpuna zamjena jednog ili dva programera.

Između ostalog izdavali smo diplome i tečajeve. A 12 ih je dobilo diplome. Njih 6 već se obranilo na peticu. Oni koji su ostali još nisu imali zaštitu, ali mislim da će i njima biti sve u redu.

Planovi za budućnost

Kakve planove imamo za budućnost?

Barem one zahtjeve za značajkama koje smo već čuli od korisnika i koje želimo učiniti. Ovaj:

  • Praćenje ispravnosti praćenja vremenske linije u arhivi sigurnosne kopije HA klastera. To možete učiniti s WAL-G. I mislim da ćemo imati studente koji će se baviti ovom materijom.
  • Već imamo osobu odgovornu za prijenos sigurnosnih kopija i WAL-a između oblaka.
  • A nedavno smo objavili ideju da možemo dodatno ubrzati WAL-G raspakiranjem inkrementalnih sigurnosnih kopija bez ponovnog pisanja stranica i optimiziranjem arhiva koje tamo šaljemo.

Možete ih podijeliti ovdje

Čemu je služio ovaj izvještaj? Štoviše, sada, uz 4 osobe koje podržavaju ovaj projekt, imamo i dodatne ruke, kojih ima poprilično. Pogotovo ako im pišete u osobnoj poruci. A ako napravite sigurnosnu kopiju svojih podataka i učinite to koristeći WAL-G ili želite prijeći na WAL-G, tada možemo prilično lako udovoljiti vašim željama.

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

Ovo je QR kod i poveznica. Možete ih pregledati i napisati sve svoje želje. Na primjer, ne ispravljamo neki bug. Ili stvarno želite neku značajku, ali je iz nekog razloga još nema ni u jednoj sigurnosnoj kopiji, uključujući i našu. Svakako napišite o ovome.

WAL-G: nove značajke i širenje zajednice. Georgij Rylov

pitanja

Zdravo! Hvala na izvješću! Pitanje o WAL-G, ali ne o Postgresu. WAL-G sigurnosno kopira MySQL i poziva dodatnu sigurnosnu 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 ide s ovim?

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

Dobar dan Hvala na izvješću! Pitanje o potencijalnim novim značajkama. Jeste li spremni natjerati WAL-G da radi s trakama kako biste mogli sigurnosno kopirati na trake?

Sigurnosna kopija na traci za pohranu očito znači?

Da.

Tu je Andrej Borodin, koji na ovo pitanje može odgovoriti bolje 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. Budući da je prijenos iz oblaka u oblak generalizirana verzija prijenosa trake. Osim toga, imamo proširivu arhitekturu u smislu skladišta. Inače, mnoge Storoge napisali su studenti. A ako napišete Storage for tape, onda će to, naravno, biti podržano. Spremni smo razmotriti zahtjeve za povlačenjem. Tu trebate napisati datoteku, pročitati datoteku. Ako te stvari radite u Gou, obično završite s 50 redaka koda. A onda će traka biti podržana u WAL-G-u.

Hvala na izvješću! Zanimljiv razvojni proces. Backup je ozbiljna funkcionalnost koja bi trebala biti dobro pokrivena testovima. Kada ste implementirali funkcionalnost za nove baze podataka, jesu li studenti pisali i testove ili ste sami pisali testove pa implementaciju dali studentima?

Učenici su pisali i testove. Ali studenti su više pisali o značajkama kao što su nove baze podataka. Napisali su integracijske testove. I napisali su jedinične testove. Ako integracija prođe, znači trenutno, to je skripta koju izvršavate ručno ili imate cron da to radi npr. Odnosno, tamo je scenarij vrlo jasan.

Učenici nemaju puno iskustva. Oduzima li pregled puno vremena?

Da, pregledi oduzimaju dosta vremena. Odnosno, obično, kada dođe nekoliko komitera odjednom i kaže uradio sam ovo, napravio sam ono, onda treba razmisliti i izdvojiti oko pola dana da shvatite što su oni tamo napisali. Jer kod treba pažljivo čitati. Nisu imali intervju. Ne poznajemo ih dobro, pa je potrebno dosta vremena.

Hvala na izvješću! Prethodno je Andrey Borodin izjavio da bi se archive_command u WAL-G-u trebala pozvati izravno. Ali u slučaju neke vrste patrone klastera, potrebna nam je dodatna logika da odredimo čvor iz kojeg šaljemo osovine. Kako sami rješavate ovaj problem?

Koji je tvoj problem ovdje? Recimo da imate sinkronu repliku s kojom radite backup? Ili što?

(Andrey) Činjenica je da je WAL-G doista namijenjen za korištenje bez skripti ljuske. Ako nešto nedostaje, onda dodajmo logiku koja bi trebala biti unutar WAL-G-a. Što se tiče mjesta odakle treba doći arhiviranje, vjerujemo da bi arhiviranje trebalo biti od trenutnog glavnog u klasteru. Arhiviranje iz replike je loša ideja. Postoje različiti mogući scenariji problema. Konkretno, problemi s arhiviranjem rokova i svih dodatnih informacija. Hvala na pitanju!

(Pojašnjenje: riješili smo se shell skripti u ovom problemu)

Dobra večer! Hvala na izvješću! Zanima me značajka nadoknade o kojoj ste govorili. Suočili smo se sa situacijom u kojoj je replika zaostajala i nije je mogla sustići. I nisam našao opis ove značajke u WAL-G dokumentima.

Catchup se pojavio doslovno 20. siječnja 2020. Na dokumentaciji će možda trebati još posla. Pišemo ga sami i ne pišemo ga super. I možda bismo trebali početi zahtijevati od učenika da to napišu.

Je li već objavljeno?

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

Kada očekivati?

ne znam Pričekajte mjesec dana, provjerit ćemo sigurno.

Izvor: www.habr.com

Dodajte komentar