Utveckla en videoplattform pÄ 90 dagar

I vÄras befann vi oss i mycket glada förhÄllanden. PÄ grund av pandemin blev det klart att vÄra sommarkonferenser behövde flyttas online. Och för att kunna genomföra dem online pÄ ett effektivt sÀtt var fÀrdiga mjukvarulösningar inte lÀmpliga för oss, vi behövde skriva vÄra egna. Och vi hade tre mÄnader pÄ oss att göra det hÀr.

Det Àr klart att det har varit tre spÀnnande mÄnader. Men utifrÄn Àr det inte helt sjÀlvklart: vad Àr en onlinekonferensplattform? Vilka delar bestÄr den av? DÀrför frÄgade jag vid den sista av sommarens DevOops-konferenser de som var ansvariga för denna uppgift:

  • Nikolay Molchanov - teknisk chef för JUG Ru Group;
  • Vladimir Krasilshchik Ă€r en pragmatisk Java-programmerare som arbetar pĂ„ backend (du kan ocksĂ„ se hans rapporter pĂ„ vĂ„ra Java-konferenser);
  • Artyom Nikonov Ă€r ansvarig för all vĂ„r videoströmning.

Förresten, pÄ höst-vinterkonferenserna kommer vi att anvÀnda en förbÀttrad version av samma plattform - sÄ mÄnga habra-lÀsare kommer fortfarande att vara dess anvÀndare.

Utveckla en videoplattform pÄ 90 dagar

Hela bilden

— Hur var lagets sammansĂ€ttning?

Nikolay Molchanov: Vi har en analytiker, en designer, en testare, tre frontendare och en back-end. Och, naturligtvis, en T-formad specialist!

— Hur sĂ„g processen ut generellt?

Nikolai: Fram till mitten av mars hade vi ingenting klart för online alls. Och den 15 mars började hela onlinekarusellen snurra. Vi satte upp flera förvar, planerade, diskuterade grundarkitekturen och gjorde allt pÄ tre mÄnader.

Detta gick naturligtvis igenom de klassiska stadierna av planering, arkitektur, funktionsval, röstning för dessa funktioner, policy för dessa funktioner, deras design, utveckling, testning. Som ett resultat rullade vi ut allt till produktion den 6 juni. TechTrain. Det fanns 90 dagar för allt.

— Lyckades vi genomföra det vi Ă„tagit oss?

Nikolai: Eftersom vi nu deltar i DevOops-konferensen online betyder det att det fungerade. Jag har personligen engagerat mig i huvudsaken: Jag kommer att ge kunderna ett verktyg som de kan göra en onlinekonferens med.

Utmaningen var denna: ge oss ett verktyg med vilket vi kan sÀnda vÄra konferenser till biljettinnehavare.

All planering var uppdelad i flera steg, och alla funktioner (cirka 30 globala) delades in i fyra kategorier:

  • vilket vi definitivt kommer att göra (vi kan inte leva utan dem),
  • vilket vi kommer att göra för det andra,
  • vilket vi aldrig kommer att göra,
  • och som vi aldrig nĂ„gonsin kommer att göra.

Vi gjorde alla funktioner frÄn de tvÄ första kategorierna.

— Jag vet att totalt 600 JIRA-nummer skapades. PĂ„ tre mĂ„nader skapade du 13 mikrotjĂ€nster, och jag misstĂ€nker att de inte bara skrevs i Java. Du anvĂ€nde olika tekniker, du har tvĂ„ Kubernetes-kluster i tre tillgĂ€nglighetszoner och 5 RTMP-strömmar i Amazon.

LÄt oss nu titta pÄ varje komponent i systemet separat.

Strömning

— LĂ„t oss börja med nĂ€r vi redan har en videobild, och den överförs till vissa tjĂ€nster. Artyom, berĂ€tta hur den hĂ€r streamingen gĂ„r till?

Artyom Nikonov: VÄrt allmÀnna schema ser ut sÄ hÀr: bild frÄn kameran -> vÄrt kontrollrum -> lokal RTMP-server -> Amazon -> videospelare. Fler detaljer skrev om det pÄ Habré i juni.

I allmÀnhet finns det tvÄ globala sÀtt att göra detta: antingen pÄ hÄrdvara eller baserade pÄ mjukvarulösningar. Vi valde mjukvaruvÀgen eftersom det Àr lÀttare nÀr det gÀller fjÀrrhögtalare. Det Àr inte alltid möjligt att ta med hÄrdvara till en högtalare i ett annat land, men att leverera mjukvara till högtalaren verkar enklare och mer tillförlitligt.

Ur hÄrdvarusynpunkt har vi ett visst antal kameror (i vÄra studior och vid fjÀrrhögtalare), ett visst antal fjÀrrkontroller i studion, som ibland mÄste repareras precis under bordet under sÀndningen.

