{"id":78887,"date":"2020-04-22T19:42:51","date_gmt":"2020-04-22T17:42:51","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/wal-g-novye-vozmozhnosti-i-rasshirenie-soobshhestva-georgij-rylov"},"modified":"2020-04-22T19:42:51","modified_gmt":"2020-04-22T17:42:51","slug":"wal-g-novye-vozmozhnosti-i-rasshirenie-soobshhestva-georgij-rylov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/wal-g-novye-vozmozhnosti-i-rasshirenie-soobshhestva-georgij-rylov","title":{"rendered":"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Zach\u0119cam do zapoznania si\u0119 z transkrypcj\u0105 raportu Georgija Rylowa z pocz\u0105tku 2020 roku pt. \"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci\"<\/strong><\/p>\n<p><\/p>\n<p>Liderzy projektu open-source napotykaj\u0105 na wiele problem\u00f3w w miar\u0119 jego rozwoju. Jak pisa\u0107 coraz wi\u0119cej wymaganych funkcji, naprawia\u0107 coraz wi\u0119cej problem\u00f3w i jednocze\u015bnie przegl\u0105da\u0107 coraz wi\u0119cej zg\u0142osze\u0144 pull request? Na przyk\u0142adzie WAL-G (narz\u0119dzie do tworzenia kopii zapasowych dla PostgreSQL) opowiem, jak rozwi\u0105zali\u015bmy te problemy, uruchamiaj\u0105c kurs dotycz\u0105cy rozwoju open-source na uniwersytecie, co osi\u0105gn\u0119li\u015bmy i dok\u0105d zamierzamy si\u0119 uda\u0107 dalej.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/c76e27949b782480284ab52791fdfe15.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Witam ponownie! Jestem programist\u0105 w Yandeksie z Jekaterynburga. Dzi\u015b opowiem o WAL-G.<\/p>\n<p><\/p>\n<p>W tytule wyk\u0142adu nie by\u0142o powiedziane, \u017ce chodzi o kopie zapasowe. Czy kto\u015b nie wie, co to jest WAL-G? Czy wszyscy wiedz\u0105? Prosz\u0119 podnie\u015b\u0107 r\u0119k\u0119, kto nie wie. Niesamowite, przyszed\u0142e\u015b na wyk\u0142ad i nie wiesz, o czym on jest.<\/p>\n<p><\/p>\n<p>Pozw\u00f3lcie, \u017ce opowiem, co dzi\u015b si\u0119 wydarzy. Tak si\u0119 z\u0142o\u017cy\u0142o, \u017ce nasza dru\u017cyna od d\u0142u\u017cszego czasu zajmuje si\u0119 tworzeniem kopii zapasowych. I to kolejny wyk\u0142ad w serii, w kt\u00f3rej opowiadamy o tym, jak przechowujemy dane w spos\u00f3b bezpieczny, niezawodny, wygodny i efektywny.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/4307e7b2acc60cd908d91e3f1b83a9b6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>W poprzednich seriach odby\u0142o si\u0119 wiele wyk\u0142ad\u00f3w Andrieja Borodina, W\u0142adimira Liskowa. Byli\u015bmy liczn\u0105 grup\u0105. I wszyscy opowiadali\u015bmy o WAL-G od wielu lat. <\/p>\n<p><\/p>\n<p>clck.ru\/F8ioz \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/moscow\/2018\/abstracts\/3964\">https:\/\/www.highload.ru\/moscow\/2018\/abstracts\/3964<\/a><\/noindex><\/p>\n<p><\/p>\n<p>clck.ru\/Ln8Qw \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/moscow\/2019\/abstracts\/5981\">https:\/\/www.highload.ru\/moscow\/2019\/abstracts\/5981<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Ten wyk\u0142ad b\u0119dzie nieco inny od pozosta\u0142ych, poniewa\u017c tamte by\u0142y g\u0142\u00f3wnie o cz\u0119\u015bci technicznej, a tutaj opowiem, jak zmierzyli\u015bmy si\u0119 z problemami zwi\u0105zanymi z rozwojem spo\u0142eczno\u015bci. I jak wymy\u015blili\u015bmy ma\u0142y pomys\u0142, kt\u00f3ry pomaga nam w tym radzi\u0107. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/ec728f7d99ea9b6a5df4785d7e8a2a75.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kilka lat temu WAL-G by\u0142 do\u015b\u0107 ma\u0142ym projektem, kt\u00f3ry otrzymali\u015bmy od Citus Data. I dopiero zaczynali\u015bmy nad nim pracowa\u0107. By\u0142 rozwijany przez jedn\u0105 osob\u0119.<\/p>\n<p><\/p>\n<p>I tylko w WAL-G nie by\u0142o:<\/p>\n<p><\/p>\n<ul>\n<li>Kopii zapasowej z repliki.<\/li>\n<li>Brakowa\u0142o kopii inkrementalnych.<\/li>\n<li>Nie by\u0142o kopii WAL-Delta. <\/li>\n<li>I jeszcze mn\u00f3stwo rzeczy nie by\u0142o.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Na przestrzeni tych kilku lat WAL-G znacznie uros\u0142o.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/16700dfcc2c54539c5a064894cd1ec88.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I do roku 2020 wszystko wymienione powy\u017cej ju\u017c si\u0119 pojawi\u0142o. A do tego dosz\u0142o jeszcze to, \u017ce teraz mamy:<\/p>\n<p><\/p>\n<ul>\n<li>Ponad 1000 gwiazdek na GitHubie.<\/li>\n<li>150 fork\u00f3w.<\/li>\n<li>Oko\u0142o 15 otwartych PR.<\/li>\n<li>I jeszcze wielu wsp\u00f3\u0142pracownik\u00f3w. <\/li>\n<li>I otwartych problem\u00f3w nieustannie. A to wszystko pomimo, \u017ce dos\u0142ownie codziennie wchodzimy tam, co\u015b z tym robimy. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/5e5dea14b328a7f0437017ca834d1eaf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I doszli\u015bmy do wniosku, \u017ce ten projekt wymaga wi\u0119cej naszej uwagi, nawet gdy sami nie potrzebujemy niczego wdra\u017ca\u0107 dla naszego serwisu Managed Databases w Yandeksie.<\/p>\n<p><\/p>\n<p>I gdzie\u015b jesieni\u0105 2018 roku wpadli\u015bmy na pomys\u0142. Zazwyczaj zesp\u00f3\u0142 ma kilka sposob\u00f3w na rozwijanie nowych funkcji lub naprawianie b\u0142\u0119d\u00f3w, gdy brakuje r\u0105k do pracy. Na przyk\u0142ad mo\u017cna zatrudni\u0107 dodatkowego programist\u0119 i mu zap\u0142aci\u0107. Albo mo\u017cna wzi\u0105\u0107 sta\u017cyst\u0119 na jaki\u015b czas i r\u00f3wnie\u017c mu p\u0142aci\u0107. Ale jest te\u017c ca\u0142kiem spora grupa os\u00f3b, z kt\u00f3rych cz\u0119\u015b\u0107 potrafi ju\u017c pisa\u0107 kod. Po prostu nie zawsze wiesz, jakiej jako\u015bci jest ten kod.<\/p>\n<p><\/p>\n<p>Pomy\u015bleli\u015bmy i postanowili\u015bmy spr\u00f3bowa\u0107 przyci\u0105gn\u0105\u0107 student\u00f3w. Ale studenci nie b\u0119d\u0105 uczestniczy\u0107 we wszystkim. B\u0119d\u0105 robi\u0107 tylko cz\u0119\u015b\u0107 pracy. Na przyk\u0142ad b\u0119d\u0105 pisa\u0107 testy, naprawia\u0107 b\u0142\u0119dy, realizowa\u0107 funkcje, kt\u00f3re nie wp\u0142ywaj\u0105 na podstawow\u0105 funkcjonalno\u015b\u0107. Podstawowa funkcjonalno\u015b\u0107 to tworzenie kopii zapasowych i ich przywracanie. Je\u015bli dojdzie do b\u0142\u0119du w tworzeniu kopii zapasowej, to stracimy dane. A nikt tego, oczywi\u015bcie, nie chce. Wszyscy chc\u0105, aby wszystko by\u0142o bardzo niezawodne. Dlatego kod, kt\u00f3remu ufamy mniej ni\u017c swojemu w\u0142asnemu, oczywi\u015bcie nie chcemy tam wpuszcza\u0107. To znaczy, jakikolwiek niekrytyczny kod \u2013 to, co chcieliby\u015bmy otrzyma\u0107 od naszych dodatkowych r\u0105k do pracy.<\/p>\n<p><\/p>\n<p><strong>W jakich warunkach przyjmowany jest PR studenta<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Maj\u0105 obowi\u0105zek pokrywa\u0107 sw\u00f3j kod testami. Wszystko musi przechodzi\u0107 w CI. <\/li>\n<li>I przechodzimy r\u00f3wnie\u017c przez 2 recenzje. Jedna od Andrieja Borodina i jedna moja. <\/li>\n<li>Dodatkowo, aby sprawdzi\u0107, \u017ce to nie zepsuje nic w naszym serwisie, osobno wrzucam sk\u0142adni\u0119 z tym commitem. I sprawdzamy w testach end-to-end, \u017ce nic nam si\u0119 nie psuje.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Specjalny kurs Open Source<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/58832406f3acdf294cd68e6adde14ec8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Chcia\u0142bym pokr\u00f3tce opisa\u0107, po co to potrzebne i dlaczego, moim zdaniem, to \u015bwietny pomys\u0142. <\/p>\n<p><\/p>\n<p><strong>Dla nas korzy\u015bci s\u0105 oczywiste:<\/strong> <\/p>\n<p><\/p>\n<ul>\n<li>Zyskujemy dodatkowe r\u0119ce. <\/li>\n<li>I poszukujemy kandydat\u00f3w do zespo\u0142u w\u015br\u00f3d zdolnych student\u00f3w, kt\u00f3rzy pisz\u0105 dobry kod. <\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Jaka jest korzy\u015b\u0107 dla student\u00f3w?<\/strong><\/p>\n<p><\/p>\n<p>Mo\u017ce by\u0107 mniej oczywista, poniewa\u017c studenci przynajmniej nie dostaj\u0105 pieni\u0119dzy za kod, kt\u00f3ry pisz\u0105, a jedynie oceny na zaliczeniu. <\/p>\n<p><\/p>\n<p>Zapyta\u0142em ich o to. I z ich s\u0142\u00f3w:<\/p>\n<p><\/p>\n<ul>\n<li>Do\u015bwiadczenie jako kontrybutor Open Source.<\/li>\n<li>Zdobycie wpisu w CV.<\/li>\n<li>Zaprezentowanie si\u0119 i przej\u015bcie rozmowy kwalifikacyjnej w Yandexie.<\/li>\n<li>Stanie si\u0119 uczestnikiem GSoC.<\/li>\n<li>+1 specjalny kurs dla tych, kt\u00f3rzy chc\u0105 pisa\u0107 kod.<\/li>\n<\/ul>\n<p><\/p>\n<p>Nie b\u0119d\u0119 opowiada\u0107 o tym, jak by\u0142 zorganizowany kurs. Powiem tylko, \u017ce WAL-G by\u0142 g\u0142\u00f3wnym projektem. Ponadto w ten kurs w\u0142\u0105czyli\u015bmy takie projekty jak Odyssey, PostgreSQL i ClickHouse.<\/p>\n<p><\/p>\n<p>Zadania by\u0142y nie tylko w tym kursie, ale tak\u017ce wydawali dyplomy i prace semestralne.<\/p>\n<p><\/p>\n<p><strong>A co z korzy\u015bciami dla u\u017cytkownik\u00f3w?<\/strong><\/p>\n<p><\/p>\n<p>Przejd\u017amy teraz do cz\u0119\u015bci, kt\u00f3ra najbardziej Was interesuje. Jaki z tego macie po\u017cytek? Po\u017cytek jest taki, \u017ce studenci naprawili wiele b\u0142\u0119d\u00f3w. I zrealizowali pro\u015bby dotycz\u0105ce funkcji, kt\u00f3re prosili\u015bcie nas o wdro\u017cenie. <\/p>\n<p><\/p>\n<p>Pozw\u00f3lcie, \u017ce opowiem o rzeczach, kt\u00f3re d\u0142ugo chcieli\u015bcie mie\u0107, a kt\u00f3re zosta\u0142y zrealizowane.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/bb836742bf4f99e1b91c891ed1802bf0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wsparcie dla tablespaces. Tablespaces w WAL-G by\u0142y oczekiwane prawdopodobnie od momentu wydania WAL-G, poniewa\u017c WAL-G jest nast\u0119pc\u0105 innego narz\u0119dzia do tworzenia kopii zapasowych WAL-E, kt\u00f3re obs\u0142ugiwa\u0142o kopie zapasowe baz danych z tablespaces.<\/p>\n<p><\/p>\n<p>Przypomn\u0119 kr\u00f3tko, czym to jest i dlaczego jest to potrzebne. Zazwyczaj wszystkie dane Postgres zajmuj\u0105 jeden katalog w systemie plik\u00f3w, kt\u00f3ry nazywamy katalogiem bazowym. Ten katalog ju\u017c zawiera wszystkie pliki i podkatalogi potrzebne dla Postgres.<\/p>\n<p><\/p>\n<p>Tablespaces to katalogi, w kt\u00f3rych znajduj\u0105 si\u0119 dane Postgres, ale nie le\u017c\u0105 one poza katalogiem bazowym. Na slajdzie wida\u0107, \u017ce tablespaces znajduj\u0105 si\u0119 poza katalogiem bazowym.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/0f25591cfcaaeaec02903c9b98d8ac65.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jak to wygl\u0105da dla samego Postgresa? W katalogu bazowym znajduje si\u0119 osobny podkatalog pg_tblspc. W nim s\u0105 symlinkami wskazuj\u0105cymi na katalogi, w kt\u00f3rych faktycznie znajduj\u0105 si\u0119 dane Postgres poza katalogiem bazowym.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/9e9875696c03e6e42bb98b5a7a9acd75.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kiedy z tego korzystacie, te komendy mog\u0105 wygl\u0105da\u0107 tak. Tzn. tworzycie tabel\u0119 w okre\u015blonym tablespace i sprawdzacie, gdzie ona si\u0119 teraz znajduje. Oto te dwie ostatnie linie, dwie ostatnio wywo\u0142ane komendy. Wida\u0107, \u017ce jest jaki\u015b \u015bcie\u017cka. Ale tak naprawd\u0119 - to nie jest prawdziwa \u015bcie\u017cka. To jest \u015bcie\u017cka z prefiksem katalogu bazowego do tablespace. I sk\u0105d\u015b jest to powi\u0105zane symlinkiem, kt\u00f3ry prowadzi do Waszych rzeczywistych danych.<\/p>\n<p><\/p>\n<p>Nie wykorzystujemy tego w naszym zespole, ale to by\u0142o u\u017cywane przez wielu innych u\u017cytkownik\u00f3w WAL-E, kt\u00f3rzy pisali do nas, \u017ce chc\u0105 przenie\u015b\u0107 si\u0119 na WAL-G, ale to im przeszkadza\u0142o. Teraz to jest wspierane.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/95ec319ccefa7e6c8bce193317407229.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Inna funkcja, kt\u00f3r\u0105 przyni\u00f3s\u0142 nam nasz kurs specjalistyczny, to catchup. O catchup wiedz\u0105 ludzie, kt\u00f3rzy prawdopodobnie bardziej pracowali z Oracle ni\u017c z Postgres.<\/p>\n<p><\/p>\n<p>Kr\u00f3tko o tym, czym to jest. Tak mo\u017ce wygl\u0105da\u0107 topologia klastra w naszym serwisie. Mamy mastera. Jest replikacja, kt\u00f3ra streamuje z niego dziennik zapis\u00f3w. I replikacja informuje mastera, na kt\u00f3rym LSN si\u0119 aktualnie znajduje. R\u00f3wnolegle mo\u017ce odbywa\u0107 si\u0119 archiwizacja dziennika. Opr\u00f3cz archiwizacji, w chmurze przesy\u0142ane s\u0105 r\u00f3wnie\u017c kopie zapasowe. I wysy\u0142ane s\u0105 kopie r\u00f3\u017cnicowe.<\/p>\n<p><\/p>\n<p>Jaki mo\u017ce by\u0107 problem? Kiedy macie do\u015b\u0107 du\u017c\u0105 baz\u0119 danych, mo\u017ce okaza\u0107 si\u0119, \u017ce replikacja zaczyna znacznie odstawa\u0107 od mastera. I odstawienie jest tak du\u017ce, \u017ce ju\u017c nigdy nie mo\u017ce go dogoni\u0107. Zazwyczaj ten problem trzeba jako\u015b rozwi\u0105za\u0107. <\/p>\n<p><\/p>\n<p>Najprostszym sposobem jest usuni\u0119cie replikacji i ponowne jej w\u0142\u0105czenie, poniewa\u017c nigdy nie dogoni mastera, a trzeba zaj\u0105\u0107 si\u0119 problemem. Ale to do\u015b\u0107 czasoch\u0142onne, poniewa\u017c przywracanie ca\u0142ej kopii zapasowej bazy o pojemno\u015bci 10 TB zajmuje naprawd\u0119 du\u017co czasu. Chcemy to zrealizowa\u0107 jak najszybciej, gdy pojawi\u0105 si\u0119 takie problemy. I w\u0142a\u015bnie do tego s\u0142u\u017cy catchup.<\/p>\n<p><\/p>\n<p>Catchup pozwala wykorzysta\u0107 kopie r\u00f3\u017cnicowe, kt\u00f3re s\u0105 przechowywane w chmurze. M\u00f3wisz, na kt\u00f3rym LSN jest aktualnie odstaj\u0105ca replikacja i podajesz go w poleceniu catchup, aby utworzy\u0107 kopi\u0119 r\u00f3\u017cnicow\u0105 mi\u0119dzy tym LSN a LSN, na kt\u00f3rym znajduje si\u0119 Tw\u00f3j klaster. Po tym przywracasz t\u0119 kopi\u0119 zapasow\u0105 na replikacj\u0119, kt\u00f3ra odstawa\u0142a.<\/p>\n<p><\/p>\n<p><strong>Inne bazy<\/strong><\/p>\n<p><\/p>\n<p>Studenci dostarczyli nam tak\u017ce wiele funkcji. Poniewa\u017c w Yandex zajmujemy si\u0119 nie tylko Postgres, mamy tak\u017ce MySQL, MongoDB, Redis, ClickHouse, w pewnym momencie potrzebowali\u015bmy, aby\u015bmy mogli robi\u0107 kopie zapasowe z mo\u017cliwo\u015bci\u0105 odzyskiwania danych w dowolnym punkcie czasu dla MySQL i aby by\u0142a mo\u017cliwo\u015b\u0107 przes\u0142ania ich do chmury.<\/p>\n<p><\/p>\n<p>Chcieli\u015bmy to robi\u0107 w spos\u00f3b podobny do tego, kt\u00f3ry oferuje WAL-G. Postanowili\u015bmy przeprowadzi\u0107 eksperymenty i zobaczy\u0107, jak to wszystko b\u0119dzie wygl\u0105da\u0107.<\/p>\n<p><\/p>\n<p>Na pocz\u0105tku, nie rozdzielaj\u0105c tej logiki w forku, napisali\u015bmy kod. Zobaczyli\u015bmy, \u017ce mamy jak\u0105\u015b dzia\u0142aj\u0105c\u0105 model\u0119 i to mo\u017ce zadzia\u0142a\u0107. Potem pomy\u015bleli\u015bmy, \u017ce nasz\u0105 g\u0142\u00f3wn\u0105 spo\u0142eczno\u015bci\u0105 s\u0105 postgresowcy, kt\u00f3rzy u\u017cywaj\u0105 WAL-G. Dlatego trzeba jako\u015b podzieli\u0107 te cz\u0119\u015bci. To znaczy, gdy poprawiamy kod dla Postgresa, nie \u0142amiemy MySQL, a gdy poprawiamy MySQL, nie \u0142amiemy Postgresa.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/deef7615eaeb0b8bd790fb253cc42312.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pierwszym pomys\u0142em na to, jak to podzieli\u0107, by\u0142o zastosowanie tego samego podej\u015bcia, kt\u00f3re jest wykorzystywane w rozszerzeniach PostgreSQL. W rzeczywisto\u015bci, aby zrobi\u0107 kopi\u0119 zapasow\u0105 MySQL, musisz zainstalowa\u0107 jak\u0105\u015b dynamiczn\u0105 bibliotek\u0119. <\/p>\n<p><\/p>\n<p>Jednak od razu wida\u0107 asymetri\u0119 tego podej\u015bcia. Kiedy robisz kopi\u0119 zapasow\u0105 Postgresa, instalujesz normalne narz\u0119dzie do tworzenia kopii zapasowych dla Postgresa i wszystko dzia\u0142a \u015bwietnie. A w przypadku MySQL okazuje si\u0119, \u017ce instalujesz narz\u0119dzie do robienia kopii zapasowych dla Postgresa, a dodatkowo musisz zainstalowa\u0107 dynamiczn\u0105 bibliotek\u0119 dla MySQL. To brzmi troch\u0119 dziwnie. My te\u017c tak pomy\u015bleli\u015bmy i postanowili\u015bmy, \u017ce to nie jest rozwi\u0105zanie, kt\u00f3rego szukamy. <\/p>\n<p><\/p>\n<p><strong>R\u00f3\u017cne zbiory dla Postgresa, MySQL, MongoDB, Redis<\/strong><\/p>\n<p><\/p>\n<p>Ale to pozwoli\u0142o nam, jak s\u0105dzimy, znale\u017a\u0107 w\u0142a\u015bciwe rozwi\u0105zanie \u2013 wydzieli\u0107 r\u00f3\u017cne zbiory dla r\u00f3\u017cnych baz. To umo\u017cliwi\u0142o izolacj\u0119 logiki zwi\u0105zanej z kopiami zapasowymi r\u00f3\u017cnych baz danych, kt\u00f3re b\u0119d\u0105 korzysta\u0107 ze wsp\u00f3lnego API, kt\u00f3re realizuje WAL-G.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/6c810d5f065de06fc200bdd028707318.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To jest ta cz\u0119\u015b\u0107, kt\u00f3r\u0105 napisali\u015bmy sami \u2013 zanim dali\u015bmy studentom zadania. To znaczy, to jest dok\u0142adnie ta cz\u0119\u015b\u0107, gdzie mogli zrobi\u0107 co\u015b nie tak, wi\u0119c postanowili\u015bmy, \u017ce lepiej b\u0119dzie, je\u015bli zrobimy to sami, a wszystko b\u0119dzie w porz\u0105dku. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/3a864a85bfb820ef64cbacc029a9198c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Po tym wystawili\u015bmy zadania. Od razu zosta\u0142y podj\u0119te. Od student\u00f3w wymagano wsparcia trzech baz. <\/p>\n<p><\/p>\n<p>To MySQL, kt\u00f3re robimy kopi\u0119 zapasow\u0105 przy u\u017cyciu WAL-G w ten spos\u00f3b ju\u017c od ponad roku. <\/p>\n<p><\/p>\n<p>A teraz MongoDB zbli\u017ca si\u0119 do produkcji, jest tam dopracowywane. W zasadzie to my napisali\u015bmy szkielet dla tego wszystkiego. Potem studenci stworzyli jakie\u015b dzia\u0142aj\u0105ce rzeczy. A my je doprowadzamy do takiego stanu, kt\u00f3ry mo\u017cemy przyj\u0105\u0107 w naszej produkcji.<\/p>\n<p><\/p>\n<p>Te zadania nie wygl\u0105da\u0142y tak, \u017ce studenci musieli napisa\u0107 pe\u0142ne narz\u0119dzia do tworzenia kopii zapasowych dla ka\u017cdej z tych baz. Nie mieli\u015bmy takiego problemu. Naszym problemem by\u0142o to, \u017ce chcieli\u015bmy odzyskiwania w punkcie w czasie i chcieli\u015bmy robi\u0107 kopie zapasowe do chmury. Poprosili\u015bmy student\u00f3w o napisanie jakiego\u015b kodu, kt\u00f3ry to rozwi\u0105\u017ce. Studenci skorzystali z ju\u017c istniej\u0105cych narz\u0119dzi do tworzenia kopii zapasowych, kt\u00f3re w jaki\u015b spos\u00f3b robi\u0142y kopie zapasowe, a potem \u0142\u0105czyli to wszystko z WAL-G, kt\u00f3ry przesy\u0142a\u0142 to do chmury. A tak\u017ce dodawali do tego odzyskiwanie w punkcie w czasie.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/7494aef259c7599e8bf0b70d77e1bb09.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Co jeszcze przynie\u015bli studenci? Wnie\u015bli do WAL-G wsparcie szyfrowania Libsodium.<\/p>\n<p><\/p>\n<p>Ponadto pojawi\u0142y si\u0119 polityki przechowywania kopii zapasowych. Teraz kopie zapasowe mo\u017cna oznacza\u0107 jako permanentne. I w jaki\u015b spos\u00f3b wygodniej dla twojej us\u0142ugi automatyzowa\u0107 proces ich przechowywania. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/6e932ab13dbc3119f7f1da1122443b10.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Co wysz\u0142o w wyniku tego eksperymentu?<\/p>\n<p><\/p>\n<p>Na kurs pierwotnie zarejestrowa\u0142o si\u0119 ponad 100 os\u00f3b. Na pocz\u0105tku nie powiedzia\u0142em, \u017ce uniwersytet w Jekaterynburgu to Ural Federalny Uniwersytet. Tam wszystko og\u0142osili\u015bmy. 100 os\u00f3b si\u0119 zarejestrowa\u0142o. Rzeczywi\u015bcie co\u015b zacz\u0119\u0142o robi\u0107 znacznie mniej, oko\u0142o 30 os\u00f3b. <\/p>\n<p><\/p>\n<p>Jeszcze mniej os\u00f3b uko\u0144czy\u0142o kurs, poniewa\u017c trzeba by\u0142o napisa\u0107 testy do istniej\u0105cego kodu oraz naprawi\u0107 jaki\u015b b\u0142\u0105d lub stworzy\u0107 jak\u0105\u015b funkcj\u0119. I cz\u0119\u015b\u0107 student\u00f3w mimo wszystko uko\u0144czy\u0142a kurs.<\/p>\n<p><\/p>\n<p>Na ten moment studenci naprawili oko\u0142o 14 problem\u00f3w, zrealizowali 10 funkcji r\u00f3\u017cnej wielko\u015bci. I, jak mi si\u0119 wydaje, to pe\u0142noprawna wymiana jednego lub dw\u00f3ch programist\u00f3w. <\/p>\n<p><\/p>\n<p>Opr\u00f3cz tego wydawali\u015bmy dyplomy i prace kursowe. 12 os\u00f3b otrzyma\u0142o dyplomy. 6 z nich zda\u0142o ju\u017c obron\u0119 na \"5\". Pozostali jeszcze nie obronili, ale my\u015bl\u0119, \u017ce i im p\u00f3jdzie dobrze. <\/p>\n<p><\/p>\n<p>Plany na przysz\u0142o\u015b\u0107<\/p>\n<p><\/p>\n<p>Jakie mamy plany na przysz\u0142o\u015b\u0107?<\/p>\n<p><\/p>\n<p>Przynajmniej te pro\u015bby o funkcje, kt\u00f3re ju\u017c s\u0142yszeli\u015bmy od u\u017cytkownik\u00f3w i chcemy je zrealizowa\u0107. To:<\/p>\n<p><\/p>\n<ul>\n<li>\u015aledzenie poprawno\u015bci \u015bledzenia osi czasu w archiwum kopii zapasowych klastra HA. Mo\u017cna to zrobi\u0107 za pomoc\u0105 WAL-G. I my\u015bl\u0119, \u017ce znajd\u0105 si\u0119 studenci, kt\u00f3rzy si\u0119 tym zajm\u0105. <\/li>\n<li>Ju\u017c mamy odpowiedzialn\u0105 osob\u0119 za przenoszenie kopii zapasowych i WAL-a mi\u0119dzy chmurami. <\/li>\n<li>Niedawno opublikowali\u015bmy pomys\u0142, \u017ce mo\u017cemy jeszcze bardziej przyspieszy\u0107 WAL-G za pomoc\u0105 dekompresji przyrostowych kopii zapasowych bez nadpisywania stron i optymalizacji archiw\u00f3w, kt\u00f3re tam wysy\u0142amy. <\/li>\n<\/ul>\n<p><\/p>\n<p>Mo\u017cecie si\u0119 nimi podzieli\u0107 tutaj<\/p>\n<p><\/p>\n<p>Po co by\u0142o to wyst\u0105pienie? Chodzi\u0142o o to, \u017ce obecnie, opr\u00f3cz nas czterech os\u00f3b, kt\u00f3re wspieraj\u0105 ten projekt, mamy dodatkowe r\u0119ce, kt\u00f3rych jest do\u015b\u0107 du\u017co. Szczeg\u00f3lnie, je\u015bli napiszecie im na prywatn\u0105 wiadomo\u015b\u0107. I je\u015bli tworzycie kopie zapasowe swoich danych i robicie to za pomoc\u0105 WAL-G lub chcieliby\u015bcie przej\u015b\u0107 na WAL-G, to wasze \u017cyczenia mo\u017cemy do\u015b\u0107 \u0142atwo uwzgl\u0119dni\u0107.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/7b0dc1633121ea6493610b08f68a14d2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To jest kod QR i link. Mo\u017cecie po nich przej\u015b\u0107 i napisa\u0107 wszystkie swoje sugestie. Na przyk\u0142ad, je\u015bli nie naprawiamy jakiego\u015b b\u0142\u0119du, lub jak\u0105\u015b funkcj\u0119 bardzo chcecie, ale z jakiego\u015b powodu nie ma jej jeszcze w \u017cadnej us\u0142udze backupowej, w tym tak\u017ce w naszej. Koniecznie o tym napiszcie.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow\" src=\"\/wp-content\/uploads\/2020\/04\/56f1c4eef8522d2d6628ea98b1278846.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pytania<\/p>\n<p><\/p>\n<p><em>Witaj! Dzi\u0119kuj\u0119 za prezentacj\u0119! Mam pytanie dotycz\u0105ce WAL-G, ale nie w kontek\u015bcie Postgresa. WAL-G wykonuje kopie zapasowe MySQL i inicjuje dodatkow\u0105 kopi\u0119 zapasow\u0105. Je\u015bli we\u017amiemy pod uwag\u0119 nowoczesne instalacje na CentOS i je\u015bli zainstalujesz MySQL za pomoc\u0105 polecenia yum install, to zainstalujesz MariDB. Od wersji 10.3 dodatkowa kopia zapasowa nie jest wspierana, wspierana jest kopia zapasowa MariDB. Jak sobie z tym radzicie?<\/em><\/p>\n<p><\/p>\n<p>Na chwil\u0119 obecn\u0105 nie pr\u00f3bowali\u015bmy robi\u0107 kopii zapasowych MariDB. Mieli\u015bmy zapytania o wsparcie dla FoundationDB, ale og\u00f3lnie rzecz bior\u0105c, je\u015bli jest takie zapytanie, to mo\u017cemy znale\u017a\u0107 ludzi, kt\u00f3rzy si\u0119 tym zajm\u0105. To nie zajmuje tak du\u017co czasu i nie jest tak trudne, jak mi si\u0119 wydaje.<\/p>\n<p><\/p>\n<p><em>Dzie\u0144 dobry! Dzi\u0119kuj\u0119 za prezentacj\u0119! Pytanie dotycz\u0105ce potencjalnie nowych funkcji. Czy jeste\u015bcie gotowi, aby uruchomi\u0107 WAL-G z ta\u015bmami, aby mo\u017cna by\u0142o robi\u0107 kopie zapasowe na ta\u015bmy?<\/em><\/p>\n<p><\/p>\n<p>Chodzi o kopi\u0119 zapasow\u0105 w magazynie ta\u015bmowym, prawda?<\/p>\n<p><\/p>\n<p><em>Tak.<\/em><\/p>\n<p><\/p>\n<p>Jest tam Andriej Borodin, kt\u00f3ry mo\u017ce lepiej odpowiedzie\u0107 na to pytanie. <\/p>\n<p><\/p>\n<p>(Andriej) Tak, dzi\u0119kuj\u0119 za pytanie! Mieli\u015bmy zapytanie o przeniesienie kopii zapasowej z chmury na ta\u015bm\u0119. I dla tego <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wal-g\/wal-g\/pull\/596\">trwa praca nad<\/a><\/noindex> przeniesieniem mi\u0119dzy chmurami. Poniewa\u017c przeniesienie mi\u0119dzy chmurami to pewnego rodzaju zgeneralizowana wersja przeniesienia na ta\u015bm\u0119. Ponadto mamy rozszerzaln\u0105 architektur\u0119 w zakresie magazyn\u00f3w. A tak przy okazji, wiele magazyn\u00f3w zosta\u0142o stworzonych przez student\u00f3w. I je\u015bli napiszesz magazyn dla ta\u015bmy, to na pewno b\u0119dzie wspierany. Jeste\u015bmy gotowi rozpatrzy\u0107 pull request. Trzeba napisa\u0107 plik, przeczyta\u0107 plik. Je\u015bli te rzeczy zrobi si\u0119 w Go, to zazwyczaj zajmuje to 50 linii kodu. Wtedy w WAL-G b\u0119dzie obs\u0142ugiwany nap\u0119d ta\u015bmowy. <\/p>\n<p><\/p>\n<p><em>Dzi\u0119kuj\u0119 za prezentacj\u0119! Interesuj\u0105cy proces rozwoju. Kopia zapasowa to powa\u017cna cz\u0119\u015b\u0107 funkcjonalno\u015bci, kt\u00f3ra powinna by\u0107 solidnie testowana. Kiedy implementowali\u015bcie funkcjonalno\u015b\u0107 dla nowych baz danych, testy r\u00f3wnie\u017c pisali studenci, czy sami napisali\u015bcie testy, a potem przekazali\u015bcie realizacj\u0119 studentom?<\/em><\/p>\n<p><\/p>\n<p>Testy r\u00f3wnie\u017c pisali studenci. Ale studenci pisali g\u0142\u00f3wnie dla takich funkcji, jak nowe bazy. Pisywali testy integracyjne. I pisali testy jednostkowe. Je\u015bli testy integracyjne przechodz\u0105, to znaczy, \u017ce w tej chwili \u2013 to scenariusz, kt\u00f3ry wykonujecie r\u0119cznie, albo robi to za Was np. cron. To znaczy, \u017ce scenariusz jest bardzo zrozumia\u0142y. <\/p>\n<p><\/p>\n<p><em>Studenci nie maj\u0105 zbyt du\u017cego do\u015bwiadczenia. Ile czasu zajmuje przegl\u0105danie?<\/em><\/p>\n<p><\/p>\n<p>Tak, recenzja zajmuje do\u015b\u0107 du\u017co czasu. Tzn. zwykle, kiedy przychodzi kilku commituj\u0105cych i m\u00f3wi\u0105, \u017ce zrobi\u0142em to, zrobi\u0142em tamto, musz\u0119 pomy\u015ble\u0107 i przeznaczy\u0107 gdzie\u015b p\u00f3\u0142 dnia na zrozumienie tego, co tam napisali. Trzeba dok\u0142adnie czyta\u0107 kod. Oni nie przechodzili rozmowy kwalifikacyjnej. Nie znamy ich zbyt dobrze, wi\u0119c to zajmuje znaczn\u0105 ilo\u015b\u0107 czasu.<\/p>\n<p><\/p>\n<p><em>Dzi\u0119kuj\u0119 za referat! Wcze\u015bniej Andriej Borodin m\u00f3wi\u0142, \u017ce archive_command w WAL-G powinien by\u0107 wywo\u0142ywany bezpo\u015brednio. Ale w przypadku jakiego\u015b klastra patrona, potrzebujemy dodatkowej logiki do okre\u015blenia w\u0119z\u0142a, z kt\u00f3rego nale\u017cy wysy\u0142a\u0107 WAL-e. Jak wy rozwi\u0105zujecie ten problem?<\/em><\/p>\n<p><\/p>\n<p>W czym macie tutaj problem? Za\u0142\u00f3\u017cmy, \u017ce macie synchronizowan\u0105 replik\u0119, z kt\u00f3rej robicie kopi\u0119 zapasow\u0105? Czy co\u015b innego?<\/p>\n<p><\/p>\n<p>(Andriej) Rzecz w tym, \u017ce rzeczywi\u015bcie WAL-G zak\u0142ada u\u017cycie bez otaczaj\u0105cych go skrypt\u00f3w pow\u0142oki. Je\u015bli czego\u015b brakuje, to dodajmy logik\u0119, kt\u00f3ra powinna by\u0107 wewn\u0105trz WAL-G. Je\u015bli chodzi o archiwizacj\u0119, uwa\u017camy, \u017ce powinna by\u0107 z aktualnego mastera w klastrze. Archiwizacja z repliki to z\u0142y pomys\u0142. Mog\u0105 wyst\u0119powa\u0107 r\u00f3\u017cne scenariusze z problemami. W szczeg\u00f3lno\u015bci problemy z archiwizacj\u0105 linii czasowych i dodatkowych informacji. Dzi\u0119kuj\u0119 za pytanie!<\/p>\n<p><\/p>\n<p>(Uaktualnienie: Zrezygnowali\u015bmy z otoczek skrypt\u00f3w pow\u0142oki) <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wal-g\/wal-g\/issues\/549\">w tym problemie<\/a><\/noindex>)<\/p>\n<p><\/p>\n<p><em>Dobry wiecz\u00f3r! Dzi\u0119kuj\u0119 za referat! Zainteresowa\u0142a mnie funkcja catchup, o kt\u00f3rej opowiada\u0142e\u015b. Mieli\u015bmy sytuacj\u0119, w kt\u00f3rej replikacja op\u00f3\u017ania\u0142a si\u0119 i nie mog\u0142a nad\u0105\u017cy\u0107. A w dokumentach WAL-G nie znalaz\u0142em opisu tej funkcji.<\/em><\/p>\n<p><\/p>\n<p>Catchup pojawi\u0142 si\u0119 dos\u0142ownie w okolicach 20 stycznia 2020 roku. Mo\u017ce warto lepiej popracowa\u0107 nad dokumentacj\u0105. Sami j\u0105 piszemy i nie robimy tego idealnie. Mo\u017ce warto zacz\u0105\u0107 wymaga\u0107 od student\u00f3w, aby r\u00f3wnie\u017c j\u0105 pisali.<\/p>\n<p><\/p>\n<p><em>Czy to ju\u017c w wydaniu?<\/em><\/p>\n<p><\/p>\n<p>Pull request zosta\u0142 ju\u017c po\u0142\u0105czony, tzn. sprawdzi\u0142em to. Pr\u00f3bowa\u0142em to na testowym klastrze. Na razie nie mieli\u015bmy sytuacji, w kt\u00f3rej mogliby\u015bmy to sprawdzi\u0107 na faktycznym przyk\u0142adzie.<\/p>\n<p><\/p>\n<p><em>Kiedy mo\u017cna si\u0119 tego spodziewa\u0107?<\/em><\/p>\n<p><\/p>\n<p>Nie wiem. Poczekajcie miesi\u0105c, wtedy na pewno to sprawdzimy.<\/p>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/498428\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 2020 \u0433\u043e\u0434\u0430 \u0413\u0435\u043e\u0440\u0433\u0438\u044f \u0420\u044b\u043b\u043e\u0432\u0430 &quot;WAL-G: \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430&quot; \u0423 \u043c\u0435\u0438\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 open-source \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u043e \u043c\u0435\u0440\u0435 \u0438\u0445 \u0440\u043e\u0441\u0442\u0430. \u041a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u0444\u0438\u0447, \u0447\u0438\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 issues&#8217;\u043e\u0432 \u0438 \u0443\u0441\u043f\u0435\u0432\u0430\u0442\u044c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 pull request&#8217;\u043e\u0432? \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 WAL-G(backup-tool for PostgreSQL) \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0442\u043e, \u043a\u0430\u043a \u043c\u044b \u0440\u0435\u0448\u0430\u043b\u0438 \u044d\u0442\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":78888,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-78887","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 2020 \u0433\u043e\u0434\u0430 \u0413\u0435\u043e\u0440\u0433\u0438\u044f \u0420\u044b\u043b\u043e\u0432\u0430 &quot;WAL-G: \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430&quot; \u0423 \u043c\u0435\u0438\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 open-source \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u043e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/wal-g-novye-vozmozhnosti-i-rasshirenie-soobshhestva-georgij-rylov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47WAL-G: \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430. \u0413\u0435\u043e\u0440\u0433\u0438\u0439 \u0420\u044b\u043b\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 2020 \u0433\u043e\u0434\u0430 \u0413\u0435\u043e\u0440\u0433\u0438\u044f \u0420\u044b\u043b\u043e\u0432\u0430 &quot;WAL-G: \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430&quot; \u0423 \u043c\u0435\u0438\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 open-source \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/wal-g-novye-vozmozhnosti-i-rasshirenie-soobshhestva-georgij-rylov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-22T17:42:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-22T17:42:51+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci. Georgij Rylow | ProHoster","description":"Proponuj\u0119 zapozna\u0107 si\u0119 z transkrypcj\u0105 referatu z pocz\u0105tku 2020 roku Georgija Rylowa \"WAL-G: nowe mo\u017cliwo\u015bci i rozw\u00f3j spo\u0142eczno\u015bci\". U maintainer\u00f3w open-source pojawia si\u0119 wiele problem\u00f3w.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/wal-g-novye-vozmozhnosti-i-rasshirenie-soobshhestva-georgij-rylov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47WAL-G: \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430. \u0413\u0435\u043e\u0440\u0433\u0438\u0439 \u0420\u044b\u043b\u043e\u0432 | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 2020 \u0433\u043e\u0434\u0430 \u0413\u0435\u043e\u0440\u0433\u0438\u044f \u0420\u044b\u043b\u043e\u0432\u0430 &quot;WAL-G: \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430&quot; \u0423 \u043c\u0435\u0438\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 open-source \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u043e.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/wal-g-novye-vozmozhnosti-i-rasshirenie-soobshhestva-georgij-rylov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-22T17:42:51+00:00","article:modified_time":"2020-04-22T17:42:51+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"78887","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:49:45","updated":"2022-09-29 18:48:15","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/78887","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=78887"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/78887\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/78888"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=78887"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=78887"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=78887"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}