Arendada videoplatform 90 pÀeva jooksul

Sel kevadel olime vĂ€ga lĂ”busates tingimustes. Pandeemia tĂ”ttu sai selgeks, et meie suvised konverentsid tuleb ĂŒle viia veebiversiooni. Ja et neid veebis kvaliteetselt lĂ€bi viia, ei sobinud meile valmis tarkvaralahendused, pidime kirjutama oma. Selleks oli meil aega kolm kuud.

On selge, et need olid pĂ”nevad kolm kuud. Kuid kĂ”rvalvaatajale ei ole sugugi ilmselge, mis tĂ€pselt on veebikonverentside platvorm? Millest see koosneb? SeetĂ”ttu kĂŒsisin viimase suvise DevOops konverentsi kĂ€igus nendelt, kes vastutasid selle ĂŒlesande eest:

  • Nikolai MoltĆĄanov — JUG Ru Grupi tehniline direktor;
  • Vladimir Krasilshchik — pragmaatiline Java programmeerija, kes tegeleb tagaplaaniga (te olete vĂ”inud nĂ€ha tema ettekandeid meie Java konverentsidel);
  • Artyom NikĐŸĐœĐŸĐČ â€” vastutab kogu meie videostreamingu eest.

Muide, sĂŒgis-talviste konverentside kĂ€igus kasutame parandatud versiooni samast platvormist — nii et paljud Habr kasutajad saavad samuti selle kasutajateks.

Arendada videoplatform 90 pÀeva jooksul

Üldine pilt

— Milline oli meeskonna koosseis?

Nikolai MoltĆĄanov: Meil on analĂŒĂŒtik, disainer, testija, kolm frontend arendajat ja backend arendaja. Ja muidugi, T-kujuline spetsialist!

— Kuidas nĂ€gi protsess ĂŒldiselt vĂ€lja?

Nikolai: Kuni mÀrtsi keskpaigani ei olnud meil veebiversiooni jaoks mitte midagi valmis. Aga 15. mÀrtsil algas kogu tegevus veebis. Meil oli mitu hoidlat, planeerisime, arutasime pÔhistruktuuri ja tegime kÔik kuu ajaga.

See lÀbis muidugi klassikalised etapid: planeerimine, arhitektuur, omaduste valimine, nende omaduste hÀÀletamine, poliitikate mÀÀramine, disain, arendus ja testimine. LÔpuks 6. juunil kÀivitasime kÔik tootesse. TechTrain. Kogu sellele protsessile kulus 90 pÀeva.

— Kas me saime tehtud selle, millele me end lubasime?

Nikolai: Kuna me osaleme nĂŒĂŒd DevOops konverentsil veebis — siis on see oluline. Ma ise lubasin tuua tellijatele tööriista, millega on vĂ”imalik konverentsi veebis korraldada.

Ülesanne oli selline: andke meile tööriist, millega saame oma konverentse piletiholderitele edastada.

Kogu planeerimine jagunes mitmeks etapiks ja kÔik omadused (umbes 30 pÔhijoon) jaotati nelja kategooriasse:

  • mida me kindlasti teeme (ilma nendeta ei saa me elada),
  • mida me teeme teises jĂ€rjekorras,
  • mida me kunagi ei tee,
  • ja mida me kunagi-kunagi ei tee.

KÔik esimese kahe kategooria funktsioonid on meil tehtud.

— Ma tean, et kokku on loodud 600 JIRA-ĂŒlesannet. Kolme kuuga olete teinud 13 mikroteenust ja kahtlustan, et need ei ole kirjutatud ainult Java-s. Te kasutasite erinevaid tehnoloogiaid, teil on ĂŒles seatud kaks Kubernetes'i klastrit kolmes kĂ€ttesaadavuse tsoonis ja 5 RTMP-voogu Amazonis.

Vaatame nĂŒĂŒd sĂŒsteemi iga komponente eraldi.

Voogedastus

— Alustame sellest, kui meil on juba video pilt ja see edastatakse mingitesse teenustesse. Artyom, rÀÀgi, kuidas see voogedastus toimub?

Artyom Nikonov: Meie ĂŒldine skeem on jĂ€rgmine: kaamera pilt -> meie pult -> kohalik RTMP-server -> Amazon -> videopleierer. TĂ€iendavad ĂŒksikasjad selle kohta kirjutanud Habr'i juulis.

Üldiselt on kaks peamist teed, kuidas seda teha: kas riistvara vĂ”i tarkvara lahenduste pĂ”hjal. Me valisime tarkvaratee, kuna see on kauguses esinevate esinejate puhul lihtsam. Ei ole alati vĂ”imalik tuua esinejale teises riigis riistvara, kuid tarkvara paigaldamine tundub lihtsam ja usaldusvÀÀrsem.

Riistvara osas on meil mÔned kaamerad (meie stuudiotes ja kauguses esinejate juures) ning ka mÔned pultide arvud stuudios, mida tuleb vahel otse eetris laua all parandada.