Signaler frÄn dessa enheter kommer in i datorer med inspelningskort, in-/utgÄngskort och ljudkort. DÀr blandas signalerna och sÀtts ihop till layouter:

Utveckla en videoplattform pÄ 90 dagar
Exempel pÄ layout för 4 högtalare

Utveckla en videoplattform pÄ 90 dagar
Exempel pÄ layout för 4 högtalare

Vidare tillhandahÄlls kontinuerlig sÀndning med hjÀlp av tre datorer: det finns en huvudmaskin och ett par fungerande i tur och ordning. Den första datorn samlar in den första rapporten, den andra - pausen, den första - nÀsta rapport, den andra - nÀsta paus och sÄ vidare. Och huvudmaskinen blandar den första med den andra.

Detta skapar en sorts triangel, och om nÄgon av dessa noder misslyckas kan vi snabbt och utan kvalitetsförlust fortsÀtta att leverera innehÄll till kunderna. Vi hade en sÄdan situation. Under den första konferensveckan fixade vi en maskin, slog pÄ/av den. Folk verkar vara nöjda med vÄr motstÄndskraft.

DÀrefter gÄr strömmarna frÄn datorerna till en lokal server, som har tvÄ uppgifter: dirigera RTMP-strömmar och spela in sÀkerhetskopior. SÄ vi har flera inspelningspunkter. Videoströmmarna skickas sedan till den del av vÄrt system som bygger pÄ Amazon SaaS-tjÀnster. Vi anvÀnder MediaLive:,S3, CloudFront.

Nikolai: Vad hÀnder dÀr innan videon nÄr publiken? Du mÄste klippa den pÄ nÄgot sÀtt, eller hur?

Artyom: Vi komprimerar videon frÄn vÄr sida och skickar den till MediaLive. Vi lanserar omkodare dÀr. De omkodar videor i realtid till flera upplösningar sÄ att folk kan titta pÄ dem pÄ sina telefoner, via dÄligt internet i landet och sÄ vidare. Sedan skÀrs dessa bÀckar i bitar, sÄ hÀr fungerar protokollet HLS. Vi skickar en spellista till frontend som innehÄller pekare till dessa bitar.

— AnvĂ€nder vi 1080p-upplösning?

Artyom: Bredden pÄ vÄr video Àr densamma som 1080p - 1920 pixlar, och höjden Àr lite mindre, bilden Àr mer lÄngstrÀckt - det finns anledningar till detta.

Spelare

— Artyom beskrev hur videon kommer in i streams, hur den distribueras i olika spellistor för olika skĂ€rmupplösningar, skĂ€rs i bitar och kommer in i spelaren. Kolya, berĂ€tta nu för mig vilken typ av spelare det hĂ€r Ă€r, hur den förbrukar strömmen, varför HLS?

Nikolai: Vi har en spelare som alla konferenstittare kan titta pÄ.

Utveckla en videoplattform pÄ 90 dagar

I huvudsak Àr detta ett omslag runt biblioteket hls.js, som mÄnga andra spelare Àr skrivna pÄ. Men vi behövde mycket specifik funktionalitet: spola tillbaka och markera platsen dÀr personen Àr, vilken rapport han tittar pÄ just nu. Vi behövde Àven egna layouter, alla möjliga logotyper och allt annat som byggdes in hos oss. DÀrför bestÀmde vi oss för att skriva vÄrt eget bibliotek (ett omslag över HLS) och bÀdda in det pÄ sajten.

Detta Àr rotfunktionen, sÄ den implementerades nÀstan först. Och sedan vÀxte allt runt det.

Faktum Àr att genom auktorisering fÄr spelaren frÄn backend en spellista med lÀnkar till bitar som Àr korrelerade med tid och kvalitet, laddar ner de nödvÀndiga och visar dem för anvÀndaren och utför lite "magi" lÀngs vÀgen.

Utveckla en videoplattform pÄ 90 dagar
Exempel pÄ tidslinje

— En knapp Ă€r inbyggd direkt i spelaren för att visa en tidslinje över alla rapporter...

Nikolai: Ja, vi löste omedelbart problemet med anvÀndarnavigering. I mitten av april beslutade vi att vi inte skulle sÀnda var och en av vÄra konferenser pÄ en separat webbplats, utan skulle kombinera allt pÄ en. SÄ att anvÀndare av Full Pass-biljett fritt kan vÀxla mellan olika konferenser: bÄde livesÀndningar och inspelningar av tidigare.

Och för att göra det enklare för anvÀndare att navigera i den aktuella strömmen och vÀxla mellan spÄr, bestÀmde vi oss för att skapa en "Hel sÀndning"-knapp och horisontella rapportkort för att vÀxla mellan spÄr och rapporter. Det finns tangentbordskontroll.

