{"id":92595,"date":"2020-08-29T07:42:06","date_gmt":"2020-08-29T05:42:06","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/razrabotat-videoplatformu-za-90-dnej"},"modified":"2020-08-29T07:42:06","modified_gmt":"2020-08-29T05:42:06","slug":"razrabotat-videoplatformu-za-90-dnej","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/razrabotat-videoplatformu-za-90-dnej","title":{"rendered":"Arendada videoplatform 90 p\u00e4eva jooksul","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Sel kevadel olime v\u00e4ga l\u00f5busates tingimustes. Pandeemia t\u00f5ttu sai selgeks, et meie suvised konverentsid tuleb \u00fcle viia veebiversiooni. Ja et neid veebis kvaliteetselt l\u00e4bi viia, ei sobinud meile valmis tarkvaralahendused, pidime kirjutama oma. Selleks oli meil aega kolm kuud.<\/p>\n<p><\/p>\n<p>On selge, et need olid p\u00f5nevad kolm kuud. Kuid k\u00f5rvalvaatajale ei ole sugugi ilmselge, mis t\u00e4pselt on veebikonverentside platvorm? Millest see koosneb? Seet\u00f5ttu k\u00fcsisin viimase suvise DevOops konverentsi k\u00e4igus nendelt, kes vastutasid selle \u00fclesande eest:<\/p>\n<p><\/p>\n<ul>\n<li>Nikolai Molt\u0161anov \u2014 JUG Ru Grupi tehniline direktor; <\/li>\n<li>Vladimir Krasilshchik \u2014 pragmaatiline Java programmeerija, kes tegeleb tagaplaaniga (te olete v\u00f5inud n\u00e4ha tema ettekandeid meie Java konverentsidel);<\/li>\n<li>Artyom Nik\u043e\u043d\u043e\u0432 \u2014 vastutab kogu meie videostreamingu eest.<\/li>\n<\/ul>\n<p><\/p>\n<p>Muide, s\u00fcgis-talviste konverentside k\u00e4igus kasutame parandatud versiooni samast platvormist \u2014 nii et paljud Habr kasutajad saavad samuti selle kasutajateks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arendada videoplatform 90 p\u00e4eva jooksul\" src=\"\/wp-content\/uploads\/2020\/08\/3d9f65911fa12310efff215a4ba0f2bc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"obschaya-kartina\">\u00dcldine pilt<\/h1>\n<p><\/p>\n<p>\u2014 Milline oli meeskonna koosseis?<\/p>\n<p><\/p>\n<p><b>Nikolai Molt\u0161anov:<\/b> Meil on anal\u00fc\u00fctik, disainer, testija, kolm frontend arendajat ja backend arendaja. Ja muidugi, T-kujuline spetsialist!<\/p>\n<p><\/p>\n<p>\u2014 Kuidas n\u00e4gi protsess \u00fcldiselt v\u00e4lja?<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Kuni m\u00e4rtsi keskpaigani ei olnud meil veebiversiooni jaoks mitte midagi valmis. Aga 15. m\u00e4rtsil algas kogu tegevus veebis. Meil oli mitu hoidlat, planeerisime, arutasime p\u00f5histruktuuri ja tegime k\u00f5ik kuu ajaga. <\/p>\n<p><\/p>\n<p>See l\u00e4bis muidugi klassikalised etapid: planeerimine, arhitektuur, omaduste valimine, nende omaduste h\u00e4\u00e4letamine, poliitikate m\u00e4\u00e4ramine, disain, arendus ja testimine. L\u00f5puks 6. juunil k\u00e4ivitasime k\u00f5ik tootesse. <noindex><a rel=\"nofollow\" href=\"https:\/\/techtrain.ru\/\">TechTrain<\/a><\/noindex>. Kogu sellele protsessile kulus 90 p\u00e4eva.<\/p>\n<p><\/p>\n<p>\u2014 Kas me saime tehtud selle, millele me end lubasime?<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Kuna me osaleme n\u00fc\u00fcd DevOops konverentsil veebis \u2014 siis on see oluline. Ma ise lubasin tuua tellijatele t\u00f6\u00f6riista, millega on v\u00f5imalik konverentsi veebis korraldada. <\/p>\n<p><\/p>\n<p>\u00dclesanne oli selline: andke meile t\u00f6\u00f6riist, millega saame oma konverentse piletiholderitele edastada.<\/p>\n<p><\/p>\n<p>Kogu planeerimine jagunes mitmeks etapiks ja k\u00f5ik omadused (umbes 30 p\u00f5hijoon) jaotati nelja kategooriasse:<\/p>\n<p><\/p>\n<ul>\n<li>mida me kindlasti teeme (ilma nendeta ei saa me elada), <\/li>\n<li>mida me teeme teises j\u00e4rjekorras, <\/li>\n<li>mida me kunagi ei tee, <\/li>\n<li>ja mida me kunagi-kunagi ei tee. <\/li>\n<\/ul>\n<p><\/p>\n<p>K\u00f5ik esimese kahe kategooria funktsioonid on meil tehtud. <\/p>\n<p><\/p>\n<p>\u2014 Ma tean, et kokku on loodud 600 JIRA-\u00fclesannet. Kolme kuuga olete teinud 13 mikroteenust ja kahtlustan, et need ei ole kirjutatud ainult Java-s. Te kasutasite erinevaid tehnoloogiaid, teil on \u00fcles seatud kaks Kubernetes'i klastrit kolmes k\u00e4ttesaadavuse tsoonis ja 5 RTMP-voogu Amazonis.<\/p>\n<p><\/p>\n<p>Vaatame n\u00fc\u00fcd s\u00fcsteemi iga komponente eraldi.<\/p>\n<p><\/p>\n<h1 id=\"striming\">Voogedastus<\/h1>\n<p><\/p>\n<p>\u2014 Alustame sellest, kui meil on juba video pilt ja see edastatakse mingitesse teenustesse. Artyom, r\u00e4\u00e4gi, kuidas see voogedastus toimub?<\/p>\n<p><\/p>\n<p><b>Artyom Nikonov:<\/b> Meie \u00fcldine skeem on j\u00e4rgmine: kaamera pilt -&gt; meie pult -&gt; kohalik RTMP-server -&gt; Amazon -&gt; videopleierer. T\u00e4iendavad \u00fcksikasjad <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/jugru\/blog\/505138\/\">selle kohta kirjutanud<\/a><\/noindex> Habr'i juulis.<\/p>\n<p><\/p>\n<p>\u00dcldiselt on kaks peamist teed, kuidas seda teha: kas riistvara v\u00f5i tarkvara lahenduste p\u00f5hjal. Me valisime tarkvaratee, kuna see on kauguses esinevate esinejate puhul lihtsam. Ei ole alati v\u00f5imalik tuua esinejale teises riigis riistvara, kuid tarkvara paigaldamine tundub lihtsam ja usaldusv\u00e4\u00e4rsem. <\/p>\n<p><\/p>\n<p>Riistvara osas on meil m\u00f5ned kaamerad (meie stuudiotes ja kauguses esinejate juures) ning ka m\u00f5ned pultide arvud stuudios, mida tuleb vahel otse eetris laua all parandada.<\/p>\n<p><\/p>\n<p>Nende seadmete signaalid j\u00f5uavad arvutitesse, kus on salvestus-, sisendi\/v\u00e4ljundi ja helikaardid. Seal signaalid segatakse ja kogutakse \u00fclesseadistusteks:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arendada videoplatform 90 p\u00e4eva jooksul\" src=\"\/wp-content\/uploads\/2020\/08\/6657d95080f2263d4ea17b85d57d5919.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>N\u00e4ide nelja esinejaga \u00fclesseadmest<\/i><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arendada videoplatform 90 p\u00e4eva jooksul\" src=\"\/wp-content\/uploads\/2020\/08\/ac3565b1b5a0f8356e20821b95037c2d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>N\u00e4ide nelja esinejaga \u00fclesseadmest<\/i><\/p>\n<p><\/p>\n<p>Edasi tagatakse katkematu eetriga kolm arvutit: on \u00fcks peamine masin ja paar, mis t\u00f6\u00f6tavad vaheldumisi. Esimene arvuti kogub esimese ettekande, teine \u2014 pausi, esimene \u2014 j\u00e4rgmise ettekande, teine \u2014 j\u00e4rgmise pausi ja nii edasi. Peamine masin segab esimest teisega.<\/p>\n<p><\/p>\n<p>Sel viibib mingisugune kolmnurk, ja juhul, kui m\u00f5ni neist s\u00f5lmedest eba\u00f5nnestub, saame kiiresti ja kvaliteeti kaotamata j\u00e4tkata sisu tarnimist klientidele. Selline olukord juhtus meil. Konverentside esimesel n\u00e4dalal parandasime \u00fchte masinat, l\u00fclitades seda sisse ja v\u00e4lja. Tundub, et inimesed on meie t\u00f5rketaluvuse \u00fcle rahul. <\/p>\n<p><\/p>\n<p>Seej\u00e4rel j\u00f5uavad voogedastused arvutitest kohalikele serveritele, millel on kaks \u00fclesannet: RTMP-voogude suunamine ja varukoopiate salvestamine. Nii et meil on mitu salvestuspunkti. Seej\u00e4rel saadetakse videovood osa meie s\u00fcsteemist, mis on loodud Amazoni SaaS-teenuste peale. Kasutame <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/medialive\/\">MediaLive<\/a><\/noindex>, S3, CloudFront. <\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Aga mis juhtub enne, kui video j\u00f5uab vaatajateni? Kas te ei pea seda l\u00f5ikama kuidagi?<\/p>\n<p><\/p>\n<p><b>Artem:<\/b> Kompresseerime video oma poolt ja saadame selle MediaLive'i. Seal k\u00e4ivitame transkodeerijad. Need kodeerivad video reaalajas mitmesse kvaliteeti, et inimesed saaksid neid vaadata telefonides, halvema interneti\u00fchenduse korral suvilas ja nii edasi. Siis jagame need vood <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Chunk_(information)\">chunk'e<\/a><\/noindex>, nii t\u00f6\u00f6tab protokoll <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/HTTP_Live_Streaming\">HLS<\/a><\/noindex>. Edastame frontendis esitusloendi, kus on viidatud nendele osadele.<\/p>\n<p><\/p>\n<p>\u2014 Kasutame 1080p resolutsiooni?<\/p>\n<p><\/p>\n<p><b>Artem:<\/b> Laiuses on meil 1080p video \u2014 1920 pikslit, k\u00f5rguses veidi v\u00e4hem, pilt on piklikum \u2014 sellel on omad p\u00f5hjused.<\/p>\n<p><\/p>\n<h1 id=\"pleer\">M\u00e4ngija<\/h1>\n<p><\/p>\n<p>\u2014 Artjom kirjeldas, kuidas video j\u00f5uab striimidesse, kuidas see jaotatakse erinevatesse m\u00e4nguvariantidesse erinevate ekraanide resolutsioonide jaoks, l\u00f5igatakse juppideks ja j\u00f5uab m\u00e4ngijasse. Kolja, r\u00e4\u00e4gi n\u00fc\u00fcd, mis see m\u00e4ngija on, kuidas see striimi tarbib, miks HLS?<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Meil on m\u00e4ngija, mida j\u00e4lgivad k\u00f5ik konverentsi k\u00fclastajad. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arendada videoplatform 90 p\u00e4eva jooksul\" src=\"\/wp-content\/uploads\/2020\/08\/dae747f03795382deb0977d54dfa7561.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sisuliselt on see raamistiku peal, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/video-dev\/hls.js\">hls.js<\/a><\/noindex>, mille peal on kirjutatud palju teisi m\u00e4ngijaid. Kuid me vajasime v\u00e4ga spetsiifilist funktsionaalsust: tagasi kerimist ja koha m\u00e4rkimist, kus inimene asub, millist ettekannet ta hetkel vaatab. Samuti olid vajalikud oma layout'id, erinevad logod ja k\u00f5ik muu, mis meile sobis. Seet\u00f5ttu otsustasime kirjutada oma raamistiku (HLS'i peal) ja integreerida selle veebisaidile. <\/p>\n<p><\/p>\n<p>See on p\u00f5hifunktsionaalsus, seega teostati see peaaegu esimesena. Ja selle \u00fcmber hakkas k\u00f5ik muu juba arenema. <\/p>\n<p><\/p>\n<p>Tegemist on sellega, et m\u00e4ngija saavad autentimise kaudu tagasisideplatvormilt m\u00e4ngunimekirja koos linkidega juppidele, mis on seotud aja ja kvaliteediga, laadib vajalikke ja n\u00e4itab kasutajale, tehes selle k\u00e4igus teatud 'maagiat'.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arendada videoplatform 90 p\u00e4eva jooksul\" src=\"\/wp-content\/uploads\/2020\/08\/e20335b062f38ccf05af41a4324ff4fb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Ajajoone n\u00e4ide<\/i><\/p>\n<p><\/p>\n<p>\u2014 Otseselt m\u00e4ngijasse on sisse ehitatud nupp, mis kuvab k\u00f5igi ettekannete ajajoone...<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Jah, me lahendasime kasutaja navigeerimise probleemi kohe. Aprilli keskpaiku otsustasime, et ei hakka edastama igat meie konverentsi eraldi saidil, vaid koondame k\u00f5ik \u00fchte. Nii saavad Full Passi piletite omanikud vabalt vahetada erinevate konverentside vahel: nii otse-eetris kui ka m\u00f6\u00f6dunud ettekannete salvestuste vahel. <\/p>\n<p><\/p>\n<p>Ja et kasutajatele oleks lihtsam navigeerida praeguses otse\u00fclekandes ja vahetada teede vahel, otsustasime lisada nupu 'Kogu otse\u00fclekanne' ja horisontaalsed ettekannete kaardid vahetamiseks teemade ja ettekannete vahel. Seal on klaviatuuriga juhtimine.<\/p>\n<p><\/p>\n<p>\u2014 Kas sellel oli mingeid tehnilisi raskusi?<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Raskusi oli kerimisribaga, kus on t\u00e4histatud erinevate ettekannete alguspunkte. <\/p>\n<p><\/p>\n<p>\u2014 L\u00f5puks \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0432\u0438 \u043e\u0442\u043c\u0435\u0442\u043a\u0438 \u043d\u0430 \u043f\u043e\u043b\u043e\u0441\u0435 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0447\u0435\u043c YouTube?<\/p>\n<p><\/p>\n<p><b>Artem:<\/b> Neil oli see siis beetaversioonis. Tundub, et see on \u00fcsna keeruline funktsioon, kuna nad on seda osaliselt testinud kasutajate peal viimase aasta jooksul. Ja n\u00fc\u00fcd on see l\u00f5puks m\u00fc\u00fcgis. <\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Kuid me saime sellest kiiremini m\u00fc\u00fcgiversiooni. Ausalt \u00f6eldes, selle lihtsa funktsiooni taga on tohutult palju tagaplaani, esiplaani ja arvutusi ning matemaatikat m\u00e4ngijas.<\/p>\n<p><\/p>\n<h1 id=\"frontend\">Frontend<\/h1>\n<p><\/p>\n<p>\u2014 Uurime, kuidas see sisu, mida me n\u00e4itame (ettekande kaart, esinejad, veebisait, ajakava), j\u00f5uab esiplaani?<\/p>\n<p><\/p>\n<p><b>Vladimir Krasilshchik:<\/b> Meil on mitu sisemist IT-s\u00fcsteemi. On s\u00fcsteem, kuhu on registreeritud k\u00f5ik ettekanded ja k\u00f5ik esinejad. On protsess, kuidas ettekandja konverentsil osaleb. Esineja esitab taotluse, s\u00fcsteem salvestab selle, ja siis on mingi voos\u00fcsteem, mille kaudu ettekande loomine toimub. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arendada videoplatform 90 p\u00e4eva jooksul\" src=\"\/wp-content\/uploads\/2020\/08\/309559ba100f9b5e2195c7720b82f62d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nii n\u00e4eb esineja voos\u00fcsteemi.<\/i><\/p>\n<p><\/p>\n<p>See s\u00fcsteem on meie sisearendus. <\/p>\n<p><\/p>\n<p>Edasi tuleb eraldi ettekannete p\u00f5hjal koostada ajakava. Nagu teada, on see NP-raskusi tekitav \u00fclesanne, kuid me saame selle kuidagi lahendatud. Selleks k\u00e4ivitame teise komponendi, mis koostab ajakava ja saadab selle kolmandasse osalisse pilveteenusesse Contentful. Seal n\u00e4eb k\u00f5ik v\u00e4lja nagu tabel, kus on konverentsi p\u00e4evad, p\u00e4evade jooksul ajavahemikud ning ajavahemike sees etteasted, pausid v\u00f5i sponsorite tegevused. Seega sisu, mida me n\u00e4eme, asub kolmandas osapis. Ja \u00fclesanne on see tuua kodulehele. <\/p>\n<p><\/p>\n<p>Tundub, et veebileht on lihtsalt leht m\u00e4ngijaga, ega midagi keerulist ei ole. V\u00e4lja arvatud see, et see pole nii. Selle lehe taga olev taustas\u00fcsteem l\u00e4heb Contentful'i, toob sealt v\u00e4lja ajakava, loob m\u00f5ned objektid ja saadab need esik\u00fcljele. Iga meie platvormi klient kasutab veebip\u00f5hist soketi\u00fchendust, millega me saadame taustast esik\u00fcljele ajakava uuenduse. <\/p>\n<p><\/p>\n<p>T\u00f5eline juhtum: esineja vahetas konverentsi ajal t\u00f6\u00f6kohta. Peame vahetama tema ettev\u00f5tteplaadi. Kuidas see tagaplaanilt toimub? K\u00f5igile klientidele saadetakse uuendus veebipusleti kaudu ja edasi joonistab front-end ajaskaala ise. K\u00f5ik see toimub sujuvalt. Pilveteenuse ja meie mitmete komponentide kogum annab meile v\u00f5imaluse kogu seda sisu luua ja edastada otsefrontile. <\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Siin on oluline t\u00e4psustada, et meie veebisait ei ole klassikaline SPA-rakendus. See on nii vormindatud, renderdatud veebisait kui ka SPA. Tegelikult n\u00e4eb Google seda saiti kui renderdatud HTML-i. See on hea SEO ja sisu tarnimise jaoks kasutajale. Ta ei pea ootama 1,5 megabaiti JavaScripti laadimist, et seej\u00e4rel lehte n\u00e4ha; ta n\u00e4eb kohe juba renderdatud lehte ning te tunnetate seda iga kord, kui konverentsi ettekandeid vahetate. K\u00f5ik toimub poole sekundi jooksul, kuna sisu on juba valmis ja paigutatud \u00f5igesse kohta.<\/p>\n<p><\/p>\n<p>\u2014 Kokkuv\u00f5tteks, loetleme tehnoloogiad. T\u00f5ema r\u00e4\u00e4kis, et meil on 5 Amazon'i voogu, kuhu edastame video ja heli. Seal on meil bash-skriptid, nende abil k\u00e4ivitame, konfigureerime...<\/p>\n<p><\/p>\n<p><b>Artem:<\/b> See toimub AWS API kaudu, seal on veel palju k\u00f5rvalt tehnilisi teenuseid. Me jagasime oma \u00fclesandeid nii, et mina edastan {domain} ja es frontend- ja backend-arendajad v\u00f5tavad sealt. Meil on m\u00f5ned oma raamistud, et lihtsustada sisu avaldamist, mida me hiljem teeme 4K jne. Kuna t\u00e4htaegadega oli v\u00e4ga kitsas, tegime seda peaaegu t\u00e4ielikult AWS-i p\u00f5hjal. <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/cloudfront\/\">CloudFront<\/a><\/noindex>, ja sealt saavad frontend- ja backend-arendajad sisu k\u00e4tte. Meie m\u00e4ngijas on TypeScript, React, Next.JS. Ja meie backendis on mitu teenust C#, Java, Spring Boot ja Node.js. K\u00f5ik see on juurutatud Kubernetesega, kasutades Yandex Cloudi infrastruktuuri.<\/p>\n<p><\/p>\n<p>Soovin veel m\u00e4rkida, et kui mul oli vaja platvormiga tutvuda, ei osutunud see keeruliseks: k\u00f5ik v\u00e4ljaanded on GitLabis, k\u00f5ik on h\u00e4sti nimetatud, on kirjutatud testid ja olemas on dokumentatsioon. See t\u00e4hendab, et isegi kriisiolukordades hooliti sellistest asjadest.<\/p>\n<p><\/p>\n<p>\u00c4ri- ja anal\u00fc\u00fcsi piirangud<\/p>\n<p><\/p>\n<h1 id=\"biznes-ogranicheniya-i-analitika\">\u0411\u0438\u0437\u043d\u0435\u0441-\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430<\/h1>\n<p><\/p>\n<p>\u2014 Meie sihiks oli \u00e4ritegevuse n\u00f5uetele vastamine 10 000 kasutajale. On aeg r\u00e4\u00e4kida \u00e4ri piirangutest, millega silmitsi seisisime. Me pidime tagama k\u00f5rge koormuse ja j\u00e4rgima isikuandmete kaitse seadust. Mis veel?<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Esialgu l\u00e4ksime v\u00e4lja videot n\u00f5udmistest. K\u00f5ige olulisem on jaotatud videote salvestamine \u00fcle maailma, et tagada kiire kohaletoimetamine kliendile. Teised n\u00f5uded h\u00f5lmasid 1080p resolutsiooni ning tagasi kerimise v\u00f5imalust, mida paljud teised ei ole reaalajas rakendanud. Hiljem lisasime v\u00f5imaluse aktiveerida 2x kiirus, mis v\u00f5imaldas \"j\u00f5uda\" otse\u00fclekandele ning j\u00e4tkata konverentsi reaalajas vaatamist. Lisaks tuli kasuks ajajoone m\u00e4rgistamise funktsionaalsus. Samuti pidime olema talitluskindlad ja vastu pidama 10 000 \u00fchenduse koormusele. Tagaplaanil t\u00e4hendab see umbes 10 000 \u00fchendust, korrutatuna 8 p\u00e4ringuga iga lehe v\u00e4rskenduse kohta. See teeb kokku 80 000 RPS\/sekundis. Suhteliselt palju.<\/p>\n<p><\/p>\n<p>\u2014 Kas n\u00f5udmised \"virtuaalse n\u00e4ituse\" osas, sealhulgas partnerite veebistendid, olid samuti olemas?<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Jah, seda tuli teha \u00fcsna kiiresti ja universaalselt. Iga konverentsi jaoks oli meil kuni 10 partnerfirmat, kelle lehti tuli n\u00e4dala v\u00f5i kahe jooksul vormindada. Samas erineb nende sisu formaadilt veidi. Kuid v\u00e4lja t\u00f6\u00f6tati teatud templite genereerija, mis kogus neid lehti reaalajas, praktiliselt arendustegevuses edasise osaluseta. <\/p>\n<p><\/p>\n<p>\u2014 Oli ka n\u00f5uded reaalajas vaateanal\u00fc\u00fctikale ja statistikale. Tean, et me kasutame selleks Prometheust, aga r\u00e4\u00e4gi l\u00e4hemalt: milliseid n\u00f5udeid me t\u00e4idame anal\u00fc\u00fctika osas ja kuidas see on ellu viidud?<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Alguses on meil turunduslikud n\u00f5uded A\/B testimise jaoks ja teabe kogumise kohta, et aru saada, kuidas edaspidi klientidele parimat sisu edastada. Samuti on n\u00f5uded teatud anal\u00fc\u00fctika kohta partnerite tegevuse ja anal\u00fc\u00fcsi osas, mida te n\u00e4ete (k\u00fclastuste loendur). K\u00f5ik teave kogutakse reaalajas. <\/p>\n<p><\/p>\n<p>Seda teavet saame esitada ka aggregeeritud kujul, isegi esinejatele: kui palju inimesi sind mingil hetkel vaatas. \u00dchtlasi ei j\u00e4lgita isiklikku kontot ja isikuandmeid vastavalt 152. seadusele. <\/p>\n<p><\/p>\n<p>Platvormil on juba turunduslikud t\u00f6\u00f6riistad ja meie m\u00f5\u00f5dikud kasutajate aktiivsuse m\u00f5\u00f5tmiseks reaalajas (kes vaatas millise sekundi ettekandest), et koostada ettekannete k\u00fclastamise graafikuid. Nendel andmetel p\u00f5hinevad uuringud, mis aitavad j\u00e4rgmisi konverentse paremaks muuta. <\/p>\n<p><\/p>\n<h1 id=\"frod\">Pettus<\/h1>\n<p><\/p>\n<p>\u2014 Kas meil on pettusevastaseid mehhanisme?<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> \u00c4rivaldkonna range ajaraami t\u00f5ttu ei olnud algselt eesm\u00e4rk kohe blokeerida liigseid \u00fchendusi. Kui kaks kasutajat sisenesid sama konto alt, said nad sisu vaadata. Kuid me teame, kui palju sama konto kaudu samal ajal vaatamisi oli. Ja mitmed eriliselt v\u00e4givaldsed rikkumised oleme blokeerinud. <\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Tuleb t\u00f5deda, et \u00fcks blokeeritud kasutajatest m\u00f5istis, miks see juhtus. Ta tuli, vabandas ja lubas pileti osta.<\/p>\n<p><\/p>\n<p>\u2014 Selleks, et k\u00f5ik see toimuks, peate t\u00e4ielikult j\u00e4lgima k\u00f5iki kasutajaid sisse- ja v\u00e4ljaminekul, alati teadma, mida nad teevad. Kuidas see s\u00fcsteem t\u00f6\u00f6tab?<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Soovin r\u00e4\u00e4kida anal\u00fc\u00fctikast ja statistikatest, mida hiljem anal\u00fc\u00fcsime ettekande edukuse hindamiseks v\u00f5i mille v\u00f5ime hiljem partneritele esitada. K\u00f5ik kliendid on veebip\u00f5hise socket-\u00fchenduse kaudu \u00fchendatud teatud tagaplaani klastriga. Seal on <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.com\/\">Hazelcast<\/a><\/noindex>. Iga klient saadab igas ajavahemikus andmeid selle kohta, mida ta teeb ja millist lugu ta vaatab. Edasi kogutakse see teave kiiresti Hazelcast\u2019i t\u00f6\u00f6dega ja saadetakse tagasi k\u00f5igile, kes neid lugusid vaatavad. N\u00e4eme nurgas, kui palju inimesi on praegu koos meiega. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arendada videoplatform 90 p\u00e4eva jooksul\" src=\"\/wp-content\/uploads\/2020\/08\/fa08d10412cbdab418914183f25efa3b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sama teave koguneb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.mongodb.com\/\">Mongo<\/a><\/noindex> ja liigub meie andmej\u00e4rve, mille p\u00f5hjal saame luua huvitavamaid graafikuid. K\u00fcsitakse: kui palju unikaalseid kasutajaid on seda ettekannet vaadanud? L\u00e4hme <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/\">Postgres<\/a><\/noindex>, seal on k\u00f5ik inimeste pingid, kes said selle ettekande id kaudu. Oleme kogunud unikaalsed ja n\u00fc\u00fcd saame aru.<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Aga samas saame reaalajas andmeid Prometheuse kaudu. See on suunatud k\u00f5igile Kubernetes teenustele ning ka Kubernetesile endale. See kogub absoluutselt k\u00f5ike, ja Grafana abil saame koostada igasuguseid graafikuid reaalajas.<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> \u00dchest k\u00fcljest laadime selle edasi edasiseks t\u00f6\u00f6tlemiseks, n\u00e4iteks OLAP-i jaoks. OLTP rakendus laadib selle Prometheusse, Grafanasse ning graafikud isegi kattuvad! <\/p>\n<p><\/p>\n<p>\u2014 Just see eriline juhtum, kui graafikud kattuvad.<\/p>\n<p><\/p>\n<h1 id=\"dinamicheskie-izmeneniya\">D\u00fcnaamilised muutused<\/h1>\n<p><\/p>\n<p>\u2014 R\u00e4\u00e4kige, kuidas d\u00fcnaamilised muutused toimuvad: kui ettekande tegemine t\u00fchistatakse 6 minutit enne algust, siis milline on toimingute j\u00e4rjestus? Milline pipeline k\u00e4ivitub?<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Pipeline on v\u00e4ga tinglik. On mitu v\u00f5imalust. Esimene \u2014 ajakava koostamise programm t\u00f6\u00f6tab ja muudab selle ajakava. Muudetud ajakava laaditakse Contentfuli. P\u00e4rast seda backend m\u00f5istab, et Contentfulis on selle konverentsi osas muudatused, v\u00f5tab ja kogub uuesti kokku. K\u00f5ik kogutakse ja saadetakse websocketi kaudu. <\/p>\n<p><\/p>\n<p>Teine v\u00f5imalus, kui k\u00f5ik toimub meeletus tempos: toimetaja muudab k\u00e4sitsi Contentfulis teavet (lingid Telegrami, ettekandjate esitused jne) ja k\u00e4ivitub sama loogika nagu esimesel korral. <\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> K\u00f5ik toimub ilma lehe v\u00e4rskendamiseta. K\u00f5ik muudatused toimuvad kliendi jaoks t\u00e4iesti sujuvalt. Sama kehtib ka ettekannete vahetamise kohta. Kui aeg peab k\u00e4tte j\u00f5udma, muutub ettekande ja liidese sisu. <\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Samuti on ajapunktid ettekannete alguseks ajajoonel. Alguses ei ole midagi. Kui kursor punasele ribale viia, ilmuvad m\u00f5ne hetke p\u00e4rast t\u00e4nu \u00fclekanne re\u017eiss\u00f6\u00f6rile ajapunktid. Re\u017eiss\u00f6\u00f6r m\u00e4\u00e4rab \u00f5iged \u00fclekande algused, backend fikseerib selle muudatuse, arvutab vastavalt konverentsi ajakavale ettekannete algus- ja l\u00f5puaja kogu rajale ning saadab selle meie klientidele, m\u00e4ngija joonistab ajapunktid. N\u00fc\u00fcd saab kasutaja rahulikult navigeerida ettekande alguse ja l\u00f5pu vahel. See oli range \u00e4ri n\u00f5ue, v\u00e4ga mugav ja kasulik. Sa ei raiska aega, et leida ettekande tegelikku algusaega. Ja kui me teeme eelvaate, on see \u00fcldse suurep\u00e4rane.<\/p>\n<p><\/p>\n<h1 id=\"deployment\">Deployment<\/h1>\n<p><\/p>\n<p>\u2014 Ma tahaksin k\u00fcsida deployment'i kohta. Kolja ja meeskond veetsid alguses palju aega, et seadistada kogu infrastruktuur, milles meil k\u00f5ik t\u00f6\u00f6 k\u00e4ib. R\u00e4\u00e4gi, millest see k\u00f5ik koosneb?<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Meil oli algselt tehnilisest vaatenurgast n\u00f5ue, et toode oleks maksimaalselt s\u00f5ltumatu mistahes tarnijast. Ei sobinud enda viimine AWS-i ja AWS-i spetsiifiliste Terraform-skriptide, Yandexi v\u00f5i Azure'i kasutamine jne. Me pidime omal ajal kuskile kolima. <\/p>\n<p><\/p>\n<p>Esimese kolme n\u00e4dala jooksul otsisime pidevalt, kuidas seda k\u00f5ige paremini teha. L\u00f5puks j\u00f5udsime j\u00e4reldusele, et Kubernetes on meie puhul ideaalne lahendus, kuna see v\u00f5imaldab luua automaatselt skaleeritavaid teenuseid, automaatset v\u00e4ljalaskmist ning peaaegu k\u00f5iki teenuseid kohe k\u00e4tte saada. Loomulikult tuli k\u00f5iki teenuseid \u00f5petada Kubernetesega, Dockeriga t\u00f6\u00f6tama ja ka meeskond pidi selle omandama. <\/p>\n<p><\/p>\n<p>Meil on kaks klastrit: katsetamiseks ja tootmiseks. Need on riistvara ja seadistuste osas t\u00e4pselt \u00fchesugused. Me rakendame infrastruktuuri koodina. K\u00f5ik teenused rakendatakse automaatse pipeline'i kaudu kolmes keskkonnas feature-branch'idest, master-branch'idest ja testimistest GitLabist. See on maksimaalselt integreeritud GitLabi, Elasticu ja Prometheusega. <\/p>\n<p><\/p>\n<p>Saame kiiresti (tagaplaanil 10 minuti, esiplaanil 5 minuti jooksul) rakendusi igas keskkonnas, koos k\u00f5igi testide, integratsioonide, funktsionaalsete testide ja integratsioonitestide k\u00e4ivitamisega, ning testime ka koormustestidega testkeskkonnas enam-v\u00e4hem sama, mida soovime tootmis\u00fcmbruses saavutada. <\/p>\n<p><\/p>\n<h1 id=\"pro-testy\">Testide kohta<\/h1>\n<p><\/p>\n<p>\u2014 Te testite peaaegu k\u00f5ike, raske on uskuda, et olete k\u00f5ik kirjutanud. Kas saaksite r\u00e4\u00e4kida tagaplaani testide katmisest: kui palju on kaetud, milliseid teste on olemas?<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Oleme kirjutanud kahte t\u00fc\u00fcpi teste. Esimesed on komponenditestid. Testid k\u00f5igi Spring-rakenduse ja andmebaasi tasemete kontrollimiseks <noindex><a rel=\"nofollow\" href=\"https:\/\/www.testcontainers.org\/\">Testcontainers<\/a><\/noindex>. See kontrollib k\u00f5ige k\u00f5rgemal tasemel \u00e4ristsenaariume. Ma ei testita funktsioone. Testime ainult m\u00f5ningaid suuremaid asju. N\u00e4iteks simuleeritakse testis otse kasutaja sisselogimise protsessi, sellele kasutajale piletite taotlemist, kuhu ta v\u00f5ib minna, ning juurdep\u00e4\u00e4su taotlemist voogu vaatamiseks. V\u00e4ga arusaadavad kasutajascenaarid. <\/p>\n<p><\/p>\n<p>Umbes sama on rakendatud nn integratsioonitestides, mis tegelikult t\u00f6\u00f6tavad keskkonnas. Tegelikult, kui j\u00e4rjekordne rakendus on tootmisse viidud, t\u00f6\u00f6tavad seal ka t\u00f5elised p\u00f5histsenaariumid. Sama sisselogimine, piletite taotlemine, juurdep\u00e4\u00e4su taotlemine CloudFrontile, kontrollimine, et voog on t\u00f5esti seotud minu \u00f5igustega, re\u017eiss\u00f6\u00f6ri liidese kontrollimine. <\/p>\n<p><\/p>\n<p>Praegu on mul k\u00e4igus umbes 70 komponente testi ja umbes 40 integratsioonitestis. Katvus on v\u00e4ga l\u00e4hedane 95%-le. See on komponentide puhul, integratsiooniliste puhul on see v\u00e4iksem, seal pole lihtsalt nii palju vaja. Arvestades, et projektis on erinevad koodigeneratsioonid, on see v\u00e4ga hea n\u00e4itaja. Pole olnud teist v\u00f5imalust teha seda, mida me kolme kuuga tegime. Sest kui me oleksime k\u00e4sitsi testinud, andes funktsioone meie testijale, kes oleks leidnud vigu ja tagastanud need meile parandamiseks, oleks see koodide h\u00e4\u00e4lestamise ring v\u00e4ga pikk, ja me ei oleks mahtunud mingitesse t\u00e4htaegadesse.<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> \u00dctleme nii, et kogu platvormi regressioonitestimiseks, kui m\u00f5nda funktsiooni muudetakse, peab kaks p\u00e4eva istuma ja igasse kohta klikkima. <\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Seet\u00f5ttu on suur edu, et kui ma funktsiooni hindan, \u00fctlen, et mul on vaja 4 p\u00e4eva kahe lihtsa k\u00e4epideme ja 1 websocketi jaoks, Andrei lubab. Ta on juba harjunud, et sellesse 4 p\u00e4eva on sisse arvestatud 2 t\u00fc\u00fcpi teste, ja siis, t\u00f5en\u00e4oliselt, see t\u00f6\u00f6tab. <\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Mul on samuti kirjutatud 140 testi: komponendi + funktsionaalsete testide, mis teevad sama asja. K\u00f5iki samu stsenaariume testitakse nii tootmises, testimisel kui ka arenduses. Samuti on meil hiljuti ilmunud funktsionaalsed p\u00f5hilised UI-testid. Nii katame k\u00f5ige p\u00f5hifunktsioonid, mis v\u00f5ivad kokku kukkuda. <\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Loomulikult tasub r\u00e4\u00e4kida koormustestidest. Oli vaja kontrollida platvormi koormuse all, mis on l\u00e4hedane reaalsusele, et m\u00f5ista, mis toimub Rabbitiga, mis toimub JVM-idega, kui palju tegelikult m\u00e4lu on vajalik. <\/p>\n<p><\/p>\n<p>\u2014 Ma ei tea t\u00e4pselt, kas me testime midagi voogude k\u00fcljest, aga m\u00e4letan, et meil oli probleeme transkodeerijatega, kui me korraldasime kohtumisi. Kas me testisime vooge?<\/p>\n<p><\/p>\n<p><b>Artem:<\/b> Testiti iteratiivselt. Korraldades kohtumisi. Kohtumiste korraldamise k\u00e4igus tekkis umbes 2300 JIRA-piletit. Need on lihtsalt malli asjad, mida inimesed tegid kohtumiste korraldamiseks. V\u00f5tsime platvormi osad eraldi lehe jaoks kohtumistele, millega tegeles Kirill Tolkachev (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/tolkkv\/\" class=\"user_link\">tolkkv<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>Ausalt \u00f6eldes ei olnud suuri probleeme. Ainult paar korda tabasime CloudFront'i vahem\u00e4luga seotud vigu, lahendasime need \u00fcsna kiiresti \u2014 lihtsalt seadistasime poliitikad \u00fcmber. Vigu oli oluliselt rohkem inimestes, \u00fcrituste voogedastuss\u00fcsteemides. <\/p>\n<p><\/p>\n<p>Konverentside ajal tuli kirjutada veel mitu eksport\u00f6\u00f6ri, et katta rohkem seadmeid ja teenuseid. Kohati tuli teha enda lahendusi ainult m\u00f5\u00f5dikute t\u00f5ttu. AV (audiovisuaal) riistvara maailm ei ole just roosiline \u2014 sul on mingi seadme 'API', millele sa ei saa lihtsalt m\u00f5ju avaldada. Ja kaugeltki ei ole kindel, et sa saad vajalikku teavet k\u00e4tte. Riistvaratootjad on t\u00f5eliselt aeglased ning nendelt on peaaegu v\u00f5imatu saavutada soovitud tulemusi. Kokku \u00fcle 100 seadme, nad ei anna seda, mida vajad, ja sa kirjutad kummalisi ja liigseid eksport\u00f6\u00f6re, mille kaudu on kuidagi v\u00f5imalik s\u00fcsteemi t\u00f5rkeid lahendada.<\/p>\n<p><\/p>\n<h1 id=\"oborudovanie\">Seadmed<\/h1>\n<p><\/p>\n<p>\u2014 M\u00e4letan, kuidas enne konverentse t\u00e4iendasime osaliselt varustust.<\/p>\n<p><\/p>\n<p><b>Artem:<\/b> Ostsin arvuteid, s\u00fclearvuteid, akublokke. Praegu suudame ilma elektrita elada 40 minutit. Juunis oli Peterburis tugev storms \u2014 seega toimus meil selline elektrikatkestus. Samas tulevad meile mitmed teenusepakkujad optiliste linkidega erinevatest kohtadest. See on t\u00f5esti 40 minutit hoone seisakut, mille jooksul p\u00f5leb valgus, t\u00f6\u00f6tab heli, kaamerad jne.<\/p>\n<p><\/p>\n<p>\u2014 Meil on internetiga sarnane lugu. Kontoris, kus asuvad meie stuudiod, oleme p\u00f5randate vahel venitanud tugeva v\u00f5rgu.<\/p>\n<p><\/p>\n<p><b>Artem:<\/b> Meil on 20 GBit optikat p\u00f5randate vahel. Edasi on p\u00f5randatel optika, m\u00f5nes kohas mitte, kuid igal juhul on v\u00e4hem kui gigabiti kanaleid \u2014 edastame nende kaudu konverentside videoid. \u00dcldiselt on v\u00e4ga mugav t\u00f6\u00f6tada enda infrastruktuuriga, offline-konverentside korraldamisel saab seda harva teha. <\/p>\n<p><\/p>\n<p>\u2014 Juba enne JUG Ru Groupis t\u00f6\u00f6tamist n\u00e4gin, kuidas masinad \u00f6\u00f6 jooksul offline-konverentsidel \u00fcles seatakse, kus on suur monitor k\u00f5igi metrikatega, mida te Grafanas koostate. Praegu on ka komandokeskus, kus istub arendustiim, kes konverentsi ajal parandab vigu ja arendab funktsioone. Sellel on seire s\u00fcsteem, mis kuvatakse suurele ekraanile. Artyom, Kolja ja teised poisid istuvad ja j\u00e4lgivad, et k\u00f5ik ei kukuks ning t\u00f6\u00f6taks sujuvalt.<\/p>\n<p><\/p>\n<h1 id=\"kuryozy-i-problemy\">K\u00f5rvaltegevused ja probleemid<\/h1>\n<p><\/p>\n<p>\u2014 Te r\u00e4\u00e4kisite h\u00e4sti meie Amazoni voogedastusest, veebim\u00e4ngijast, mis on kirjutatud erinevates programmeerimiskeeltes, tagamisel, et tingimused oleksid t\u00e4idetud, sealhulgas isiklik konto, mis toetab nii juriidilisi kui f\u00fc\u00fcsilisi isikuid, ning saame integreerida kellegagi OAuth 2.0 kaudu, seal on anti-pettuse s\u00fcsteem ja kasutaja blokeerimine. Saame d\u00fcnaamiliselt v\u00e4lja anda muudatusi, kuna oleme selle h\u00e4sti teinud ja see k\u00f5ik on testitud.<\/p>\n<p><\/p>\n<p>Mind huvitab teada, millised olid kummalised olukorrad seoses millegi k\u00e4ivitamisega. Kas oli kummalisi olukordi, kui t\u00f6\u00f6tasite v\u00e4lja tagaplaani, esitlust, ning juhtus, et midagi l\u00e4ks veidralt ja te ei teadnud, mida sellega teha?<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Minu arvates oli seda ainult viimased kolm kuud. Igal p\u00e4eval. Nagu n\u00e4ha on, on k\u00f5ik mu juuksed v\u00e4lja rebitud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arendada videoplatform 90 p\u00e4eva jooksul\" src=\"\/wp-content\/uploads\/2020\/08\/6ff16a1abd6ec5fb445d8d3888d990e7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vladimir Krasilyshchik kolme kuu p\u00e4rast, mil juhtus, et midagi l\u00e4ks veidralt ja keegi ei teadnud, mida sellega teha.<\/i><\/p>\n<p><\/p>\n<p>Iga p\u00e4ev juhtus midagi sellist, kui tuli hetk, kus sa haarad ja rebid endalt juukseid \u00e4ra, v\u00f5i m\u00f5istad, et kedagi enam pole ja ainult sina saad seda teha. Meie esimene suurem \u00fcritus oli TechTrain. 6. juuni kell 2 \u00f6\u00f6sel ei olnud meil ikka veel t\u00f6\u00f6keskkond \u00fcles t\u00f5stetud, seda tegi Kola. Ja isiklik konto ei t\u00f6\u00f6tanud, nagu ka OAuth2.0 autoriseerimiserver. Me muutsime selle OAuth2.0 teenusepakkujaks, et selle kaudu platvormile \u00fchenduda. Ma olin ilmselt juba 18 tundi j\u00e4rjest t\u00f6\u00f6tanud, vaatasin arvutisse ja ei n\u00e4inud midagi, ei saanud aru, miks see ei t\u00f6\u00f6ta, ja Kola vaatas mu koodi kaugelt, otsis vead Springi konfiguratsioonist, leidis need ja isiklik konto hakkas t\u00f6\u00f6le, samuti tootmises. <\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Ja tund enne TechTrain'i ilmumine oli toimunud. <\/p>\n<p><\/p>\n<p>Siin kujunesid paljuski t\u00e4hed. Meil vedas, sest meil kujunes lihtsalt super meeskond ja k\u00f5ik olid motiveeritud ideest teha see veebis. K\u00f5ik need kolm kuud andis meile energiat, et me \u201etegime YouTube'i\u201d. Ma ei lasknud endal juukseid rebida, vaid \u00fctlesin k\u00f5ikidele, et k\u00f5ik sujub, sest tegelikult oli k\u00f5ik ammu l\u00e4bi arvutatud. <\/p>\n<p><\/p>\n<h1 id=\"pro-proizvoditelnost\">Tootlikkusest<\/h1>\n<p><\/p>\n<p>\u2014 Kas saaksite r\u00e4\u00e4kida, kui palju inimesi oli veebisaidil \u00fchel teel? Kas esines j\u00f5udluse probleeme?<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> J\u00f5udluse probleeme ei esinenud, nagu me juba \u00fctlesime. \u00dcksikutel ettekannetel oli maksimaalselt 1300 inimest, see oli Heisenbugil.<\/p>\n<p><\/p>\n<p>\u2014 Kas kohaliku vaatamisega oli probleeme? Ja kas on v\u00f5imalik tehniline kirjeldus koos skeemidega, kuidas see k\u00f5ik t\u00f6\u00f6tab?<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Teeme sellest hiljem artikli.<\/p>\n<p><\/p>\n<p>Kohalikult saab isegi voogedastusi siluda. Kui konverentsid algasid, muutus see isegi lihtsamaks, kuna ilmusid tootmisvoogedastused, mida saame pidevalt j\u00e4lgida.<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Nii nagu ma aru saan, t\u00f6\u00f6tasid esiotsa arendajad kohalikult mokeidega, ja kuna voodamine arenduses on samuti l\u00fchike (5 minutit), siis sertifikaatide osas probleeme ei esine. <\/p>\n<p><\/p>\n<p>\u2014 K\u00f5ike testitakse, silutakse, isegi kohalikult. Seega, kirjutame artikli koos k\u00f5ikide tehniliste detailidega, n\u00e4itame ja r\u00e4\u00e4gime k\u00f5igest skeemidega, kuidas see oli.<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Saate selle v\u00f5tta ja korrata. <\/p>\n<p><\/p>\n<p>\u2014 3 kuud.<\/p>\n<p><\/p>\n<h1 id=\"itog\">Kokkuv\u00f5te<\/h1>\n<p><\/p>\n<p>\u2014 K\u00f5ik see kokku k\u00f5lab \u00e4gedalt, arvestades, et see on tehtud v\u00e4ikese meeskonna poolt kolme kuu jooksul.<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> Suurte tiimide puhul see ei toimi. Aga v\u00e4iksem grupp inimesi, kes suhtlevad \u00fcksteisega tihedalt ja t\u00f5husalt ning saavad kokkuleppele, v\u00f5iks sellega hakkama saada. Neil ei ole vastumeelsusi, arhitektuur loodi kahe p\u00e4evaga, viidi l\u00f5pule ja ei ole tegelikult muutunud. \u00c4rin\u00f5uete karm v\u00e4ltimine ei v\u00f5imalda funktsionaalsete muutuste ja muudatuste kuhjumist. <\/p>\n<p><\/p>\n<p>\u2014 Mis j\u00e4i teie j\u00e4rgmiste \u00fclesannete nimekirja, kui suvekohvikud olid juba toimunud?<\/p>\n<p><\/p>\n<p><b>Nikolai:<\/b> N\u00e4iteks subtiitrid. Videotes liikuvad kirjed, h\u00fcpikaknad teatud kohtades s\u00f5ltuvalt sisu n\u00e4itamisest. N\u00e4iteks, kui esineja soovib k\u00fcsida publikult, ilmub ekraanile k\u00fcsitlus, mille tulemused saadetakse tagasi esinejale. Teatud sotsiaalne aktiivsus, nagu meeldimised, s\u00fcdamed, esituse hindamine, et saaks kohe tagasisidet anda ilma hilisemaid tagasiside vorme ootamata. Algne idee oli selline.<\/p>\n<p><\/p>\n<p>Ja veelgi enam, kogu platvormi lisamine, v\u00e4lja arvatud striiming ja konverents, sisaldab ka postkonverentsi olekut. Need on m\u00e4ngud (sealhulgas kasutajate loodud), v\u00f5imalik sisu varasemate konverentside kohta, integreeritud, m\u00e4rgistatud ja kasutajale k\u00e4ttesaadavad, samuti meie veebisaidil vaatamiseks saadaval.<noindex><a rel=\"nofollow\" href=\"https:\/\/live.jugru.org\/?utm_source=habr&amp;utm_medium=516688\">live.jugru.org<\/a><\/noindex>). <\/p>\n<p><\/p>\n<p>\u2014 Ait\u00e4h, poisid, vastuste eest!<\/p>\n<p>Kui meie suvek\u00f5nede seas on lugejaid, kes osalesid, jagage oma muljeid pleierist ja \u00fclekandest. Mis oli mugav, mis h\u00e4iris, mida sooviksite tulevikus n\u00e4ha?<\/p>\n<p><\/p>\n<p>Kui platvorm huvitab ja soovite n\u00e4ha seda \"t\u00f6\u00f6s\", siis kasutame seda taas meie <noindex><a rel=\"nofollow\" href=\"https:\/\/live.jugru.org\/?utm_source=habr&amp;utm_medium=516688\">s\u00fcgis-talviste konverentside v\u00e4ltel.<\/a><\/noindex>. Neid on terve rida, seega on peaaegu kindlasti sobiv teie jaoks.<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/jugru\/blog\/516688\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0447\u0435\u043d\u044c \u0432\u0435\u0441\u0451\u043b\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u0418\u0437-\u0437\u0430 \u043f\u0430\u043d\u0434\u0435\u043c\u0438\u0438 \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u043b\u0435\u0442\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u043e\u043d\u043b\u0430\u0439\u043d. \u0410 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0441\u043e\u0444\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435. \u0418 \u043d\u0430 \u044d\u0442\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041d\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":92596,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-92595","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0447\u0435\u043d\u044c \u0432\u0435\u0441\u0451\u043b\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u0418\u0437-\u0437\u0430 \u043f\u0430\u043d\u0434\u0435\u043c\u0438\u0438 \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u043b\u0435\u0442\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u043e\u043d\u043b\u0430\u0439\u043d. \u0410 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0441\u043e\u0444\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435. \u0418 \u043d\u0430 \u044d\u0442\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041d\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435\" \/>\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\/et\/blog\/administrirovanie\/razrabotat-videoplatformu-za-90-dnej\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\udd47\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0437\u0430 90 \u0434\u043d\u0435\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0447\u0435\u043d\u044c \u0432\u0435\u0441\u0451\u043b\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u0418\u0437-\u0437\u0430 \u043f\u0430\u043d\u0434\u0435\u043c\u0438\u0438 \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u043b\u0435\u0442\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u043e\u043d\u043b\u0430\u0439\u043d. \u0410 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0441\u043e\u0444\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435. \u0418 \u043d\u0430 \u044d\u0442\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041d\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/razrabotat-videoplatformu-za-90-dnej\" \/>\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-08-29T05:42:06+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-29T05:42:06+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\udd47 Videoplatvormi v\u00e4ljat\u00f6\u00f6tamine 90 p\u00e4evaga | ProHoster","description":"Sel aastal satume v\u00e4ga l\u00f5busatesse olukordadesse. Pandeemia t\u00f5ttu sai selgeks, et meie suvised konverentsid tuleb viia veebikeskkonda. Et neid veebis kvaliteetselt l\u00e4bi viia, ei sobinud valmis tarkvaralahendused, tuli kirjutada oma. Ja selleks oli meil kolm kuud. On selge, et need olid p\u00f5nevad kolm kuud. Kuid v\u00e4ljastpoolt ei","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/razrabotat-videoplatformu-za-90-dnej","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\udd47\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0437\u0430 90 \u0434\u043d\u0435\u0439 | ProHoster","og:description":"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0447\u0435\u043d\u044c \u0432\u0435\u0441\u0451\u043b\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u0418\u0437-\u0437\u0430 \u043f\u0430\u043d\u0434\u0435\u043c\u0438\u0438 \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u043b\u0435\u0442\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u043e\u043d\u043b\u0430\u0439\u043d. \u0410 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0441\u043e\u0444\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435. \u0418 \u043d\u0430 \u044d\u0442\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041d\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/razrabotat-videoplatformu-za-90-dnej","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-08-29T05:42:06+00:00","article:modified_time":"2020-08-29T05:42:06+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"92595","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 12:06:02","updated":"2022-09-30 11:38:11"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/92595","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=92595"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/92595\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/92596"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=92595"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=92595"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=92595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}