Nende seadmete signaalid jĂ”uavad arvutitesse, kus on salvestus-, sisendi/vĂ€ljundi ja helikaardid. Seal signaalid segatakse ja kogutakse ĂŒlesseadistusteks:

Arendada videoplatform 90 pÀeva jooksul
NĂ€ide nelja esinejaga ĂŒlesseadmest

Arendada videoplatform 90 pÀeva jooksul
NĂ€ide nelja esinejaga ĂŒlesseadmest

Edasi tagatakse katkematu eetriga kolm arvutit: on ĂŒks peamine masin ja paar, mis töötavad vaheldumisi. Esimene arvuti kogub esimese ettekande, teine — pausi, esimene — jĂ€rgmise ettekande, teine — jĂ€rgmise pausi ja nii edasi. Peamine masin segab esimest teisega.

Sel viibib mingisugune kolmnurk, ja juhul, kui mĂ”ni neist sĂ”lmedest ebaĂ”nnestub, saame kiiresti ja kvaliteeti kaotamata jĂ€tkata sisu tarnimist klientidele. Selline olukord juhtus meil. Konverentside esimesel nĂ€dalal parandasime ĂŒhte masinat, lĂŒlitades seda sisse ja vĂ€lja. Tundub, et inimesed on meie tĂ”rketaluvuse ĂŒle rahul.

SeejĂ€rel jĂ”uavad voogedastused arvutitest kohalikele serveritele, millel on kaks ĂŒlesannet: RTMP-voogude suunamine ja varukoopiate salvestamine. Nii et meil on mitu salvestuspunkti. SeejĂ€rel saadetakse videovood osa meie sĂŒsteemist, mis on loodud Amazoni SaaS-teenuste peale. Kasutame MediaLive, S3, CloudFront.

Nikolai: Aga mis juhtub enne, kui video jÔuab vaatajateni? Kas te ei pea seda lÔikama kuidagi?

Artem: Kompresseerime video oma poolt ja saadame selle MediaLive'i. Seal kĂ€ivitame transkodeerijad. Need kodeerivad video reaalajas mitmesse kvaliteeti, et inimesed saaksid neid vaadata telefonides, halvema internetiĂŒhenduse korral suvilas ja nii edasi. Siis jagame need vood chunk'e, nii töötab protokoll HLS. Edastame frontendis esitusloendi, kus on viidatud nendele osadele.

— Kasutame 1080p resolutsiooni?

Artem: Laiuses on meil 1080p video — 1920 pikslit, kĂ”rguses veidi vĂ€hem, pilt on piklikum — sellel on omad pĂ”hjused.

MĂ€ngija

— Artjom kirjeldas, kuidas video jĂ”uab striimidesse, kuidas see jaotatakse erinevatesse mĂ€nguvariantidesse erinevate ekraanide resolutsioonide jaoks, lĂ”igatakse juppideks ja jĂ”uab mĂ€ngijasse. Kolja, rÀÀgi nĂŒĂŒd, mis see mĂ€ngija on, kuidas see striimi tarbib, miks HLS?

Nikolai: Meil on mĂ€ngija, mida jĂ€lgivad kĂ”ik konverentsi kĂŒlastajad.

Arendada videoplatform 90 pÀeva jooksul

Sisuliselt on see raamistiku peal, hls.js, mille peal on kirjutatud palju teisi mÀngijaid. Kuid me vajasime vÀga spetsiifilist funktsionaalsust: tagasi kerimist ja koha mÀrkimist, kus inimene asub, millist ettekannet ta hetkel vaatab. Samuti olid vajalikud oma layout'id, erinevad logod ja kÔik muu, mis meile sobis. SeetÔttu otsustasime kirjutada oma raamistiku (HLS'i peal) ja integreerida selle veebisaidile.

See on pĂ”hifunktsionaalsus, seega teostati see peaaegu esimesena. Ja selle ĂŒmber hakkas kĂ”ik muu juba arenema.

Tegemist on sellega, et mÀngija saavad autentimise kaudu tagasisideplatvormilt mÀngunimekirja koos linkidega juppidele, mis on seotud aja ja kvaliteediga, laadib vajalikke ja nÀitab kasutajale, tehes selle kÀigus teatud 'maagiat'.

Arendada videoplatform 90 pÀeva jooksul
Ajajoone nÀide

— Otseselt mĂ€ngijasse on sisse ehitatud nupp, mis kuvab kĂ”igi ettekannete ajajoone...

Nikolai: Jah, me lahendasime kasutaja navigeerimise probleemi kohe. Aprilli keskpaiku otsustasime, et ei hakka edastama igat meie konverentsi eraldi saidil, vaid koondame kĂ”ik ĂŒhte. Nii saavad Full Passi piletite omanikud vabalt vahetada erinevate konverentside vahel: nii otse-eetris kui ka möödunud ettekannete salvestuste vahel.

Ja et kasutajatele oleks lihtsam navigeerida praeguses otseĂŒlekandes ja vahetada teede vahel, otsustasime lisada nupu 'Kogu otseĂŒlekanne' ja horisontaalsed ettekannete kaardid vahetamiseks teemade ja ettekannete vahel. Seal on klaviatuuriga juhtimine.