— Fanns det nĂ„gra tekniska problem med detta?

Nikolai: De hade en rullningslist dÀr startpunkterna för olika rapporter var markerade.

— Till slut, implementerade du dessa mĂ€rken pĂ„ rullningslisten innan YouTube gjorde nĂ„got liknande?

Artyom: De hade den i beta dÄ. Det verkar som att det hÀr Àr en ganska komplex funktion eftersom de delvis har testat det med anvÀndare under det senaste Äret. Och nu har den nÄtt försÀljning.

Nikolai: Men vi fick den till försĂ€ljning snabbare. Ärligt talat, bakom denna enkla funktion finns det en enorm mĂ€ngd backend, frontend, berĂ€kningar och matematik inuti spelaren.

Frontend

— LĂ„t oss ta reda pĂ„ hur det hĂ€r innehĂ„llet som vi visar (talkort, talare, webbplats, schema) kommer till fronten?

Vladimir Krasilshchik: Vi har flera interna IT-system. Det finns ett system dÀr alla rapporter och alla talare lÀggs in. Det finns en process genom vilken en talare deltar i en konferens. Talaren skickar in en ansökan, systemet fÄngar upp den, sedan finns det en viss pipeline enligt vilken rapporten skapas.

Utveckla en videoplattform pÄ 90 dagar
Det Àr sÄ talaren ser rörledningen

Detta system Àr vÄr interna utveckling.

DÀrefter mÄste du bygga ett schema frÄn individuella rapporter. Som ni vet Àr detta ett NP-hÄrt problem, men vi löser det pÄ nÄgot sÀtt. För att göra detta lanserar vi ytterligare en komponent som genererar ett schema och laddar upp det till tredjepartsmolntjÀnsten Contentful. DÀr ser allt ut som ett bord dÀr det finns konferensdagar, pÄ dagarna finns det tidluckor och i luckorna finns rapporter, pauser eller sponsringsaktiviteter. SÄ innehÄllet vi ser finns i en tredjepartstjÀnst. Och uppgiften Àr att förmedla det till sajten.

Det verkar som att sidan bara Àr en sida med en spelare, och det Àr inget komplicerat hÀr. Förutom att det inte Àr det. Backend bakom denna sida gÄr till Contentful, hÀmtar schemat dÀrifrÄn, genererar nÄgra objekt och skickar det till frontend. Med hjÀlp av en websocket-anslutning, som varje klient pÄ vÄr plattform gör, skickar vi honom en uppdatering av schemat frÄn backend till frontend.

Verkligt fall: talaren bytte jobb direkt under konferensen. Vi mÄste byta hans arbetsgivarföretagsmÀrke. Hur sker detta frÄn backend? En uppdatering skickas till alla klienter via websocket, och sedan ritar frontend sjÀlv om tidslinjen. Allt detta sker sömlöst. Kombinationen av molntjÀnsten och flera av vÄra komponenter ger oss möjlighet att generera allt detta innehÄll och tillhandahÄlla det till fronten.

Nikolai: Det Àr viktigt att förtydliga hÀr att vÄr sida inte Àr en klassisk SPA-applikation. Detta Àr bÄde en layoutbaserad, renderad webbplats och ett SPA. Google ser faktiskt den hÀr webbplatsen som renderad HTML. Detta Àr bra för SEO och för att leverera innehÄll till anvÀndaren. Den vÀntar inte pÄ att 1,5 megabyte JavaScript ska laddas innan den ser sidan, den ser omedelbart den redan renderade sidan, och du kÀnner det varje gÄng du byter rapport. Allt hÀnder pÄ en halv sekund, eftersom innehÄllet redan Àr klart och publicerat pÄ rÀtt plats.

— LĂ„t oss dra en linje under allt ovan genom att lista teknikerna. Tyoma sa att vi har 5 Amazon-strömmar och vi levererar video och ljud dĂ€r. Vi har bash-skript dĂ€r, vi anvĂ€nder dem för att starta och konfigurera...

Artyom: Detta sker genom AWS API, det finns mÄnga fler tekniska sidotjÀnster dÀr. Vi delade upp vÄrt ansvar sÄ att jag levererar till Cloudfront, och front-end- och back-end-utvecklare tar det dÀrifrÄn. Vi har ett antal egna bindningar för att förenkla layouten av innehÄll som vi sedan gör i 4K osv. Eftersom tidsfristerna var vÀldigt snÀva gjorde vi det nÀstan helt pÄ AWS.

— Sedan gĂ„r allt detta in i spelaren med hjĂ€lp av backend-systemet. Vi har TypeScript, React, Next.JS i vĂ„r spelare. Och pĂ„ backend har vi flera tjĂ€nster i C#, Java, Spring Boot och Node.js. Allt detta distribueras med Kubernetes med Yandex.Cloud-infrastrukturen.

