{"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\/da\/blog\/administrirovanie\/wal-g-novye-vozmozhnosti-i-rasshirenie-soobshhestva-georgij-rylov","title":{"rendered":"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Jeg vil gerne pr\u00e6sentere en gennemgang af Georgy Rylovs foredrag fra begyndelsen af 2020, \"WAL-G: nye muligheder og udvidelse af f\u00e6llesskabet\".<\/strong><\/p>\n<p><\/p>\n<p>Open-source vedligeholdere st\u00e5r over for mange udfordringer i takt med deres v\u00e6kst. Hvordan skriver man flere n\u00f8dvendige funktioner, l\u00f8ser flere issues og f\u00e5r tid til at gennemg\u00e5 flere pull requests? Med udgangspunkt i WAL-G (backup-v\u00e6rkt\u00f8j til PostgreSQL) vil jeg fort\u00e6lle om, hvordan vi l\u00f8ste disse udfordringer ved at starte et kursus i Open-source udvikling p\u00e5 universitetet, hvad vi opn\u00e5ede, og hvilken retning vi vil bev\u00e6ge os i fremadrettet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" 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>Hej igen! Jeg er udvikler hos Yandex fra Ekaterinburg. Og i dag vil jeg tale om WAL-G.<\/p>\n<p><\/p>\n<p>I titlen p\u00e5 foredraget blev der ikke n\u00e6vnt, at det handler om backups. Er der nogen, der ikke ved, hvad WAL-G er? Eller kender alle til det? R\u00e6k h\u00e5nden op, hvis du ikke ved det. Det er imponerende, at du kom til foredraget og ikke ved, hvad det handler om.<\/p>\n<p><\/p>\n<p>Lad mig fort\u00e6lle, hvad dagens program er. Det viste sig, at vores team har arbejdet med backup i ganske lang tid. Og dette er endnu et foredrag i en serie, hvor vi fort\u00e6ller om, hvordan vi opbevarer data sikkert, p\u00e5lideligt, bekvemt og effektivt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/4307e7b2acc60cd908d91e3f1b83a9b6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I de tidligere sessioner har der v\u00e6ret mange foredrag af Andrey Borodin, Vladimir Leskov. Vi har v\u00e6ret mange, og vi har alle talt om WAL-G i flere \u00e5r. <\/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>Dette foredrag vil adskille sig en smule fra de andre, da det her i h\u00f8jere grad drejer sig om de tekniske aspekter, mens jeg her vil tale om, hvordan vi har st\u00e5et over for de udfordringer, der f\u00f8lger med v\u00e6ksten i f\u00e6llesskabet. Og hvordan vi kom op med en lille id\u00e9, der hj\u00e6lper os med at h\u00e5ndtere det. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/ec728f7d99ea9b6a5df4785d7e8a2a75.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>For flere \u00e5r siden var WAL-G et ret lille projekt, som vi arvede fra Citus Data. Og vi fik det kun, da det blev udviklet af \u00e9n person.<\/p>\n<p><\/p>\n<p>Og hvad der manglede i WAL-G:<\/p>\n<p><\/p>\n<ul>\n<li>Backup fra replikat.<\/li>\n<li>Der var ingen inkrementelle backups.<\/li>\n<li>Der var ingen WAL-Delta backups. <\/li>\n<li>Og endnu mere, der manglede.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>I l\u00f8bet af de sidste par \u00e5r er WAL-G vokset betydeligt.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/16700dfcc2c54539c5a064894cd1ec88.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og inden 2020 var alt det ovenn\u00e6vnte allerede tilf\u00f8jet. Og desuden har vi nu:<\/p>\n<p><\/p>\n<ul>\n<li>Over 1.000 stjerner p\u00e5 GitHub.<\/li>\n<li>150 forks.<\/li>\n<li>Omkring 15 \u00e5bne PR.<\/li>\n<li>Og mange bidragydere. <\/li>\n<li>Og konstant \u00e5bne issues. Og det er p\u00e5 trods af, at vi bogstaveligt talt logger ind hver dag for at arbejde p\u00e5 det. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/5e5dea14b328a7f0437017ca834d1eaf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og vi er kommet frem til, at dette projekt kr\u00e6ver mere af vores opm\u00e6rksomhed, selv n\u00e5r vi ikke selv skal implementere noget for vores Managed Databases service i Yandex.<\/p>\n<p><\/p>\n<p>Og et sted i efter\u00e5ret 2018 fik vi ideen. Normalt har et team flere m\u00e5der at finde ud af, hvordan man udvikler nye funktioner eller fixer bugs, hvis der ikke er nok h\u00e6nder. For eksempel kan man ans\u00e6tte en ekstra udvikler og betale ham l\u00f8n. Eller man kan tage en praktikant i en periode og ogs\u00e5 betale ham en form for l\u00f8n. Men der er ogs\u00e5 en ret stor gruppe mennesker, hvoraf nogle allerede kan skrive kode. Man ved bare ikke altid, hvilken kvalitet denne kode har.<\/p>\n<p><\/p>\n<p>Vi t\u00e6nkte og besluttede at pr\u00f8ve at involvere studerende. Men de studerende vil ikke deltage i alt. De vil kun udf\u00f8re en del af arbejdet. For eksempel skal de skrive tests, fixe bugs og implementere funktioner, der ikke ber\u00f8rer hovedfunktionaliteten. Hovedfunktionaliteten er at oprette backups og gendanne backups. Hvis der opst\u00e5r en bug i oprettelsen af en backup, vil vi miste data. Og ingen \u00f8nsker selvf\u00f8lgelig det. Alle vil gerne have, at alt er meget p\u00e5lideligt. Derfor vil vi ikke gerne tillade kode, som vi stoler mindre p\u00e5 end vores egen, til at komme ind. Det vil sige, at enhver ikke-kritisk kode er noget, vi gerne vil have fra vores ekstra arbejdsh\u00e6nder.<\/p>\n<p><\/p>\n<p><strong>Under hvilke betingelser accepteres PR fra studerende<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>De skal d\u00e6kke deres kode med tests. Alt skal g\u00e5 igennem CI. <\/li>\n<li>Og vi gennemg\u00e5r ogs\u00e5 2 reviews. \u00c9t fra Andrey Borodin og \u00e9t fra mig. <\/li>\n<li>Og derudover, for at sikre, at dette ikke bryder noget i vores service, uploader jeg separat en bygning med denne commit. Og vi tjekker i end-to-end tests, at ingenting g\u00e5r ned.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Specialkursus i Open Source<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/58832406f3acdf294cd68e6adde14ec8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lidt om, hvorfor dette er n\u00f8dvendigt, og hvorfor det, synes jeg, er en fantastisk id\u00e9. <\/p>\n<p><\/p>\n<p><strong>For os er gevinsten \u00e5benlys:<\/strong> <\/p>\n<p><\/p>\n<ul>\n<li>Vi f\u00e5r ekstra h\u00e6nder. <\/li>\n<li>Og vi s\u00f8ger kandidater til teamet blandt dygtige studerende, der kan skrive god kode. <\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Hvad er gevinsten for de studerende?<\/strong><\/p>\n<p><\/p>\n<p>De kan v\u00e6re mindre \u00e5benlyse, fordi studerende i det mindste ikke f\u00e5r penge for den kode, de skriver, men kun karakterer i deres studie. <\/p>\n<p><\/p>\n<p>Jeg spurgte dem om dette. Og if\u00f8lge dem:<\/p>\n<p><\/p>\n<ul>\n<li>Erfaring som bidrager i Open Source.<\/li>\n<li>At f\u00e5 en linje i CV'et.<\/li>\n<li>At vise sig selv og best\u00e5 en jobsamtale i Yandex.<\/li>\n<li>At blive deltager i GSoC.<\/li>\n<li>+1 specialkursus for dem, der \u00f8nsker at skrive kode.<\/li>\n<\/ul>\n<p><\/p>\n<p>Jeg vil ikke g\u00e5 ind i detaljerne om, hvordan kurset var struktureret. Jeg vil blot sige, at WAL-G var det prim\u00e6re projekt. Derudover inkluderede vi projekter som Odyssey, PostgreSQL og ClickHouse i dette kursus.<\/p>\n<p><\/p>\n<p>Og der blev givet opgaver ikke kun i dette kursus, men ogs\u00e5 udleveret eksamensbeviser og projekter.<\/p>\n<p><\/p>\n<p><strong>Og hvad er fordelene for brugerne?<\/strong><\/p>\n<p><\/p>\n<p>Lad os nu g\u00e5 videre til den del, der interesserer jer mest. Hvad har I egentlig udbytte af dette? Udbyttet er, at studerende har rettet mange fejl. Og de har lavet funktionsforesp\u00f8rgsler, som I har bedt os om. <\/p>\n<p><\/p>\n<p>Og lad mig fort\u00e6lle om de ting, I l\u00e6nge har \u00f8nsket, som nu er blevet implementeret.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/bb836742bf4f99e1b91c891ed1802bf0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Underst\u00f8ttelse af tablespaces. Underst\u00f8ttelse af tablespaces i WAL-G har nok v\u00e6ret ventet siden WAL-G's udgivelse, fordi WAL-G er efterf\u00f8lgeren til et andet backupv\u00e6rkt\u00f8j, WAL-E, som underst\u00f8ttede backups af databaser med tablespaces.<\/p>\n<p><\/p>\n<p>Kort sagt, lad mig minde om, hvad det er og hvorfor det er nyttigt. Normalt optager alle jeres Postgres-data \u00e9n mappe p\u00e5 filsystemet, som kaldes den grundl\u00e6ggende mappe. Og denne mappe indeholder allerede alle de filer og undermapper, der er n\u00f8dvendige for Postgres.<\/p>\n<p><\/p>\n<p>Tablespaces er mapper, hvor Postgres-dataene ligger, men de ligger ikke uden for den grundl\u00e6ggende mappe. P\u00e5 diaset kan man se, at tablespaces ligger uden for den grundl\u00e6ggende mappe.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/0f25591cfcaaeaec02903c9b98d8ac65.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvordan ser det ud for selve Postgres? Den grundl\u00e6ggende mappe har en separat undermappe pg_tblspc. Og i den ligger der symlinks til mapperne, hvor Postgres-dataene virkelig ligger uden for den grundl\u00e6ggende mappe.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/9e9875696c03e6e42bb98b5a7a9acd75.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e5r I bruger det hele, kan disse kommandoer se s\u00e5ledes ud. Det vil sige, at I opretter en tabel i en angivet tablespace og ser, hvor den nu ligger. De sidste to linjer, de sidste kaldte kommandoer. Og der kan man se, at der er en eller anden sti. Men i virkeligheden er det ikke den rigtige sti. Det er en sti med et pr\u00e6fiks fra den grundl\u00e6ggende mappe til tablespace. Og derfra er den matchet med en symlink, der f\u00f8rer til jeres faktiske data.<\/p>\n<p><\/p>\n<p>Vi bruger det ikke i vores team, men det blev brugt af mange andre brugere af WAL-E, som skrev til os, at de \u00f8nskede at skifte til WAL-G, men det forhindrede dem. Nu underst\u00f8ttes det.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/95ec319ccefa7e6c8bce193317407229.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En anden funktion, som vores specialkursus bragte os, er catchup. Om catchup kender folk, der nok har arbejdet mere med Oracle end med Postgres.<\/p>\n<p><\/p>\n<p>Kort om hvad det er. En s\u00e5dan topologi af en klynge kan se ud i vores service. Vi har en master. Der er en replica, der streamer fra dens write-ahead log. Og replication fort\u00e6ller masteren, hvilken LSN den befinder sig p\u00e5. Og samtidig kan loggen blive arkiveret et sted. Desuden sendes der backups til skyen, samt delta-backups.<\/p>\n<p><\/p>\n<p>Hvilket problem kunne der v\u00e6re? N\u00e5r du har en ret stor database, kan det ske, at din replica begynder at sakke bagud i forhold til masteren. Og den sakker s\u00e5 meget bagud, at den aldrig kan indhente den. Dette problem skal som regel l\u00f8ses p\u00e5 en eller anden m\u00e5de. <\/p>\n<p><\/p>\n<p>Den nemmeste m\u00e5de er at fjerne replicat og genindl\u00e6se den, fordi den aldrig vil indhente, og problemet skal l\u00f8ses. Men det tager ret lang tid, fordi det at gendanne en hel backup af en database p\u00e5 10 TB er meget, meget tidskr\u00e6vende. Og vi \u00f8nsker at g\u00f8re dette s\u00e5 hurtigt som muligt, hvis s\u00e5danne problemer opst\u00e5r. Og det er netop derfor, vi har catchup.<\/p>\n<p><\/p>\n<p>Catchup giver dig mulighed for at bruge delta-backups, der gemmes i skyen p\u00e5 denne m\u00e5de. Du angiver, hvilken LSN den bagudg\u00e5ende replica befinder sig p\u00e5, og angiver den i catchup-kommandoen for at skabe en delta-backup mellem den LSN og den LSN, hvor din klynge nu er. Og derefter gendanner du denne backup p\u00e5 den bagudg\u00e5ende replica.<\/p>\n<p><\/p>\n<p><strong>Andre databaser<\/strong><\/p>\n<p><\/p>\n<p>Vores studerende bragte ogs\u00e5 mange funktioner. Da vi i Yandex ikke kun arbejder med Postgres, har vi ogs\u00e5 MySQL, MongoDB, Redis, ClickHouse, s\u00e5 vi p\u00e5 et tidspunkt havde brug for at kunne lave backups med point-in-time recovery for MySQL og for at have mulighed for at uploade dem til skyen.<\/p>\n<p><\/p>\n<p>Og vi \u00f8nskede at g\u00f8re dette p\u00e5 en m\u00e5de, der minder om, hvad WAL-G g\u00f8r. S\u00e5 vi besluttede os for at eksperimentere og se, hvordan dette ville se ud.<\/p>\n<p><\/p>\n<p>Og i starten uden at adskille denne logik skrev vi kode i en fork. Vi s\u00e5, at vi havde en funktionel model, og det kan fungere. Derefter overvejede vi, at vores prim\u00e6re f\u00e6llesskab er Postgres-brugere, de bruger WAL-G. S\u00e5 derfor skal vi adskille disse dele. Det vil sige, n\u00e5r koden rettes til Postgres, m\u00e5 vi ikke beskadige MySQL, og n\u00e5r vi retter MySQL, m\u00e5 vi ikke beskadige Postgres.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/deef7615eaeb0b8bd790fb253cc42312.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Den f\u00f8rste id\u00e9 til, hvordan man kan adskille dette, var at bruge den samme tilgang, der anvendes i PostgreSQL-udvidelser. For at lave en backup af MySQL skulle man i realiteten installere et eller andet dynamisk bibliotek. <\/p>\n<p><\/p>\n<p>Men her viser der sig straks en asymmetri i denne tilgang. N\u00e5r man tager backup af Postgres, installerer man en normal backup-l\u00f8sning for Postgres, og alt er fint. Men for MySQL ender man med at installere en backup-l\u00f8sning for Postgres og derefter et dynamisk bibliotek til MySQL. Det lyder p\u00e5 en eller anden m\u00e5de underligt. Vi t\u00e6nkte ogs\u00e5 s\u00e5dan og besluttede, at dette ikke var den l\u00f8sning, vi havde brug for. <\/p>\n<p><\/p>\n<p><strong>Forskellige opbygninger for Postgres, MySQL, MongoDB, Redis<\/strong><\/p>\n<p><\/p>\n<p>Men det har, som vi mener, f\u00f8rt os til den rigtige l\u00f8sning \u2013 at adskille forskellige opbygninger for forskellige databaser. Dette gjorde det muligt at isolere logikken, der var knyttet til backups af forskellige databaser, som ville henvise til et f\u00e6lles API, der implementeres af WAL-G.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/6c810d5f065de06fc200bdd028707318.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dette er den del, vi skrev selv \u2013 f\u00f8r vi gav eleverne opgaver. Det vil sige, at det netop er den del, hvor de kunne lave noget forkert, s\u00e5 vi besluttede, at det var bedre, at vi gjorde noget rigtigt, s\u00e5 alt ville v\u00e6re fint. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/3a864a85bfb820ef64cbacc029a9198c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Efter dette gav vi opgaverne ud. De blev straks taget. Eleverne blev bedt om at underst\u00f8tte tre databaser. <\/p>\n<p><\/p>\n<p>Dette er MySQL, som vi har taget backup af ved hj\u00e6lp af WAL-G p\u00e5 denne m\u00e5de i over et \u00e5r. <\/p>\n<p><\/p>\n<p>Og nu n\u00e6rmer MongoDB sig produktion, hvor det bliver finjusteret. I realiteten skrev vi rammev\u00e6rket til alt dette. Derefter skrev eleverne nogle fungerende ting. Og s\u00e5 bringer vi dem til den tilstand, vi kan acceptere i vores produktion.<\/p>\n<p><\/p>\n<p>Disse opgaver s\u00e5 ikke ud til, at eleverne skulle skrive komplette backup-v\u00e6rkt\u00f8jer for hver af disse databaser. Vi havde ikke det problem. Vores problem var, at vi \u00f8nskede point-in-time recovery, og at vi \u00f8nskede at tage backups i skyen. Og vi bad eleverne om at skrive noget kode, der ville l\u00f8se dette. Eleverne brugte allerede eksisterende backup-v\u00e6rkt\u00f8jer, som p\u00e5 en eller anden m\u00e5de tager backups, og derefter syede de alt dette sammen med WAL-G, som overf\u00f8rte det hele til skyen. Og de tilf\u00f8jede ogs\u00e5 point-in-time recovery.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/7494aef259c7599e8bf0b70d77e1bb09.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvad bragte eleverne ellers? De tilf\u00f8jede st\u00f8tte til kryptering med Libsodium i WAL-G.<\/p>\n<p><\/p>\n<p>Vi har ogs\u00e5 f\u00e5et politikker for opbevaring af backups. Nu kan backups m\u00e6rkes som permanente. Og det er mere praktisk for din service at automatisere processen for deres opbevaring. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/6e932ab13dbc3119f7f1da1122443b10.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvad kom der ud af dette eksperiment?<\/p>\n<p><\/p>\n<p>Oprindeligt tilmeldte mere end 100 personer sig kurset. Jeg n\u00e6vnte ikke i starten, at universitetet i Jekaterinburg er Ural Federal University. Her annoncerede vi alt. 100 personer tilmeldte sig. Faktisk begyndte langt f\u00e6rre at deltage, omkring 30 personer. <\/p>\n<p><\/p>\n<p>Endnu f\u00e6rre afsluttede kurset, da der skulle skrives tests til den kode, som allerede er tilg\u00e6ngelig. Desuden skulle nogle fejl rettes, eller nye funktioner skulle implementeres. Nogle af de studerende afsluttede dog stadig kurset.<\/p>\n<p><\/p>\n<p>I \u00f8jeblikket har de studerende l\u00f8st omkring 14 problemer i dette kursus og lavet 10 funktioner af forskellig st\u00f8rrelse. Og, efter min mening, er det en fuldgyldig erstatning for en eller to udviklere. <\/p>\n<p><\/p>\n<p>Udover alt dette har vi udstedt diplomer og kursusprojekter. 12 fik diplomer. 6 af dem har allerede best\u00e5et med topkarakteren \u20185\u2019. De andre har endnu ikke haft deres forsvar, men jeg tror, de ogs\u00e5 vil klare sig godt. <\/p>\n<p><\/p>\n<p>Fremtidige planer<\/p>\n<p><\/p>\n<p>Hvilke planer har vi for fremtiden?<\/p>\n<p><\/p>\n<p>I det mindste de funktionsanmodninger, vi allerede har h\u00f8rt fra brugerne, og som vi gerne vil im\u00f8dekomme. Det inkluderer:<\/p>\n<p><\/p>\n<ul>\n<li>Overv\u00e5gning af korrektheden af tidslinjeoplysningerne i arkivet af HA-klyngens sikkerhedskopier. Dette kan g\u00f8res med WAL-G. Og jeg tror, vi kan finde studerende, der vil p\u00e5tage sig denne opgave. <\/li>\n<li>Vi har allerede en ansvarlig person for overf\u00f8rsel af sikkerhedskopier og WAL mellem cloud-l\u00f8sninger. <\/li>\n<li>Og vi offentliggjorde for nylig id\u00e9en om, at vi kan accelerere WAL-G endnu mere ved at pakke inkrementelle sikkerhedskopier uden at overskrive sider og optimere de arkiver, vi sender dertil. <\/li>\n<\/ul>\n<p><\/p>\n<p>Du kan dele dem her<\/p>\n<p><\/p>\n<p>Hvad var form\u00e5let med denne pr\u00e6sentation? At vi nu, udover de 4 personer, der underst\u00f8tter dette projekt, har mange ekstra h\u00e6nder. Is\u00e6r hvis de skriver til os personligt. Og hvis du sikkerhedskopierer dine data og g\u00f8r det ved hj\u00e6lp af WAL-G, eller hvis du gerne vil skifte til WAL-G, kan vi let tage hensyn til dine \u00f8nsker.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/7b0dc1633121ea6493610b08f68a14d2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dette er en QR-kode og et link. Du kan bruge dem til at bes\u00f8ge og skrive alle dine \u00f8nsker. For eksempel kan vi have en fejl, vi ikke retter. Eller en funktion, du virkelig \u00f8nsker, men som endnu ikke findes i nogen sikkerhedskopieringsl\u00f8sning, inklusive vores. S\u00f8rg for at n\u00e6vne det.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"WAL-G: nye funktioner og udvidelse af f\u00e6llesskabet. Georgiy Rylov\" src=\"\/wp-content\/uploads\/2020\/04\/56f1c4eef8522d2d6628ea98b1278846.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sp\u00f8rgsm\u00e5l<\/p>\n<p><\/p>\n<p><em>Hej! Tak for pr\u00e6sentationen! Jeg har et sp\u00f8rgsm\u00e5l om WAL-G, men ikke om Postgres. WAL-G tager backup af MySQL og kalder ekstra-backup. Hvis man ser p\u00e5 moderne installationer p\u00e5 CentOS og hvis du laver yum install MySQL, s\u00e5 vil det installere MariDB. Fra version 10.3 underst\u00f8ttes ekstra-backup ikke, men MariDB-backup underst\u00f8ttes. Hvordan st\u00e5r det til med det hos jer?<\/em><\/p>\n<p><\/p>\n<p>I \u00f8jeblikket har vi ikke pr\u00f8vet at tage backup af MariDB. Vi har f\u00e5et foresp\u00f8rgsler om st\u00f8tte til FoundationDB, men generelt, hvis der er s\u00e5dan en foresp\u00f8rgsel, kan vi finde folk, der kan g\u00f8re det. Det er ikke s\u00e5 lang tid og ikke s\u00e5 sv\u00e6rt, som jeg mener.<\/p>\n<p><\/p>\n<p><em>Goddag! Tak for pr\u00e6sentationen! Jeg har et sp\u00f8rgsm\u00e5l om potentielt nye funktioner. Er I parate til at f\u00e5 WAL-G til at fungere med b\u00e5nd, s\u00e5 det kan tage backup til b\u00e5nd?<\/em><\/p>\n<p><\/p>\n<p>Backup til b\u00e5ndopbevaring, mener du?<\/p>\n<p><\/p>\n<p><em>Ja.<\/em><\/p>\n<p><\/p>\n<p>Der er Andrey Borodin, som bedre kan svare p\u00e5 det sp\u00f8rgsm\u00e5l end jeg kan. <\/p>\n<p><\/p>\n<p>(Andrey) Ja, tak for sp\u00f8rgsm\u00e5let! Vi har haft en foresp\u00f8rgsel om at overf\u00f8re backup til b\u00e5nd fra cloud-opbevaring. Og til dette <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wal-g\/wal-g\/pull\/596\">bliver der udviklet<\/a><\/noindex> overf\u00f8rsel mellem cloud-service. For overf\u00f8rsel mellem cloud-service er det en generaliseret version af overf\u00f8rsel til b\u00e5nd. Desuden har vi en udvidelig arkitektur med hensyn til lagring. For \u00f8vrigt er mange lagre blevet skrevet af studerende. Og hvis du skriver et lager til b\u00e5nd, vil det naturligvis blive underst\u00f8ttet. Vi er klar til at overveje pull requests. Der skal skrives en fil, l\u00e6ses en fil. Hvis disse ting g\u00f8res i Go, s\u00e5 er det normalt 50 linjer kode. Og s\u00e5 vil b\u00e5ndet blive underst\u00f8ttet i WAL-G. <\/p>\n<p><\/p>\n<p><em>Tak for pr\u00e6sentationen! En interessant udviklingsproces. Backup er en vigtig del af funktionaliteten, som skal v\u00e6re godt d\u00e6kket af tests. N\u00e5r I implementerede funktionalitet til nye databaser, var det ogs\u00e5 studerende, der skrev testene, eller skrev I testene selv og gav derefter implementeringen til studenterne?<\/em><\/p>\n<p><\/p>\n<p>Testene blev ogs\u00e5 skrevet af studerende. Men de studerende skrev mest for funktioner som nye databaser. De skrev integrationstests. Og de skrev unit-tests. Hvis integrationstestsene g\u00e5r igennem, dvs. p\u00e5 nuv\u00e6rende tidspunkt \u2013 er det et scenarie, som du udf\u00f8rer manuelt, eller g\u00f8r cron det for dig, f.eks. Dvs. der er scenariet meget klart. <\/p>\n<p><\/p>\n<p><em>De studerende har ikke meget erfaring. Hvor meget tid g\u00e5r der p\u00e5 review?<\/em><\/p>\n<p><\/p>\n<p>Ja, det tager ret lang tid til gennemgang. Det vil sige, normalt n\u00e5r flere committere kommer p\u00e5 \u00e9n gang og siger, at jeg har gjort det, jeg har gjort det, s\u00e5 skal man t\u00e6nke og afs\u00e6tte en halv dag til at finde ud af, hvad de har skrevet. Fordi koden skal l\u00e6ses omhyggeligt. De har jo ikke best\u00e5et et interview. Vi kender dem ikke s\u00e6rlig godt, s\u00e5 det tager betydelig tid.<\/p>\n<p><\/p>\n<p><em>Tak for pr\u00e6sentationen! Tidligere har Andrey Borodin erkl\u00e6ret, at archive_command i WAL-G skal kaldes direkte. Men i tilf\u00e6lde af en eller anden patronkluster har vi brug for ekstra logik til at bestemme, hvilken node vi skal sende valgene fra. Hvordan l\u00f8ser I dette problem?<\/em><\/p>\n<p><\/p>\n<p>Hvad er dit problem her? Har du for eksempel en synkron replika, som du tager backup fra? Eller hvad?<\/p>\n<p><\/p>\n<p>(Andrey) Faktisk foruds\u00e6tter WAL-G brug uden shell-scripts. Hvis noget mangler, s\u00e5 lad os tilf\u00f8je den logik, som b\u00f8r v\u00e6re inde i WAL-G. Hvad ang\u00e5r, hvor archivationen skal komme fra, mener vi, at archivationen skal ske fra den nuv\u00e6rende master i klusteret. Archivationen fra replika er en d\u00e5rlig id\u00e9. Der er forskellige scenarier med problemer. Is\u00e6r problemer med archivationen af tidslinjer og anden ekstra information. Tak for sp\u00f8rgsm\u00e5let!<\/p>\n<p><\/p>\n<p>(Pr\u00e6cisering: Vi har fjernet brugen af shell-scripts) <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wal-g\/wal-g\/issues\/549\">i denne issue<\/a><\/noindex>)<\/p>\n<p><\/p>\n<p><em>God aften! Tak for pr\u00e6sentationen! Jeg blev interesseret i den funktion catchup, som du fortalte om. Vi har oplevet en situation med en replika, der ikke kunne indhente. Og jeg kunne ikke finde beskrivelsen af denne funktion i WAL-G's dokumentation.<\/em><\/p>\n<p><\/p>\n<p>Catchup dukkede op bogstaveligt talt i de 20 dage af januar 2020. M\u00e5ske skal der laves lidt mere arbejde med dokumentationen. Vi skriver den selv, og vi skriver ikke super godt. Og m\u00e5ske skal vi begynde at kr\u00e6ve, at studerende skriver den.<\/p>\n<p><\/p>\n<p><em>Er den allerede i udgivelsen?<\/em><\/p>\n<p><\/p>\n<p>Pull request er allerede mergede, det vil sige, jeg har tjekket det. Jeg har pr\u00f8vet det p\u00e5 et testkluster. Indtil videre har vi ikke haft en situation, hvor vi kunne teste det i en produktionssituation.<\/p>\n<p><\/p>\n<p><em>Hvorn\u00e5r kan man forvente det?<\/em><\/p>\n<p><\/p>\n<p>Jeg ved det ikke. Vent en m\u00e5ned, s\u00e5 vil vi helt sikkert teste det.<\/p>\n<p>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/wal-g-novye-vozmozhnosti-i-rasshirenie-soobshhestva-georgij-rylov\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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: nye muligheder og samfundsudvidelse. Georgiy Rylov | ProHoster","description":"Jeg foresl\u00e5r, at du ser p\u00e5 transkriptionen af Georgiy Rylov's foredrag fra begyndelsen af 2020 \"WAL-G: nye muligheder og udvidelse af f\u00e6llesskabet\". Open-source vedligeholdere st\u00e5r over for mange problemer.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/wal-g-novye-vozmozhnosti-i-rasshirenie-soobshhestva-georgij-rylov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/78887","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=78887"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/78887\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/78888"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=78887"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=78887"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=78887"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}