— Kas sellel oli mingeid tehnilisi raskusi?

Nikolai: Raskusi oli kerimisribaga, kus on tÀhistatud erinevate ettekannete alguspunkte.

— LĂ”puks Ń€Đ”Đ°Đ»ĐžĐ·ĐŸĐČалО ĐČĐž ĐŸŃ‚ĐŒĐ”Ń‚ĐșĐž ĐœĐ° ĐżĐŸĐ»ĐŸŃĐ” ĐżŃ€ĐŸĐșрутĐșĐž Ń€Đ°ĐœŃŒŃˆĐ”, Ń‡Đ”ĐŒ YouTube?

Artem: Neil oli see siis beetaversioonis. Tundub, et see on ĂŒsna keeruline funktsioon, kuna nad on seda osaliselt testinud kasutajate peal viimase aasta jooksul. Ja nĂŒĂŒd on see lĂ”puks mĂŒĂŒgis.

Nikolai: Kuid me saime sellest kiiremini mĂŒĂŒgiversiooni. Ausalt öeldes, selle lihtsa funktsiooni taga on tohutult palju tagaplaani, esiplaani ja arvutusi ning matemaatikat mĂ€ngijas.

Frontend

— Uurime, kuidas see sisu, mida me nĂ€itame (ettekande kaart, esinejad, veebisait, ajakava), jĂ”uab esiplaani?

Vladimir Krasilshchik: Meil on mitu sisemist IT-sĂŒsteemi. On sĂŒsteem, kuhu on registreeritud kĂ”ik ettekanded ja kĂ”ik esinejad. On protsess, kuidas ettekandja konverentsil osaleb. Esineja esitab taotluse, sĂŒsteem salvestab selle, ja siis on mingi voosĂŒsteem, mille kaudu ettekande loomine toimub.

Arendada videoplatform 90 pÀeva jooksul
Nii nĂ€eb esineja voosĂŒsteemi.

See sĂŒsteem on meie sisearendus.

Edasi tuleb eraldi ettekannete pĂ”hjal koostada ajakava. Nagu teada, on see NP-raskusi tekitav ĂŒlesanne, kuid me saame selle kuidagi lahendatud. Selleks kĂ€ivitame teise komponendi, mis koostab ajakava ja saadab selle kolmandasse osalisse pilveteenusesse Contentful. Seal nĂ€eb kĂ”ik vĂ€lja nagu tabel, kus on konverentsi pĂ€evad, pĂ€evade jooksul ajavahemikud ning ajavahemike sees etteasted, pausid vĂ”i sponsorite tegevused. Seega sisu, mida me nĂ€eme, asub kolmandas osapis. Ja ĂŒlesanne on see tuua kodulehele.

Tundub, et veebileht on lihtsalt leht mĂ€ngijaga, ega midagi keerulist ei ole. VĂ€lja arvatud see, et see pole nii. Selle lehe taga olev taustasĂŒsteem lĂ€heb Contentful'i, toob sealt vĂ€lja ajakava, loob mĂ”ned objektid ja saadab need esikĂŒljele. Iga meie platvormi klient kasutab veebipĂ”hist soketiĂŒhendust, millega me saadame taustast esikĂŒljele ajakava uuenduse.

TÔeline juhtum: esineja vahetas konverentsi ajal töökohta. Peame vahetama tema ettevÔtteplaadi. Kuidas see tagaplaanilt toimub? KÔigile klientidele saadetakse uuendus veebipusleti kaudu ja edasi joonistab front-end ajaskaala ise. KÔik see toimub sujuvalt. Pilveteenuse ja meie mitmete komponentide kogum annab meile vÔimaluse kogu seda sisu luua ja edastada otsefrontile.

Nikolai: Siin on oluline tÀpsustada, et meie veebisait ei ole klassikaline SPA-rakendus. See on nii vormindatud, renderdatud veebisait kui ka SPA. Tegelikult nÀeb 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Àrel lehte nÀha; ta nÀeb kohe juba renderdatud lehte ning te tunnetate seda iga kord, kui konverentsi ettekandeid vahetate. KÔik toimub poole sekundi jooksul, kuna sisu on juba valmis ja paigutatud Ôigesse kohta.

— KokkuvĂ”tteks, loetleme tehnoloogiad. TĂ”ema rÀÀkis, et meil on 5 Amazon'i voogu, kuhu edastame video ja heli. Seal on meil bash-skriptid, nende abil kĂ€ivitame, konfigureerime...