Jag vill ocksÄ notera att nÀr jag behövde bekanta mig med plattformen visade det sig vara lÀtt: alla förrÄd finns pÄ GitLab, allt Àr vÀl namngivet, tester Àr skrivna, det finns dokumentation. Det vill sÀga att Àven i akutlÀge tog man hand om sÄdant.

AffÀrsbegrÀnsningar och analys

— Vi riktade in oss pĂ„ 10 000 anvĂ€ndare baserat pĂ„ affĂ€rskrav. Det Ă€r dags att prata om affĂ€rsrestriktioner som vi hade. Vi var tvungna att sĂ€kerstĂ€lla en hög arbetsbelastning, sĂ€kerstĂ€lla efterlevnad av lagen om bevarande av personuppgifter. Och vad mer?

Nikolai: Till en början utgick vi frÄn videokrav. Det viktigaste Àr distribuerad videolagring runt om i vÀrlden för snabb leverans till klienten. Andra inkluderar 1080p-upplösning, samt spola tillbaka, som mÄnga andra inte implementerar i live-lÀge. Senare lade vi till möjligheten att aktivera 2x hastighet, med dess hjÀlp kan du "komma ikapp" med live och fortsÀtta att titta pÄ konferensen i realtid. Och lÀngs vÀgen dök funktionalitet för tidslinjemarkering upp. Dessutom var vi tvungna att vara feltoleranta och tÄla belastningen av 10 000 anslutningar. Ur backend-synpunkt Àr detta cirka 10 000 anslutningar multiplicerat med 8 förfrÄgningar för varje siduppdatering. Och detta Àr redan 80 000 RPS/sek. Ganska lite av.

— Fanns det nĂ„gra andra krav pĂ„ en "virtuell utstĂ€llning" med partnermontrar online?

Nikolai: Ja, detta mĂ„ste göras ganska snabbt och allmĂ€nt. Vi hade upp till 10 partnerföretag för varje konferens, och alla mĂ„ste genomföras pĂ„ en eller tvĂ„ veckor. Deras innehĂ„ll skiljer sig dock nĂ„got Ă„t ​​i format. Men en viss mallmotor gjordes som sĂ€tter ihop dessa sidor i farten, med praktiskt taget inget vidare utvecklingsdeltagande.

— Det fanns ocksĂ„ krav pĂ„ analyser av realtidsvyer och statistik. Jag vet att vi anvĂ€nder Prometheus för detta, men berĂ€tta mer detaljerat: vilka krav uppfyller vi för analys och hur implementeras detta?

Nikolai: Inledningsvis har vi marknadsföringskrav för att samla in för A/B-tester och samla in information för att förstÄ hur man korrekt levererar det bÀsta innehÄllet till kunden i framtiden. Det finns ocksÄ krav pÄ vissa analyser pÄ partneraktiviteter och de analyser som du ser (besöksdisk). All information samlas in i realtid.

Vi kan tillhandahÄlla denna information i aggregerad form Àven till talare: hur mÄnga personer som tittade pÄ dig vid en viss tidpunkt. Samtidigt, för att följa federal lag 152, spÄras inte ditt personliga konto och dina personuppgifter pÄ nÄgot sÀtt.

Plattformen har redan marknadsföringsverktyg och vÄra mÀtvÀrden för att mÀta anvÀndaraktivitet i realtid (vem sÄg vilken sekund av rapporten) för att kunna bygga grafer över nÀrvaro vid rapporterna. Baserat pÄ dessa data pÄgÄr forskning som kommer att göra kommande konferenser bÀttre.

BedrÀgeri

— Har vi bedrĂ€geribekĂ€mpningsmekanismer?

Nikolai: PÄ grund av den snÀva tidsramen ur affÀrssynpunkt var uppgiften initialt inte instÀlld pÄ att omedelbart blockera onödiga anslutningar. Om tvÄ anvÀndare loggade in under samma konto kunde de se innehÄllet. Men vi vet hur mÄnga visningar det var samtidigt frÄn ett konto. Och vi förbjöd flera sÀrskilt illvilliga övertrÀdare.

Vladimir: Till dess förtjÀnst förstod en av de förbjudna anvÀndarna varför detta hÀnde. Han kom, bad om ursÀkt och lovade att köpa en biljett.

— För att allt detta ska hĂ€nda mĂ„ste du helt spĂ„ra alla anvĂ€ndare frĂ„n ingĂ„ng till utgĂ„ng, alltid veta vad de gör. Hur fungerar detta system?