Artem: See toimub AWS API kaudu, seal on veel palju kĂ”rvalt tehnilisi teenuseid. Me jagasime oma ĂŒlesandeid nii, et mina edastan {domain} ja es frontend- ja backend-arendajad vĂ”tavad sealt. Meil on mĂ”ned oma raamistud, et lihtsustada sisu avaldamist, mida me hiljem teeme 4K jne. Kuna tĂ€htaegadega oli vĂ€ga kitsas, tegime seda peaaegu tĂ€ielikult AWS-i pĂ”hjal. CloudFront, ja sealt saavad frontend- ja backend-arendajad sisu kĂ€tte. Meie mĂ€ngijas on TypeScript, React, Next.JS. Ja meie backendis on mitu teenust C#, Java, Spring Boot ja Node.js. KĂ”ik see on juurutatud Kubernetesega, kasutades Yandex Cloudi infrastruktuuri.

Soovin veel mÀrkida, et kui mul oli vaja platvormiga tutvuda, ei osutunud see keeruliseks: kÔik vÀljaanded on GitLabis, kÔik on hÀsti nimetatud, on kirjutatud testid ja olemas on dokumentatsioon. See tÀhendab, et isegi kriisiolukordades hooliti sellistest asjadest.

Äri- ja analĂŒĂŒsi piirangud

Ärireeglid ja analĂŒĂŒs

— Meie sihiks oli Ă€ritegevuse nĂ”uetele vastamine 10 000 kasutajale. On aeg rÀÀkida Ă€ri piirangutest, millega silmitsi seisisime. Me pidime tagama kĂ”rge koormuse ja jĂ€rgima isikuandmete kaitse seadust. Mis veel?

Nikolai: Esialgu lĂ€ksime vĂ€lja videot nĂ”udmistest. KĂ”ige olulisem on jaotatud videote salvestamine ĂŒle maailma, et tagada kiire kohaletoimetamine kliendile. Teised nĂ”uded hĂ”lmasid 1080p resolutsiooni ning tagasi kerimise vĂ”imalust, mida paljud teised ei ole reaalajas rakendanud. Hiljem lisasime vĂ”imaluse aktiveerida 2x kiirus, mis vĂ”imaldas "jĂ”uda" otseĂŒlekandele ning jĂ€tkata konverentsi reaalajas vaatamist. Lisaks tuli kasuks ajajoone mĂ€rgistamise funktsionaalsus. Samuti pidime olema talitluskindlad ja vastu pidama 10 000 ĂŒhenduse koormusele. Tagaplaanil tĂ€hendab see umbes 10 000 ĂŒhendust, korrutatuna 8 pĂ€ringuga iga lehe vĂ€rskenduse kohta. See teeb kokku 80 000 RPS/sekundis. Suhteliselt palju.

— Kas nĂ”udmised "virtuaalse nĂ€ituse" osas, sealhulgas partnerite veebistendid, olid samuti olemas?

Nikolai: Jah, seda tuli teha ĂŒsna kiiresti ja universaalselt. Iga konverentsi jaoks oli meil kuni 10 partnerfirmat, kelle lehti tuli nĂ€dala vĂ”i kahe jooksul vormindada. Samas erineb nende sisu formaadilt veidi. Kuid vĂ€lja töötati teatud templite genereerija, mis kogus neid lehti reaalajas, praktiliselt arendustegevuses edasise osaluseta.

— Oli ka nĂ”uded reaalajas vaateanalĂŒĂŒtikale ja statistikale. Tean, et me kasutame selleks Prometheust, aga rÀÀgi lĂ€hemalt: milliseid nĂ”udeid me tĂ€idame analĂŒĂŒtika osas ja kuidas see on ellu viidud?

Nikolai: Alguses on meil turunduslikud nĂ”uded A/B testimise jaoks ja teabe kogumise kohta, et aru saada, kuidas edaspidi klientidele parimat sisu edastada. Samuti on nĂ”uded teatud analĂŒĂŒtika kohta partnerite tegevuse ja analĂŒĂŒsi osas, mida te nĂ€ete (kĂŒlastuste loendur). KĂ”ik teave kogutakse reaalajas.

Seda teavet saame esitada ka aggregeeritud kujul, isegi esinejatele: kui palju inimesi sind mingil hetkel vaatas. Ühtlasi ei jĂ€lgita isiklikku kontot ja isikuandmeid vastavalt 152. seadusele.

Platvormil on juba turunduslikud tööriistad ja meie mÔÔdikud kasutajate aktiivsuse mÔÔtmiseks reaalajas (kes vaatas millise sekundi ettekandest), et koostada ettekannete kĂŒlastamise graafikuid. Nendel andmetel pĂ”hinevad uuringud, mis aitavad jĂ€rgmisi konverentse paremaks muuta.

Pettus

— Kas meil on pettusevastaseid mehhanisme?

Nikolai: Ärivaldkonna range ajaraami tĂ”ttu ei olnud algselt eesmĂ€rk kohe blokeerida liigseid ĂŒhendusi. 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Ă€givaldsed rikkumised oleme blokeerinud.

Vladimir: Tuleb tĂ”deda, et ĂŒks blokeeritud kasutajatest mĂ”istis, miks see juhtus. Ta tuli, vabandas ja lubas pileti osta.

— Selleks, et kĂ”ik see toimuks, peate tĂ€ielikult jĂ€lgima kĂ”iki kasutajaid sisse- ja vĂ€ljaminekul, alati teadma, mida nad teevad. Kuidas see sĂŒsteem töötab?

Vladimir: Soovin rÀÀkida analĂŒĂŒtikast ja statistikatest, mida hiljem analĂŒĂŒsime ettekande edukuse hindamiseks vĂ”i mille vĂ”ime hiljem partneritele esitada. KĂ”ik kliendid on veebipĂ”hise socket-ĂŒhenduse kaudu ĂŒhendatud teatud tagaplaani klastriga. Seal on Hazelcast. Iga klient saadab igas ajavahemikus andmeid selle kohta, mida ta teeb ja millist lugu ta vaatab. Edasi kogutakse see teave kiiresti Hazelcast’i töödega ja saadetakse tagasi kĂ”igile, kes neid lugusid vaatavad. NĂ€eme nurgas, kui palju inimesi on praegu koos meiega.

Arendada videoplatform 90 pÀeva jooksul

Sama teave koguneb Mongo ja liigub meie andmejĂ€rve, mille pĂ”hjal saame luua huvitavamaid graafikuid. KĂŒsitakse: kui palju unikaalseid kasutajaid on seda ettekannet vaadanud? LĂ€hme Postgres, seal on kĂ”ik inimeste pingid, kes said selle ettekande id kaudu. Oleme kogunud unikaalsed ja nĂŒĂŒd saame aru.

Nikolai: Aga samas saame reaalajas andmeid Prometheuse kaudu. See on suunatud kÔigile Kubernetes teenustele ning ka Kubernetesile endale. See kogub absoluutselt kÔike, ja Grafana abil saame koostada igasuguseid graafikuid reaalajas.

Vladimir: Ühest kĂŒljest laadime selle edasi edasiseks töötlemiseks, nĂ€iteks OLAP-i jaoks. OLTP rakendus laadib selle Prometheusse, Grafanasse ning graafikud isegi kattuvad!

— Just see eriline juhtum, kui graafikud kattuvad.

DĂŒnaamilised muutused

— RÀÀkige, kuidas dĂŒnaamilised muutused toimuvad: kui ettekande tegemine tĂŒhistatakse 6 minutit enne algust, siis milline on toimingute jĂ€rjestus? Milline pipeline kĂ€ivitub?

Vladimir: Pipeline on vĂ€ga tinglik. On mitu vĂ”imalust. Esimene — ajakava koostamise programm töötab ja muudab selle ajakava. Muudetud ajakava laaditakse Contentfuli. PĂ€rast seda backend mĂ”istab, et Contentfulis on selle konverentsi osas muudatused, vĂ”tab ja kogub uuesti kokku. KĂ”ik kogutakse ja saadetakse websocketi kaudu.

Teine vÔimalus, kui kÔik toimub meeletus tempos: toimetaja muudab kÀsitsi Contentfulis teavet (lingid Telegrami, ettekandjate esitused jne) ja kÀivitub sama loogika nagu esimesel korral.

Nikolai: KÔik toimub ilma lehe vÀrskendamiseta. KÔik muudatused toimuvad kliendi jaoks tÀiesti sujuvalt. Sama kehtib ka ettekannete vahetamise kohta. Kui aeg peab kÀtte jÔudma, muutub ettekande ja liidese sisu.

Vladimir: Samuti on ajapunktid ettekannete alguseks ajajoonel. Alguses ei ole midagi. Kui kursor punasele ribale viia, ilmuvad mĂ”ne hetke pĂ€rast tĂ€nu ĂŒlekanne reĆŸissöörile ajapunktid. ReĆŸissöör mÀÀrab Ă”iged ĂŒlekande algused, backend fikseerib selle muudatuse, arvutab vastavalt konverentsi ajakavale ettekannete algus- ja lĂ”puaja kogu rajale ning saadab selle meie klientidele, mĂ€ngija joonistab ajapunktid. NĂŒĂŒd saab kasutaja rahulikult navigeerida ettekande alguse ja lĂ”pu vahel. See oli range Ă€ri nĂ”ue, vĂ€ga mugav ja kasulik. Sa ei raiska aega, et leida ettekande tegelikku algusaega. Ja kui me teeme eelvaate, on see ĂŒldse suurepĂ€rane.

Deployment

— Ma tahaksin kĂŒsida deployment'i kohta. Kolja ja meeskond veetsid alguses palju aega, et seadistada kogu infrastruktuur, milles meil kĂ”ik töö kĂ€ib. RÀÀgi, millest see kĂ”ik koosneb?

Nikolai: Meil oli algselt tehnilisest vaatenurgast nÔue, et toode oleks maksimaalselt sÔltumatu mistahes tarnijast. Ei sobinud enda viimine AWS-i ja AWS-i spetsiifiliste Terraform-skriptide, Yandexi vÔi Azure'i kasutamine jne. Me pidime omal ajal kuskile kolima.