Vladimir: Jag skulle vilja prata om analyser och statistik, som vi sedan analyserar för rapportens framgÄng eller sedan kan tillhandahÄlla partners. Alla klienter Àr anslutna via en websocket-anslutning till ett specifikt backend-kluster. Den stÄr dÀr Hasselcast. Varje klient vid varje tidsperiod skickar vad han gör och vilket spÄr han tittar pÄ. Sedan sammanstÀlls denna information med hjÀlp av snabba Hazelcast-jobb och skickas tillbaka till alla som tittar pÄ dessa spÄr. Vi ser i hörnet hur mÄnga som nu Àr med oss.

Utveckla en videoplattform pÄ 90 dagar

Samma information lagras i mongo och gÄr till vÄr datasjö, frÄn vilken vi har möjlighet att bygga en mer intressant graf. FrÄgan uppstÄr: hur mÄnga unika anvÀndare sÄg den hÀr rapporten? Vi gÄr till postgres, det finns pingar frÄn alla personer som kom med id:t för denna rapport. Vi samlade in unika, och nu kan vi förstÄ.

Nikolai: Men samtidigt fÄr vi Àven realtidsdata frÄn Prometheus. Den stÀlls mot alla Kubernetes-tjÀnster, mot Kubernetes sjÀlv. Den samlar in absolut allt, och med Grafana kan vi bygga vilka grafer som helst i realtid.

Vladimir: Å ena sidan laddar vi ner detta för vidare OLAP-bearbetning. Och för OLTP laddar applikationen ner det hela till Prometheus, Grafana och graferna konvergerar till och med!

– SĂ„ Ă€r fallet nĂ€r graferna konvergerar.

Dynamiska förÀndringar

— BerĂ€tta för oss hur dynamiska förĂ€ndringar rullas ut: om rapporten avbröts 6 minuter före start, vad Ă€r kedjan av Ă„tgĂ€rder? Vilken pipeline fungerar?

Vladimir: Rörledningen Àr mycket villkorad. Det finns flera möjligheter. Den första Àr att schemagenereringsprogrammet fungerade och Àndrade schemat. Det Àndrade schemat laddas upp till Contentful. DÀrefter förstÄr backend att det finns förÀndringar för denna konferens i Contentful, tar den och bygger om den. Allt samlas in och skickas via websocket.

Den andra möjligheten, nÀr allt hÀnder i en rasande takt: redaktören Àndrar informationen manuellt i Contentful (lÀnk till Telegram, talarens presentation, etc.) och samma logik fungerar som första gÄngen.

Nikolai: Allt sker utan att sidan uppdateras. Alla förÀndringar sker helt sömlöst för kunden. Detsamma gÀller för att byta rapporter. NÀr det Àr dags Àndras rapporten och grÀnssnittet.

Vladimir: Det finns ocksÄ tidsgrÀnser för starten av rapporter i tidslinjen. I början finns det ingenting. Och om du för musen över den röda randen, kommer vid nÄgot tillfÀlle, tack vare sÀndningsdirektören, cutoffs att dyka upp. Regissören stÀller in rÀtt start pÄ sÀndningen, backend tar upp denna förÀndring, berÀknar start- och sluttider för hela spÄrets presentationer i enlighet med konferensschemat, skickar det till vÄra kunder och spelaren drar cutoffs. Nu kan anvÀndaren enkelt navigera till början och slutet av rapporten. Det var ett strikt affÀrskrav, mycket bekvÀmt och anvÀndbart. Du slösar inte tid pÄ att hitta den faktiska starttiden för rapporten. Och nÀr vi gör en förhandsvisning blir det helt underbart.

Spridning

— Jag skulle vilja frĂ„ga om utplacering. Kolya och teamet tillbringade mycket tid i början pĂ„ att sĂ€tta upp hela infrastrukturen dĂ€r allt utvecklas för oss. SĂ€g mig, vad Ă€r allt gjort av?

Nikolai: Ur teknisk synvinkel hade vi initialt ett krav pÄ att produkten skulle vara sÄ abstrakt som möjligt frÄn vilken leverantör som helst. Kom till AWS för att skapa Terraform-skript specifikt frÄn AWS, eller specifikt frÄn Yandex, eller frÄn Azure, etc. passade inte riktigt. Vi var tvungna att flytta nÄgonstans nÄgon gÄng.

Under de första tre veckorna letade vi stÀndigt efter ett sÀtt att göra detta bÀttre. Som ett resultat kom vi till slutsatsen att Kubernetes i det hÀr fallet Àr vÄrt allt, eftersom det tillÄter oss att skapa automatiskt skalningstjÀnster, automatisk utrullning och fÄ nÀstan alla tjÀnster ur lÄdan. Naturligtvis mÄste alla tjÀnster trÀnas för att fungera med Kubernetes, Docker, och teamet mÄste ocksÄ lÀra sig.