Esimese kolme nÀdala jooksul otsisime pidevalt, kuidas seda kÔige paremini teha. LÔpuks jÔudsime jÀreldusele, et Kubernetes on meie puhul ideaalne lahendus, kuna see vÔimaldab luua automaatselt skaleeritavaid teenuseid, automaatset vÀljalaskmist ning peaaegu kÔiki teenuseid kohe kÀtte saada. Loomulikult tuli kÔiki teenuseid Ôpetada Kubernetesega, Dockeriga töötama ja ka meeskond pidi selle omandama.

Meil on kaks klastrit: katsetamiseks ja tootmiseks. Need on riistvara ja seadistuste osas tĂ€pselt ĂŒhesugused. Me rakendame infrastruktuuri koodina. KĂ”ik 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.

Saame kiiresti (tagaplaanil 10 minuti, esiplaanil 5 minuti jooksul) rakendusi igas keskkonnas, koos kĂ”igi testide, integratsioonide, funktsionaalsete testide ja integratsioonitestide kĂ€ivitamisega, ning testime ka koormustestidega testkeskkonnas enam-vĂ€hem sama, mida soovime tootmisĂŒmbruses saavutada.

Testide kohta

— Te testite peaaegu kĂ”ike, raske on uskuda, et olete kĂ”ik kirjutanud. Kas saaksite rÀÀkida tagaplaani testide katmisest: kui palju on kaetud, milliseid teste on olemas?

Vladimir: Oleme kirjutanud kahte tĂŒĂŒpi teste. Esimesed on komponenditestid. Testid kĂ”igi Spring-rakenduse ja andmebaasi tasemete kontrollimiseks Testcontainers. See kontrollib kĂ”ige kĂ”rgemal tasemel Ă€ristsenaariume. Ma ei testita funktsioone. Testime ainult mĂ”ningaid suuremaid asju. NĂ€iteks simuleeritakse testis otse kasutaja sisselogimise protsessi, sellele kasutajale piletite taotlemist, kuhu ta vĂ”ib minna, ning juurdepÀÀsu taotlemist voogu vaatamiseks. VĂ€ga arusaadavad kasutajascenaarid.

Umbes sama on rakendatud nn integratsioonitestides, mis tegelikult töötavad keskkonnas. Tegelikult, kui jĂ€rjekordne rakendus on tootmisse viidud, töötavad seal ka tĂ”elised pĂ”histsenaariumid. Sama sisselogimine, piletite taotlemine, juurdepÀÀsu taotlemine CloudFrontile, kontrollimine, et voog on tĂ”esti seotud minu Ă”igustega, reĆŸissööri liidese kontrollimine.

Praegu on mul kÀigus umbes 70 komponente testi ja umbes 40 integratsioonitestis. Katvus on vÀga lÀhedane 95%-le. See on komponentide puhul, integratsiooniliste puhul on see vÀiksem, seal pole lihtsalt nii palju vaja. Arvestades, et projektis on erinevad koodigeneratsioonid, on see vÀga hea nÀitaja. Pole olnud teist vÔimalust teha seda, mida me kolme kuuga tegime. Sest kui me oleksime kÀsitsi testinud, andes funktsioone meie testijale, kes oleks leidnud vigu ja tagastanud need meile parandamiseks, oleks see koodide hÀÀlestamise ring vÀga pikk, ja me ei oleks mahtunud mingitesse tÀhtaegadesse.

Nikolai: Ütleme nii, et kogu platvormi regressioonitestimiseks, kui mĂ”nda funktsiooni muudetakse, peab kaks pĂ€eva istuma ja igasse kohta klikkima.

Vladimir: SeetĂ”ttu on suur edu, et kui ma funktsiooni hindan, ĂŒtlen, et mul on vaja 4 pĂ€eva kahe lihtsa kĂ€epideme ja 1 websocketi jaoks, Andrei lubab. Ta on juba harjunud, et sellesse 4 pĂ€eva on sisse arvestatud 2 tĂŒĂŒpi teste, ja siis, tĂ”enĂ€oliselt, see töötab.

Nikolai: Mul on samuti kirjutatud 140 testi: komponendi + funktsionaalsete testide, mis teevad sama asja. KÔiki samu stsenaariume testitakse nii tootmises, testimisel kui ka arenduses. Samuti on meil hiljuti ilmunud funktsionaalsed pÔhilised UI-testid. Nii katame kÔige pÔhifunktsioonid, mis vÔivad kokku kukkuda.

Vladimir: Loomulikult tasub rÀÀkida koormustestidest. Oli vaja kontrollida platvormi koormuse all, mis on lÀhedane reaalsusele, et mÔista, mis toimub Rabbitiga, mis toimub JVM-idega, kui palju tegelikult mÀlu on vajalik.

— Ma ei tea tĂ€pselt, kas me testime midagi voogude kĂŒljest, aga mĂ€letan, et meil oli probleeme transkodeerijatega, kui me korraldasime kohtumisi. Kas me testisime vooge?

Artem: Testiti iteratiivselt. Korraldades kohtumisi. Kohtumiste korraldamise kÀigus tekkis umbes 2300 JIRA-piletit. Need on lihtsalt malli asjad, mida inimesed tegid kohtumiste korraldamiseks. VÔtsime platvormi osad eraldi lehe jaoks kohtumistele, millega tegeles Kirill Tolkachev (tolkkv).

Ausalt öeldes ei olnud suuri probleeme. Ainult paar korda tabasime CloudFront'i vahemĂ€luga seotud vigu, lahendasime need ĂŒsna kiiresti — lihtsalt seadistasime poliitikad ĂŒmber. Vigu oli oluliselt rohkem inimestes, ĂŒrituste voogedastussĂŒsteemides.

Konverentside ajal tuli kirjutada veel mitu eksportööri, et katta rohkem seadmeid ja teenuseid. Kohati tuli teha enda lahendusi ainult mÔÔdikute tĂ”ttu. AV (audiovisuaal) riistvara maailm ei ole just roosiline — sul on mingi seadme 'API', millele sa ei saa lihtsalt mĂ”ju avaldada. Ja kaugeltki ei ole kindel, et sa saad vajalikku teavet kĂ€tte. Riistvaratootjad on tĂ”eliselt aeglased ning nendelt on peaaegu vĂ”imatu saavutada soovitud tulemusi. Kokku ĂŒle 100 seadme, nad ei anna seda, mida vajad, ja sa kirjutad kummalisi ja liigseid eksportööre, mille kaudu on kuidagi vĂ”imalik sĂŒsteemi tĂ”rkeid lahendada.

Seadmed

— MĂ€letan, kuidas enne konverentse tĂ€iendasime osaliselt varustust.

Artem: Ostsin arvuteid, sĂŒlearvuteid, akublokke. Praegu suudame ilma elektrita elada 40 minutit. Juunis oli Peterburis tugev storms — seega toimus meil selline elektrikatkestus. Samas tulevad meile mitmed teenusepakkujad optiliste linkidega erinevatest kohtadest. See on tĂ”esti 40 minutit hoone seisakut, mille jooksul pĂ”leb valgus, töötab heli, kaamerad jne.

— Meil on internetiga sarnane lugu. Kontoris, kus asuvad meie stuudiod, oleme pĂ”randate vahel venitanud tugeva vĂ”rgu.

Artem: Meil on 20 GBit optikat pĂ”randate vahel. Edasi on pĂ”randatel optika, mĂ”nes kohas mitte, kuid igal juhul on vĂ€hem kui gigabiti kanaleid — edastame nende kaudu konverentside videoid. Üldiselt on vĂ€ga mugav töötada enda infrastruktuuriga, offline-konverentside korraldamisel saab seda harva teha.

— Juba enne JUG Ru Groupis töötamist nĂ€gin, kuidas masinad öö jooksul offline-konverentsidel ĂŒles seatakse, kus on suur monitor kĂ”igi metrikatega, mida te Grafanas koostate. Praegu on ka komandokeskus, kus istub arendustiim, kes konverentsi ajal parandab vigu ja arendab funktsioone. Sellel on seire sĂŒsteem, mis kuvatakse suurele ekraanile. Artyom, Kolja ja teised poisid istuvad ja jĂ€lgivad, et kĂ”ik ei kukuks ning töötaks sujuvalt.

KÔrvaltegevused ja probleemid

— Te rÀÀkisite hĂ€sti meie Amazoni voogedastusest, veebimĂ€ngijast, mis on kirjutatud erinevates programmeerimiskeeltes, tagamisel, et tingimused oleksid tĂ€idetud, sealhulgas isiklik konto, mis toetab nii juriidilisi kui fĂŒĂŒsilisi isikuid, ning saame integreerida kellegagi OAuth 2.0 kaudu, seal on anti-pettuse sĂŒsteem ja kasutaja blokeerimine. Saame dĂŒnaamiliselt vĂ€lja anda muudatusi, kuna oleme selle hĂ€sti teinud ja see kĂ”ik on testitud.

Mind huvitab teada, millised olid kummalised olukorrad seoses millegi kÀivitamisega. Kas oli kummalisi olukordi, kui töötasite vÀlja tagaplaani, esitlust, ning juhtus, et midagi lÀks veidralt ja te ei teadnud, mida sellega teha?

Vladimir: Minu arvates oli seda ainult viimased kolm kuud. Igal pÀeval. Nagu nÀha on, on kÔik mu juuksed vÀlja rebitud.

Arendada videoplatform 90 pÀeva jooksul
Vladimir Krasilyshchik kolme kuu pÀrast, mil juhtus, et midagi lÀks veidralt ja keegi ei teadnud, mida sellega teha.