Vi har tvÄ kluster. Test och produktion. De Àr helt identiska vad gÀller hÄrdvara och instÀllningar. Vi implementerar infrastruktur som kod. Alla tjÀnster rullas automatiskt ut i tre miljöer frÄn funktionsgrenar, mastergrenar, testgrenar och GitLab med hjÀlp av en automatisk pipeline. Detta Àr maximalt integrerat i GitLab, maximalt integrerat med Elastic, Prometheus.

Vi fÄr möjlighet att snabbt (för backend inom 10 minuter, för frontend inom 5 minuter) rulla ut Àndringar till valfri miljö med alla tester, integrationer, köra funktionstester, integrationstester pÄ miljön, och Àven testa med belastningstester pÄ en testmiljö ungefÀr samma sak som vi vill fÄ i produktion.

Om tester

— Du testar nĂ€stan allt, det Ă€r svĂ„rt att tro hur du skrev allt. Kan du berĂ€tta om backend-testerna: hur mycket allt tĂ€cks, vilka tester?

Vladimir: TvÄ typer av prov har skrivits. Det första Àr komponenttester. LyftnivÄtest av hela fjÀderapplikationen och bas in TestbehÄllare. Detta Àr ett test av affÀrsscenarier pÄ högsta nivÄ. Jag testar inte funktioner. Vi testar bara nÄgra stora saker. Till exempel, direkt i testet, emuleras processen att logga in pÄ en anvÀndare, anvÀndarens begÀran om biljetter dit han kan Äka och en begÀran om Ätkomst att titta pÄ streamen. Mycket tydliga anvÀndarscenarier.

UngefÀr samma sak implementeras i de sÄ kallade integrationstesterna, som faktiskt körs pÄ miljön. Faktum Àr att nÀr nÀsta driftsÀttning i produktionen rullas ut, körs ocksÄ riktiga grundscenarier i produktionen. Samma inloggning, begÀra biljetter, begÀra Ätkomst till CloudFront, kontrollera att strömmen verkligen ansluter till mina behörigheter, kontrollera regissörens grÀnssnitt.

För tillfÀllet har jag ett 70-tal komponenttester och ett 40-tal integrationstester ombord. TÀckningen Àr mycket nÀra 95 %. Det hÀr Àr för komponenter, mindre för integration, det behövs helt enkelt inte sÄ mycket. Med tanke pÄ att projektet involverar alla typer av kodgenerering Àr detta en mycket bra indikator. Det fanns inget annat sÀtt att göra det vi gjorde pÄ tre mÄnader. För om vi testade manuellt, gav funktioner till vÄr testare, och hon skulle hitta buggar och skicka tillbaka dem till oss för korrigeringar, dÄ skulle denna rundresa för att felsöka koden bli vÀldigt lÄng och vi skulle inte hÄlla nÄgra deadlines.

Nikolai: Konventionellt, för att utföra en regression pÄ hela plattformen nÀr du byter nÄgon funktion, mÄste du sitta och peta överallt i tvÄ dagar.

Vladimir: DÀrför Àr det en stor framgÄng att nÀr jag uppskattar en funktion sÀger jag att jag behöver 4 dagar för tvÄ enkla pennor och 1 websocket, Kolya tillÄter det. Han Àr redan van vid det faktum att dessa 4 dagar inkluderar 2 typer av tester, och dÄ kommer det troligen att fungera.

Nikolai: Jag har ocksÄ skrivit 140 test: komponent + funktionell, som gör samma sak. Alla samma scenarier testas i produktion, i test och i produktion. Vi har ocksÄ nyligen lagt till funktionella grundlÀggande UI-tester. PÄ sÄ sÀtt tÀcker vi den mest grundlÀggande funktionaliteten som kan falla isÀr.

Vladimir: Naturligtvis Àr det vÀrt att prata om belastningstester. Det var nödvÀndigt att testa plattformen under en belastning nÀra den verkliga för att förstÄ hur allt Àr, vad som hÀnder med Rabbit, vad som hÀnder med JVM:erna, hur mycket minne som faktiskt behövs.

— Jag vet inte sĂ€kert om vi testar nĂ„got pĂ„ streamsidan, men jag minns att det var problem med omkodare nĂ€r vi gjorde meetups. Har vi testat strömmarna?

Artyom: Testade iterativt. Organisera möten. I processen med att organisera möten fanns det cirka 2300 XNUMX JIRA-biljetter. Det hÀr Àr bara generiska saker som folk gjorde för att trÀffas. Vi tog delar av plattformen till en separat sida för möten, som drevs av Kirill Tolkachev (talkkv).

För att vara Àrlig sÄ var det inga stora problem. Bokstavligen ett par gÄnger fÄngade vi cachingbuggar pÄ CloudFront, vi löste det ganska snabbt - vi konfigurerade helt enkelt om policyerna. Det fanns betydligt fler buggar hos mÀnniskor, i streamingsystemen pÄ sajten.

Under konferenserna var jag tvungen att skriva flera exportörer för att tÀcka mer utrustning och tjÀnster. PÄ vissa stÀllen var jag tvungen att tillverka mina egna cyklar bara för mÄttens skull. VÀrlden av AV (audio-video) hÄrdvara Àr inte sÀrskilt rosa - du har nÄgon form av "API" av utrustning som du helt enkelt inte kan pÄverka. Och det Àr lÄngt ifrÄn ett faktum att du kommer att kunna fÄ den information du behöver. HÄrdvaruleverantörer Àr vÀldigt lÄngsamma och det Àr nÀstan omöjligt att fÄ det du vill ha frÄn dem. Totalt finns det mer Àn 100 hÄrdvara, de ger inte tillbaka det du behöver, och du skriver konstiga och överflödiga exportörer, tack vare vilka du Ätminstone pÄ nÄgot sÀtt kan felsöka systemet.

ĐžĐ±ĐŸŃ€ŃƒĐŽĐŸĐČĐ°ĐœĐžĐ”

— Jag minns hur vi inför konferensstarten delvis köpte ytterligare utrustning.

Artyom: Vi köpte datorer, bÀrbara datorer och batteripaket. För tillfÀllet kan vi leva utan el i 40 minuter. I juni var det kraftiga ÄskvÀder i St Petersburg - sÄ vi hade ett sÄdant blackout. Samtidigt kommer flera leverantörer till oss med optiska lÀnkar frÄn olika hÄll. Det hÀr Àr verkligen 40 minuters driftstopp, under vilken vi kommer att ha ljus, ljud, kameror etc. som fungerar.

— Vi har en liknande historia med Internet. PĂ„ kontoret dĂ€r vĂ„ra ateljĂ©er ligger slĂ€pade vi ett hĂ€ftigt nĂ€t mellan vĂ„ningarna.

Artyom: Vi har 20 Gbit fiber mellan vÄningarna. LÀngre lÀngs vÄningarna, nÄgonstans finns det optik, nÄgonstans finns det ingen optik, men ÀndÄ finns det fÀrre kanaler Àn gigabit-kanaler - vi kör video pÄ dem mellan spÄren av konferensen. I allmÀnhet Àr det vÀldigt bekvÀmt att arbeta med din egen infrastruktur, du kan sÀllan göra detta vid offlinekonferenser pÄ webbplatser.

— Innan jag jobbade pĂ„ JUG Ru Group sĂ„g jag hur hĂ„rdvarurum vid offlinekonferenser sattes upp över en natt, dĂ€r det fanns en stor bildskĂ€rm med alla mĂ€tvĂ€rden som man bygger i Grafana. Nu finns det Ă€ven ett huvudkontorsrum dĂ€r utvecklingsteamet sitter, som under konferensen fixar en del buggar och utvecklar funktioner. Samtidigt finns ett övervakningssystem som visas pĂ„ en stor skĂ€rm. Artyom, Kolya och andra killar sitter och ser till att allt inte faller och fungerar vackert.

Kuriosa och problem

— Du pratade vĂ€l om att vi har streaming med Amazon, det finns en spelare med webben, allt Ă€r skrivet pĂ„ olika programmeringssprĂ„k, feltolerans och andra affĂ€rskrav tillhandahĂ„lls, inklusive ett personligt konto som stöds för juridiska personer och individer, och vi kan integrera med nĂ„gon som anvĂ€nder OAuth 2.0, finns det anti-bedrĂ€geri, anvĂ€ndarblockering. Vi kan rulla ut förĂ€ndringar dynamiskt eftersom vi gjorde det bra, och allt Ă€r testat.

Jag Àr intresserad av att veta vilka konstigheter som var inblandade i att fÄ igÄng nÄgot. Har det varit nÄgra konstiga situationer nÀr du utvecklade en backend, frontend, nÄgot galet visade sig och du inte förstod vad du skulle göra med det?

Vladimir: Det verkar för mig att detta bara har hÀnt de senaste tre mÄnaderna. Varje dag. Som ni ser har allt mitt hÄr dragits ut.

Utveckla en videoplattform pÄ 90 dagar
Vladimir Krasilshchik efter 3 mÄnader, nÀr nÄgot slags spel visade sig och ingen förstod vad han skulle göra med det

Varje dag var det nÄgot sÄnt hÀr, nÀr det fanns ett sÄdant ögonblick nÀr du tar det och sliter av dig hÄret, eller inser att det inte finns nÄgon annan, och bara du kan göra det. VÄrt första stora event var TechTrain. Den 6 juni klockan 2:2.0 hade vi Ànnu inte rullat ut produktionsmiljön, Kolya rullade ut den. Och det personliga kontot fungerade inte som en auktoriseringsserver med OAuth2.0. Vi förvandlade den till en OAuth18-leverantör för att ansluta plattformen till den. Jag hade jobbat i sÀkert XNUMX timmar i strÀck, jag tittade pÄ datorn och sÄg ingenting, jag förstod inte varför den inte fungerade, och Kolya tittade pÄ min kod pÄ distans, letade efter en bugg i vÄrkonfigurationen , hittade den, och LC fungerade, och i produktion ocksÄ.

Nikolai: Och en timme innan TechTrain slÀpptes.

MÄnga stjÀrnor var i linje hÀr. Vi hade oerhört tur eftersom vi hade ett superteam och alla blev inspirerade av idén att göra det online. Alla dessa tre mÄnader drevs vi av det faktum att vi "gjorde YouTube". Jag tillÀt mig inte slita mig i hÄret utan sa till alla att allt skulle ordna sig, för i sjÀlva verket hade allt berÀknats för lÀnge sedan.

Om prestanda

— Kan du berĂ€tta för mig hur mĂ„nga personer som var pĂ„ platsen pĂ„ ett spĂ„r? Fanns det nĂ„gra prestandaproblem?

Nikolai: Det var inga prestandaproblem, som vi redan sa. Det maximala antalet personer som deltog i en rapport var 1300 personer, detta finns pÄ Heisenbug.

— Fanns det nĂ„gra problem med lokal visning? Och Ă€r det möjligt att ha en teknisk beskrivning med diagram över hur det hela fungerar?

Nikolai: Vi kommer att göra en artikel om detta senare.

Du kan till och med felsöka strömmar lokalt. NÀr konferenserna vÀl startade blev det Ànnu enklare, eftersom det dök upp produktionsströmmar som vi kan titta pÄ hela tiden.

Vladimir: Som jag förstÄr det arbetade front-end-utvecklare lokalt med mockar, och sedan, eftersom tiden att rulla ut till utvecklarna i fronten ocksÄ Àr kort (5 minuter), finns det inga problem med att kontrollera vad som hÀnder med certifikaten.

— Allt testas och felsöks, Ă€ven lokalt. Det betyder att vi kommer att skriva en artikel med alla tekniska funktioner, visa dig, berĂ€tta allt med diagram, hur det var.

Vladimir: Du kan ta det och upprepa det.

- Om 3 mÄnader.

Totalt

— Allt som beskrivs tillsammans lĂ„ter coolt med tanke pĂ„ att det gjordes av ett litet team pĂ„ tre mĂ„nader.

Nikolai: Ett stort lag skulle inte göra det hÀr. Men en liten grupp mÀnniskor som kommunicerar ganska nÀra och bra med varandra och kan komma överens skulle kunna. De har inga motsÀgelser, arkitekturen uppfanns pÄ tvÄ dagar, fÀrdigstÀlldes och har faktiskt inte förÀndrats. Det finns en mycket strikt förenkling av inkommande affÀrskrav nÀr det gÀller att samla upp funktionsförfrÄgningar och Àndringar.

— Vad stod pĂ„ din lista över ytterligare uppgifter nĂ€r sommarkonferenserna redan hade Ă€gt rum?

Nikolai: Till exempel krediter. Krypande linjer pÄ videon, popup-fönster pÄ vissa stÀllen i videon beroende pÄ innehÄllet som visas. Till exempel vill talaren stÀlla en frÄga till publiken, och en röst dyker upp pÄ skÀrmen, som gÄr tillbaka till baksidan baserat pÄ röstningsresultatet till talaren sjÀlv. NÄgon form av social aktivitet i form av likes, hjÀrtan, betyg av rapporten under sjÀlva presentationen, sÄ att du kan fylla i feedback i rÀtt ögonblick utan att bli distraherad senare av feedbackformulÀr. Till en början sÄ hÀr.

Och lÀgga till hela plattformen, förutom streaming och konferens, Àven ett tillstÄnd efter konferensen. Dessa Àr spellistor (inklusive de som sammanstÀllts av anvÀndare), eventuellt innehÄll frÄn andra tidigare konferenser, integrerade, mÀrkta, tillgÀngliga för anvÀndaren och Àven tillgÀngliga för visning pÄ vÄr webbplats (live.jugru.org).

– Killar, tack sĂ„ mycket för era svar!

Om det bland lÀsarna finns de som deltog i vÄra sommarkonferenser, dela gÀrna dina intryck av spelaren och sÀndningen. Vad var bekvÀmt, vad irriterade dig, vad skulle du vilja se i framtiden?

Om du Àr intresserad av plattformen och vill se den "i strid" anvÀnder vi den igen pÄ vÄr höst-vinterkonferenser. Det finns en hel rad av dem, sÄ det finns nÀstan sÀkert en som Àr rÀtt för dig.

KĂ€lla: will.com

LĂ€gg en kommentar