Iga pĂ€ev juhtus midagi sellist, kui tuli hetk, kus sa haarad ja rebid endalt juukseid Ă€ra, vĂ”i mĂ”istad, et kedagi enam pole ja ainult sina saad seda teha. Meie esimene suurem ĂŒritus oli TechTrain. 6. juuni kell 2 öösel ei olnud meil ikka veel töökeskkond ĂŒles tĂ”stetud, seda tegi Kola. Ja isiklik konto ei töötanud, nagu ka OAuth2.0 autoriseerimiserver. Me muutsime selle OAuth2.0 teenusepakkujaks, et selle kaudu platvormile ĂŒhenduda. Ma olin ilmselt juba 18 tundi jĂ€rjest töötanud, vaatasin arvutisse ja ei nĂ€inud midagi, ei saanud aru, miks see ei tööta, ja Kola vaatas mu koodi kaugelt, otsis vead Springi konfiguratsioonist, leidis need ja isiklik konto hakkas tööle, samuti tootmises.

Nikolai: Ja tund enne TechTrain'i ilmumine oli toimunud.

Siin kujunesid paljuski tĂ€hed. Meil vedas, sest meil kujunes lihtsalt super meeskond ja kĂ”ik olid motiveeritud ideest teha see veebis. KĂ”ik need kolm kuud andis meile energiat, et me „tegime YouTube'i”. Ma ei lasknud endal juukseid rebida, vaid ĂŒtlesin kĂ”ikidele, et kĂ”ik sujub, sest tegelikult oli kĂ”ik ammu lĂ€bi arvutatud.

Tootlikkusest

— Kas saaksite rÀÀkida, kui palju inimesi oli veebisaidil ĂŒhel teel? Kas esines jĂ”udluse probleeme?

Nikolai: JĂ”udluse probleeme ei esinenud, nagu me juba ĂŒtlesime. Üksikutel ettekannetel oli maksimaalselt 1300 inimest, see oli Heisenbugil.

— Kas kohaliku vaatamisega oli probleeme? Ja kas on vĂ”imalik tehniline kirjeldus koos skeemidega, kuidas see kĂ”ik töötab?

Nikolai: Teeme sellest hiljem artikli.

Kohalikult saab isegi voogedastusi siluda. Kui konverentsid algasid, muutus see isegi lihtsamaks, kuna ilmusid tootmisvoogedastused, mida saame pidevalt jÀlgida.

Vladimir: Nii nagu ma aru saan, töötasid esiotsa arendajad kohalikult mokeidega, ja kuna voodamine arenduses on samuti lĂŒhike (5 minutit), siis sertifikaatide osas probleeme ei esine.

— KĂ”ike testitakse, silutakse, isegi kohalikult. Seega, kirjutame artikli koos kĂ”ikide tehniliste detailidega, nĂ€itame ja rÀÀgime kĂ”igest skeemidega, kuidas see oli.

Vladimir: Saate selle vÔtta ja korrata.

— 3 kuud.

KokkuvÔte

— KĂ”ik see kokku kĂ”lab Ă€gedalt, arvestades, et see on tehtud vĂ€ikese meeskonna poolt kolme kuu jooksul.

Nikolai: Suurte tiimide puhul see ei toimi. Aga vĂ€iksem grupp inimesi, kes suhtlevad ĂŒksteisega tihedalt ja tĂ”husalt ning saavad kokkuleppele, vĂ”iks sellega hakkama saada. Neil ei ole vastumeelsusi, arhitektuur loodi kahe pĂ€evaga, viidi lĂ”pule ja ei ole tegelikult muutunud. ÄrinĂ”uete karm vĂ€ltimine ei vĂ”imalda funktsionaalsete muutuste ja muudatuste kuhjumist.

— Mis jĂ€i teie jĂ€rgmiste ĂŒlesannete nimekirja, kui suvekohvikud olid juba toimunud?

Nikolai: NĂ€iteks subtiitrid. Videotes liikuvad kirjed, hĂŒpikaknad teatud kohtades sĂ”ltuvalt sisu nĂ€itamisest. NĂ€iteks, kui esineja soovib kĂŒsida publikult, ilmub ekraanile kĂŒsitlus, mille tulemused saadetakse tagasi esinejale. Teatud sotsiaalne aktiivsus, nagu meeldimised, sĂŒdamed, esituse hindamine, et saaks kohe tagasisidet anda ilma hilisemaid tagasiside vorme ootamata. Algne idee oli selline.

Ja veelgi enam, kogu platvormi lisamine, vÀlja arvatud striiming ja konverents, sisaldab ka postkonverentsi olekut. Need on mÀngud (sealhulgas kasutajate loodud), vÔimalik sisu varasemate konverentside kohta, integreeritud, mÀrgistatud ja kasutajale kÀttesaadavad, samuti meie veebisaidil vaatamiseks saadaval.live.jugru.org).

— AitĂ€h, poisid, vastuste eest!

Kui meie suvekĂ”nede seas on lugejaid, kes osalesid, jagage oma muljeid pleierist ja ĂŒlekandest. Mis oli mugav, mis hĂ€iris, mida sooviksite tulevikus nĂ€ha?

Kui platvorm huvitab ja soovite nĂ€ha seda "töös", siis kasutame seda taas meie sĂŒgis-talviste konverentside vĂ€ltel.. Neid on terve rida, seega on peaaegu kindlasti sobiv teie jaoks.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster