Razvijte video platformu za 90 dana

Ovog proljeća našli smo se u veoma veselim uslovima. Zbog pandemije postalo je jasno da naše ljetne konferencije treba premjestiti na internet. A da bismo ih efikasno provodili online, gotova softverska rješenja nisu nam odgovarala, morali smo pisati svoja. I imali smo tri mjeseca da to uradimo.

Jasno je da su to bila uzbudljiva tri mjeseca. Ali izvana nije sasvim očigledno: šta je platforma za online konferencije? Od kojih dijelova se sastoji? Stoga sam na posljednjoj ljetnoj DevOops konferenciji pitao one koji su bili odgovorni za ovaj zadatak:

  • Nikolaj Molčanov - tehnički direktor JUG Ru Grupe;
  • Vladimir Krasilshchik je pragmatičan Java programer koji radi na backendu (njegove izvještaje možete vidjeti i na našim Java konferencijama);
  • Artyom Nikonov je odgovoran za sve naše video streaming.

Inače, na jesensko-zimskim konferencijama koristićemo poboljšanu verziju iste platforme - pa će mnogi habra čitači i dalje biti njeni korisnici.

Razvijte video platformu za 90 dana

Velika slika

— Kakav je bio sastav tima?

Nikolaj Molčanov: Imamo analitičara, dizajnera, testera, tri front-endera i back-end. I, naravno, specijalista u obliku slova T!

— Kako je generalno izgledao proces?

Nikolaj: Do sredine marta nismo imali ništa spremno za internet. A 15. marta, cijeli online vrtuljak je počeo da se vrti. Postavili smo nekoliko repozitorija, planirali, razgovarali o osnovnoj arhitekturi i sve uradili za tri mjeseca.

Ovo je, naravno, prošlo kroz klasične faze planiranja, arhitekture, odabira karakteristika, glasanja za te karakteristike, politike za te karakteristike, njihovog dizajna, razvoja, testiranja. Kao rezultat toga, 6. juna smo sve pustili u proizvodnju. TechTrain. Bilo je 90 dana za sve.

— Jesmo li uspjeli da ostvarimo ono čemu smo se obavezali?

Nikolaj: Budući da sada učestvujemo na DevOops konferenciji online, znači da je uspjelo. Lično sam se posvetio glavnoj stvari: donijet ću kupcima alat pomoću kojeg mogu napraviti online konferenciju.

Izazov je bio sljedeći: dajte nam alat pomoću kojeg možemo prenositi naše konferencije vlasnicima ulaznica.

Svo planiranje je podijeljeno u nekoliko faza, a sve karakteristike (oko 30 globalnih) podijeljene su u 4 kategorije:

  • što ćemo svakako uraditi (ne možemo živjeti bez njih),
  • što ćemo uraditi kao drugo,
  • što nikada nećemo uraditi,
  • i što nikada, nikada nećemo učiniti.

Napravili smo sve karakteristike iz prve dvije kategorije.

— Znam da je kreirano ukupno 600 JIRA izdanja. Za tri mjeseca napravili ste 13 mikroservisa, a sumnjam da su napisani ne samo na Javi. Koristili ste različite tehnologije, imate dva Kubernetes klastera u tri zone dostupnosti i 5 RTMP streamova u Amazonu.

Pogledajmo sada svaku komponentu sistema posebno.

Streaming

— Počnimo od toga kada već imamo video sliku, a ona se prenosi na neke servise. Artjome, reci nam kako se ovo striming dešava?

Artjom Nikonov: Naša opšta šema izgleda ovako: slika sa kamere -> naša kontrolna soba -> lokalni RTMP server -> Amazon -> video plejer. Više detalja pisao o tome na Habreu u junu.

Generalno, postoje dva globalna načina da se to uradi: ili na hardveru ili na osnovu softverskih rešenja. Odabrali smo softverski put jer je lakši u slučaju daljinskih zvučnika. Nije uvijek moguće donijeti hardver na zvučnik u drugoj zemlji, ali isporuka softvera zvučniku izgleda lakša i pouzdanija.

Sa hardverske tačke gledišta, imamo određeni broj kamera (u našim studijima i na daljinskim zvučnicima), određeni broj daljinskih upravljača u studiju, koji se ponekad moraju popraviti ispod stola tokom emitovanja.

Signali sa ovih uređaja ulaze u računare sa karticama za snimanje, ulazno/izlaznim karticama i zvučnim karticama. Tamo se signali miješaju i sklapaju u rasporede:

Razvijte video platformu za 90 dana
Primjer rasporeda za 4 zvučnika

Razvijte video platformu za 90 dana
Primjer rasporeda za 4 zvučnika

Nadalje, kontinuirano emitiranje je omogućeno uz pomoć tri računara: jedna glavna mašina i par radnih. Prvi računar prikuplja prvi izveštaj, drugi - pauzu, prvi - sledeći izveštaj, drugi - sledeći izveštaj i tako dalje. A glavna mašina miješa prvo s drugim.

Ovo stvara svojevrsni trokut, a ako bilo koji od ovih čvorova pokvari, možemo brzo i bez gubitka kvalitete nastaviti isporuku sadržaja klijentima. Imali smo takvu situaciju. Tokom prve sedmice konferencija popravili smo jednu mašinu, uključili je/isključili. Čini se da su ljudi zadovoljni našom otpornošću.

Zatim, tokovi sa računara idu na lokalni server, koji ima dva zadatka: usmeravanje RTMP tokova i snimanje rezervnih kopija. Dakle, imamo više tačaka snimanja. Video tokovi se zatim šalju u dio našeg sistema izgrađenog na Amazon SaaS uslugama. Koristimo MediaLive,S3,CloudFront.

Nikolaj: Šta se tamo događa prije nego što video dođe do publike? Moraš to nekako da presečeš, zar ne?

Artyom: Kompresujemo video sa naše strane i šaljemo ga MediaLiveu. Tamo lansiramo transkodere. Oni transkodiraju video zapise u realnom vremenu u nekoliko rezolucija kako bi ljudi mogli da ih gledaju na svojim telefonima, preko lošeg interneta u zemlji i tako dalje. Zatim se ovi potoci urezuju komadi, ovako radi protokol HLS. Šaljemo playlistu na frontend koja sadrži pokazivače na ove dijelove.

— Koristimo li 1080p rezoluciju?

Artyom: Širina našeg videa je ista kao 1080p - 1920 piksela, a visina je nešto manja, slika je izduženija - postoje razlozi za to.

Player

— Artyom je opisao kako video ulazi u streamove, kako se distribuira u različite liste za reprodukciju za različite rezolucije ekrana, isječe se na komade i ulazi u plejer. Kolja, reci mi sad kakav je ovo plejer, kako troši stream, zašto HLS?

Nikolaj: Imamo plejer koji svi gledaoci konferencije mogu gledati.

Razvijte video platformu za 90 dana

U suštini, ovo je omot oko biblioteke hls.js, na kojoj su napisani mnogi drugi igrači. Ali nam je bila potrebna vrlo specifična funkcionalnost: premotavanje i označavanje mjesta gdje se osoba nalazi, koji izvještaj trenutno gleda. Trebali su nam i vlastiti izgledi, svakakvi logotipi i sve ostalo što je ugrađeno kod nas. Stoga smo odlučili da napišemo sopstvenu biblioteku (omotač preko HLS-a) i da je ugradimo na sajt.

Ovo je root funkcionalnost, tako da je implementirana skoro prva. A onda je sve raslo oko toga.

Zapravo, putem autorizacije, igrač od backend-a prima playlistu sa linkovima na komade koji su u korelaciji s vremenom i kvalitetom, preuzima potrebne i pokazuje ih korisniku, izvodeći neku „magiju“ usput.

Razvijte video platformu za 90 dana
Primjer vremenske trake

— Dugme je ugrađeno direktno u plejer za prikaz vremenske linije svih izveštaja...

Nikolaj: Da, odmah smo riješili problem navigacije korisnika. Sredinom aprila odlučili smo da svaku našu konferenciju nećemo prenositi na posebnoj web stranici, već ćemo sve spojiti na jednom. Tako da korisnici Full Pass ulaznica mogu slobodno prelaziti između različitih konferencija: kako uživo tako i snimke prošlih.

A kako bismo korisnicima olakšali navigaciju kroz trenutni stream i prebacivanje između staza, odlučili smo da napravimo dugme „Cela emisija“ i horizontalne izveštaje za prebacivanje između numera i izveštaja. Postoji kontrola sa tastature.

— Da li je bilo tehničkih poteškoća s ovim?

Nikolaj: Imali su traku za pomicanje na kojoj su bile označene početne tačke različitih izvještaja.

— Na kraju, jeste li implementirali ove oznake na traku za pomicanje prije nego što je YouTube učinio nešto slično?

Artyom: Imali su ga tada u beta verziji. Čini se da je ovo prilično složena funkcija jer su je djelimično testirali sa korisnicima tokom prošle godine. A sada je stigao u prodaju.

Nikolaj: Ali zapravo smo ga brže plasirali u prodaju. Iskreno, iza ove jednostavne funkcije postoji ogromna količina backenda, frontenda, kalkulacija i matematike unutar playera.

Frontend

— Hajde da shvatimo kako ovaj sadržaj koji prikazujemo (kartica za govor, govornici, web stranica, raspored) dolazi do front enda?

Vladimir Krasilshchik: Imamo nekoliko internih IT sistema. Postoji sistem u koji se unose svi izvještaji i svi govornici. Postoji proces kojim govornik učestvuje na konferenciji. Govornik podnosi aplikaciju, sistem je snima, zatim postoji određeni cevovod prema kojem se kreira izvještaj.

Razvijte video platformu za 90 dana
Ovako govornik vidi cevovod

Ovaj sistem je naš interni razvoj.

Zatim morate napraviti raspored od pojedinačnih izvještaja. Kao što znate, ovo je NP-težak problem, ali mi ga nekako rješavamo. Da bismo to učinili, pokrećemo drugu komponentu koja generiše raspored i prenosi ga na uslugu u oblaku treće strane Contentful. Tamo sve izgleda kao tabela u kojoj su dani konferencije, u danima su termini, a u slotovima su izvještaji, pauze ili sponzorske aktivnosti. Dakle, sadržaj koji vidimo nalazi se u usluzi treće strane. A zadatak je to prenijeti na stranicu.

Čini se da je stranica samo stranica sa igračem, a ovdje nema ništa komplikovano. Osim što nije. Backend iza ove stranice ide na Contentful, odatle dobija raspored, generiše neke objekte i šalje ga frontendu. Koristeći websocket konekciju, koju svaki klijent naše platforme napravi, šaljemo mu ažuriranje rasporeda od bekenda do frontenda.

Pravi slučaj: govornik je promijenio posao upravo tokom konferencije. Moramo mu promijeniti bedž kompanije poslodavca. Kako se ovo dešava iz backenda? Ažuriranje se šalje svim klijentima preko websocketa, a zatim sam frontend ponovo iscrtava vremensku liniju. Sve se ovo dešava bez problema. Kombinacija usluge u oblaku i nekoliko naših komponenti daje nam priliku da generiramo sav ovaj sadržaj i pružimo ga naprijed.

Nikolaj: Ovdje je važno pojasniti da naša stranica nije klasična SPA aplikacija. Ovo je i renderirana web stranica zasnovana na izgledu i SPA. Google zapravo vidi ovu stranicu kao prikazani HTML. Ovo je dobro za SEO i za isporuku sadržaja korisniku. Ne čeka da se 1,5 megabajta JavaScripta učita prije nego što vidi stranicu, već odmah vidi već renderiranu stranicu, a vi to osjetite svaki put kada promijenite izvještaj. Sve se događa za pola sekunde, jer je sadržaj već spreman i postavljen na pravom mjestu.

— Hajde da podvučemo crtu ispod svega navedenog navodeći tehnologije. Tyoma je rekao da imamo 5 Amazon streamova i tamo isporučujemo video i zvuk. Tamo imamo bash skripte, koristimo ih za pokretanje i konfiguraciju...

Artyom: To se dešava preko AWS API-ja, tamo ima mnogo više tehničkih usluga. Podijelili smo naše odgovornosti tako da ja isporučujem Cloudfront, a front-end i back-end programeri preuzimaju odatle. Imamo nekoliko vlastitih veza za pojednostavljenje rasporeda sadržaja, koje onda pravimo u 4K, itd. Pošto su rokovi bili veoma kratki, uradili smo to skoro u potpunosti na AWS-u.

— Onda sve ovo ide u plejer koristeći backend sistem. Imamo TypeScript, React, Next.JS u našem plejeru. A na backend-u imamo nekoliko servisa u C#, Java, Spring Boot i Node.js. Sve ovo se postavlja koristeći Kubernetes koristeći Yandex.Cloud infrastrukturu.

Takođe želim da napomenem da kada sam trebao da se upoznam sa platformom, ispostavilo se da je to lako: sva spremišta su na GitLabu, sve je dobro imenovano, testovi su napisani, postoji dokumentacija. Odnosno, čak i u hitnom režimu su se pobrinuli za takve stvari.

Poslovna ograničenja i analitika

— Ciljali smo 10 korisnika na osnovu poslovnih zahtjeva. Vrijeme je da razgovaramo o poslovnim ograničenjima koja smo imali. Morali smo osigurati veliki obim posla, osigurati poštivanje zakona o čuvanju ličnih podataka. I šta još?

Nikolaj: U početku smo krenuli od zahtjeva za video zapisima. Najvažnija stvar je distribuirana video pohrana širom svijeta za brzu isporuku do klijenta. Drugi uključuju rezoluciju od 1080p, kao i premotavanje unazad, što mnogi drugi ne implementiraju u načinu rada uživo. Kasnije smo dodali mogućnost omogućavanja 2x brzine, uz njenu pomoć možete "sustići" uživo i nastaviti gledati konferenciju u realnom vremenu. I usput se pojavila funkcija označavanja vremenske trake. Osim toga, morali smo biti otporni na greške i izdržati opterećenje od 10 veza. Sa backend tačke gledišta, ovo je otprilike 000 veza pomnoženih sa 10 zahtjeva za svako osvježavanje stranice. A ovo je već 000 RPS/sec. Prilično malo.

— Da li su postojali još neki uslovi za „virtuelnu izložbu“ sa onlajn štandovima partnera?

Nikolaj: Da, to je trebalo učiniti prilično brzo i univerzalno. Imali smo do 10 partnerskih kompanija za svaku konferenciju, a sve su morale biti završene za tjedan ili dvije. Međutim, njihov sadržaj se malo razlikuje u formatu. Ali napravljen je određeni mehanizam za šablone koji sastavlja ove stranice u hodu, praktično bez daljeg učešća u razvoju.

— Postojali su i zahtjevi za analitiku prikaza u realnom vremenu i statistike. Znam da za to koristimo Prometheus, ali recite nam detaljnije: koje zahtjeve ispunjavamo za analitiku i kako se to implementira?

Nikolaj: U početku imamo marketinške zahtjeve za prikupljanje za A/B testiranje i prikupljanje informacija kako bismo razumjeli kako ispravno isporučiti najbolji sadržaj klijentu u budućnosti. Postoje i zahtjevi za neku analitiku o aktivnostima partnera i analitiku koju vidite (broj posjeta). Sve informacije se prikupljaju u realnom vremenu.

Možemo dati ove informacije u zbirnom obliku čak i govornicima: koliko vas je ljudi gledalo u određenom trenutku. Istovremeno, u skladu sa Federalnim zakonom 152, vaš lični nalog i lični podaci se ne prate ni na koji način.

Platforma već ima marketinške alate i naše metrike za mjerenje aktivnosti korisnika u realnom vremenu (ko je gledao koju sekundu izvještaja) kako bismo napravili grafikone posjećenosti na izvještajima. Na osnovu ovih podataka rade se istraživanja koja će naredne konferencije učiniti boljim.

Prijevara

— Imamo li mehanizme protiv prevara?

Nikolaj: Zbog kratkog vremenskog okvira sa poslovne tačke gledišta, zadatak nije prvobitno bio postavljen da odmah blokira nepotrebne veze. Ako su se dva korisnika prijavila pod istim nalogom, mogli bi pogledati sadržaj. Ali znamo koliko je istovremenih pregleda bilo sa jednog naloga. I zabranili smo nekoliko posebno zlonamjernih prekršitelja.

Vladimir: Svaka čast, jedan od zabranjenih korisnika shvatio je zašto se to dogodilo. Došao je, izvinio se i obećao da će kupiti kartu.

— Da bi se sve ovo dogodilo, morate u potpunosti pratiti sve korisnike od ulaska do izlaska, uvijek znati šta rade. Kako ovaj sistem funkcioniše?

Vladimir: Želio bih da pričam o analitici i statistici, koje onda analiziramo radi uspjeha izvještaja ili možemo dati partnerima. Svi klijenti su povezani putem websocket konekcije na određeni backend klaster. Stoji tamo hazelcast. Svaki klijent u svakom vremenskom periodu šalje šta radi i koju numeru gleda. Zatim se ove informacije agregiraju pomoću brzih Hazelcast poslova i šalju natrag svima koji gledaju ove pjesme. Vidimo u uglu koliko je ljudi sada sa nama.

Razvijte video platformu za 90 dana

Iste informacije se pohranjuju u Mongo i ide u naše jezero podataka, iz kojeg imamo priliku izgraditi zanimljiviji graf. Postavlja se pitanje: koliko je jedinstvenih korisnika pogledalo ovaj izvještaj? Idemo u postgres, postoje pingovi svih ljudi koji su došli po ID-u ovog izvještaja. Skupljali smo, agregirali jedinstvene, i sada možemo razumjeti.

Nikolaj: Ali u isto vrijeme, primamo i podatke u realnom vremenu od Prometheusa. Postavljen je protiv svih Kubernetes servisa, protiv samog Kubernetesa. Sakuplja apsolutno sve, a sa Grafanom možemo napraviti bilo koji grafikon u realnom vremenu.

Vladimir: S jedne strane, preuzimamo ovo za dalju OLAP obradu. A za OLTP, aplikacija preuzima cijelu stvar na Prometheus, Grafana i grafovi se čak i konvergiraju!

- Ovo je slučaj kada se grafovi konvergiraju.

Dynamic Changes

— Recite nam kako se uvode dinamičke promjene: ako je izvještaj otkazan 6 minuta prije početka, kakav je lanac radnji? Koji cjevovod radi?

Vladimir: Cevovod je veoma uslovljen. Postoji nekoliko mogućnosti. Prvi je da je program za generisanje rasporeda radio i promenio raspored. Izmijenjeni raspored je postavljen na Contentful. Nakon čega backend shvati da postoje promjene za ovu konferenciju u Contentful, uzima je i ponovo gradi. Sve se prikuplja i šalje putem websocketa.

Druga mogućnost, kada se sve odvija vrtoglavim tempom: urednik ručno mijenja informacije u Contentful-u (link na Telegram, prezentacija govornika, itd.) i funkcionira ista logika kao i prvi put.

Nikolaj: Sve se dešava bez osvježavanja stranice. Sve promjene se dešavaju apsolutno neprimjetno za klijenta. Isto vrijedi i za promjenu izvještaja. Kada dođe vrijeme, izvještaj i interfejs se mijenjaju.

Vladimir: Takođe, u vremenskoj liniji postoje vremenske granice za početak izveštaja. Na samom početku nema ništa. A ako zadržite pokazivač miša preko crvene trake, tada će se u nekom trenutku, zahvaljujući direktoru emitiranja, pojaviti prekidi. Direktor postavlja ispravan početak emitiranja, backend preuzima ovu promjenu, izračunava vrijeme početka i završetka prezentacije cijele pjesme u skladu sa rasporedom konferencije, šalje je našim klijentima, a igrač izvlači prekide. Sada korisnik može lako navigirati do početka i kraja izvještaja. Bio je to strogi poslovni zahtjev, vrlo zgodan i koristan. Ne gubite vrijeme tražeći stvarno vrijeme početka izvještaja. A kada napravimo pregled, to će biti apsolutno divno.

Deployment

— Želio bih da pitam o raspoređivanju. Kolja i ekipa su na početku utrošili dosta vremena na postavljanje cjelokupne infrastrukture u kojoj se sve odvija za nas. Reci mi od čega je sve to napravljeno?

Nikolaj: Sa tehničke tačke gledišta, u početku smo imali zahtev da proizvod bude što apstraktniji od bilo kog dobavljača. Dođite u AWS da napravite Terraform skripte posebno iz AWS-a, ili posebno iz Yandexa, ili iz Azurea, itd. nije baš odgovarao. Morali smo se negdje preseliti u nekom trenutku.

Prve tri sedmice stalno smo tražili način da to učinimo bolje. Kao rezultat toga, došli smo do zaključka da je Kubernetes u ovom slučaju naše sve, jer nam omogućava da kreiramo servise koji se automatski skaliraju, auto-rollout i izvučemo gotovo sve usluge iz kutije. Naravno, svi servisi su morali biti obučeni za rad sa Kubernetesom, Dockerom, a tim je također morao naučiti.

Imamo dva klastera. Testiranje i proizvodnja. Oni su apsolutno identični u pogledu hardvera i postavki. Infrastrukturu implementiramo kao kod. Sve usluge se automatski uvode u tri okruženja iz grana funkcija, glavnih grana, testnih grana i GitLab-a pomoću automatskog cevovoda. Ovo je maksimalno integrisano u GitLab, maksimalno integrisano sa Elastic-om, Prometheusom.

Dobijamo priliku da brzo (za backend u roku od 10 minuta, za frontend u roku od 5 minuta) uvedemo promjene u bilo koje okruženje sa svim testovima, integracijama, pokretanjem funkcionalnih testova, integracijskim testovima na okruženju, kao i testiranjem sa testovima opterećenja na testno okruženje je približno ista stvar koju želimo dobiti u proizvodnji.

O testovima

— Testirate skoro sve, teško je povjerovati kako ste sve napisali. Možete li nam reći o backend testovima: koliko je sve pokriveno, koji testovi?

Vladimir: Napisane su dvije vrste testova. Prvi su testovi komponenti. Ispitivanje nivoa podizanja cijele primjene opruge i baze Testcontainers. Ovo je test poslovnih scenarija najvišeg nivoa. Ne testiram funkcije. Testiramo samo neke velike stvari. Na primjer, u samom testu se emulira proces prijavljivanja na korisnika, korisnikov zahtjev za ulaznicama gdje može ići i zahtjev za pristup gledanju streama. Vrlo jasni korisnički scenariji.

Otprilike ista stvar implementirana je u takozvanim integracijskim testovima, koji se zapravo izvode u okruženju. U stvari, kada se sljedeća implementacija u proizvodnju pokrene, pravi osnovni scenariji također se pokreću u proizvodnji. Isti login, traženje ulaznica, traženje pristupa CloudFront-u, provjeravanje da li se stream zaista povezuje s mojim dozvolama, provjeravanje interfejsa direktora.

Trenutno imam oko 70 komponentnih testova i oko 40 integracijskih testova. Pokrivenost je vrlo blizu 95%. Ovo je za komponente, manje za integracijske, jednostavno nije potrebno toliko. S obzirom da projekat uključuje sve vrste generisanja koda, ovo je vrlo dobar pokazatelj. Nije bilo drugog načina da uradimo ono što smo uradili za tri meseca. Jer ako bismo testirali ručno, dajući karakteristike našem testeru, a ona bi pronašla greške i vratila nam ih na ispravke, onda bi ovo kružno putovanje do otklanjanja grešaka koda bilo jako dugo i ne bismo ispoštovali nikakve rokove.

Nikolaj: Konvencionalno, da biste izvršili regresiju na cijeloj platformi pri promjeni neke funkcije, trebate sjediti i bockati svuda dva dana.

Vladimir: Stoga je veliki uspjeh što kada procijenim funkciju kažem da mi treba 4 dana za dvije jednostavne olovke i 1 websocket, Kolya to dozvoljava. Već je navikao na činjenicu da ova 4 dana uključuju 2 vrste testova, a onda će, najvjerovatnije, uspjeti.

Nikolaj: Takođe imam 140 napisanih testova: komponentni + funkcionalni, koji rade istu stvar. Svi isti scenariji se testiraju u proizvodnji, testu i proizvodnji. Nedavno smo dodali i funkcionalne osnovne UI testove. Na ovaj način pokrivamo najosnovniju funkcionalnost koja se može raspasti.

Vladimir: Naravno, vrijedi razgovarati o testovima opterećenja. Bilo je potrebno testirati platformu pod opterećenjem bliskim stvarnom kako bi se shvatilo kako je sve, šta se dešava sa Rabbitom, šta se dešava sa JVM-ovima, koliko memorije je zapravo potrebno.

— Ne znam sa sigurnošću testiramo li nešto na strani streama, ali sjećam se da je bilo problema sa transkoderima kada smo radili susrete. Jesmo li testirali streamove?

Artyom: Testirano iterativno. Organiziranje sastanaka. U procesu organizovanja mitapa bilo je oko 2300 JIRA karata. Ovo su samo generičke stvari koje su ljudi radili da bi napravili sastanke. Dijelove platforme prenijeli smo na posebnu stranicu za sastanke, koju je vodio Kirill Tolkachev (talkkv).

Da budem iskren, nije bilo velikih problema. Bukvalno smo nekoliko puta uhvatili greške u keširanju na CloudFront-u, riješili smo to prilično brzo - jednostavno smo rekonfigurisali politike. Bilo je znatno više grešaka kod ljudi, u sistemima za striming na sajtu.

Tokom konferencija, morao sam pisati još nekoliko izvoznika kako bih pokrio više opreme i usluga. Na nekim mjestima sam morao napraviti svoje bicikle samo zbog metrike. Svijet AV (audio-video) hardvera nije baš ružičast – imate neku vrstu “API” opreme na koju jednostavno ne možete utjecati. I daleko je od činjenice da ćete moći dobiti informacije koje su vam potrebne. Prodavci hardvera su zaista spori i gotovo je nemoguće od njih dobiti ono što želite. Ukupno ima više od 100 komada hardvera, ne vraćaju ono što vam treba, a vi pišete čudne i suvišne izvoznike, zahvaljujući kojima možete barem nekako otkloniti greške u sistemu.

Oprema

— Sjećam se kako smo prije početka konferencija djelimično nabavili dodatnu opremu.

Artyom: Nabavili smo računare, laptopove i baterije. U ovom trenutku bez struje možemo živjeti 40 minuta. U junu je bilo jakih grmljavina u Sankt Peterburgu - tako da smo imali takav zamračenje. Istovremeno, dolazi nam nekoliko provajdera sa optičkim vezama sa različitih tačaka. Ovo je zaista 40 minuta zastoja u zgradi, tokom kojih ćemo imati upaljena svjetla, zvuk, kamere itd.

— Imamo sličnu priču sa internetom. U kancelariji u kojoj se nalaze naši studiji, vukli smo žestoku mrežu između spratova.

Artyom: Imamo 20 Gbit vlakana između spratova. Dalje po spratovima, negde ima optike, negde nema optike, ali ipak ima manje kanala od gigabitnih - na njima puštamo video između traka konferencije. Općenito, vrlo je zgodno raditi na vlastitoj infrastrukturi; to rijetko možete učiniti na offline konferencijama na web lokacijama.

— Prije nego što sam radio u JUG Ru Grupi, vidio sam kako se preko noći postavljaju hardverske sobe na offline konferencijama, gdje je bio veliki monitor sa svim metrikama koje gradiš u Grafani. Sada postoji i prostorija sjedišta u kojoj sjedi razvojni tim, koji tokom konferencije popravlja neke greške i razvija funkcije. Istovremeno, postoji i sistem za nadzor koji je prikazan na velikom ekranu. Artjom, Kolja i drugi momci sjede i paze da sve to ne padne i radi lijepo.

Zanimljivosti i problemi

— Dobro ste govorili o tome da imamo streaming sa Amazonom, postoji plejer sa webom, sve je napisano na različitim programskim jezicima, obezbeđena je tolerancija grešaka i drugi poslovni zahtevi, uključujući i lični nalog koji je podržan za pravna lica i pojedinci, a možemo se integrirati s nekim koristeći OAuth 2.0, postoji zaštita od prijevare, blokiranje korisnika. Možemo dinamički uvoditi promjene jer smo to dobro uradili i sve je testirano.

Zanima me koje su neobičnosti bile uključene u pokretanje nečega. Da li je bilo nekih čudnih situacija kada ste razvijali backend, frontend, ispalo je nešto ludo i niste razumjeli šta da radite s tim?

Vladimir: Čini mi se da se to dešava tek zadnja tri mjeseca. Svaki dan. Kao što vidite, sva kosa mi je počupala.

Razvijte video platformu za 90 dana
Vladimir Krasilshchik nakon 3 mjeseca, kada se ispostavila neka vrsta igre i niko nije razumio šta da radi s njom

Svaki dan je bilo ovako nešto, kada je bio takav trenutak kada to uzmeš i počupaš kosu, ili shvatiš da nema nikog drugog i samo ti to možeš. Naš prvi veliki događaj bio je TechTrain. 6. juna u 2 sata ujutro još nismo pokrenuli proizvodno okruženje, Kolya ga je izbacio. I lični nalog nije radio kao server za autorizaciju koristeći OAuth2.0. Pretvorili smo ga u OAuth2.0 provajdera da povežemo platformu na njega. Radio sam verovatno 18 sati zaredom, gledao sam u kompjuter i nisam video ništa, nisam razumeo zašto ne radi, a Kolya je gledao moj kod sa daljine, tražio grešku u Spring konfiguraciji , našao, i LC je radio, a i u proizvodnji.

Nikolaj: I sat vremena prije nego što je TechTrain objavljen.

Ovdje je poređano mnogo zvijezda. Imali smo veliku sreću jer smo imali super tim, a svi su bili inspirisani idejom da to radimo online. Sva ova tri mjeseca bili smo vođeni činjenicom da smo „napravili YouTube“. Nisam sebi dozvolila da čupam kosu, već sam svima rekla da će sve proći, jer je zapravo sve odavno proračunato.

O performansama

— Možete li mi reći koliko je ljudi bilo na stranici na jednoj stazi? Da li je bilo problema sa performansama?

Nikolaj: Nije bilo problema sa performansama, kao što smo već rekli. Maksimalan broj ljudi koji su prisustvovali jednom izveštaju je bio 1300 ljudi, ovo je na Heisenbugu.

— Da li je bilo problema sa lokalnim gledanjem? I da li je moguće imati tehnički opis sa dijagramima kako sve to radi?

Nikolaj: Kasnije ćemo napraviti članak o tome.

Možete čak i lokalno otklanjati greške u streamovima. Kad su konferencije počele, postalo je još lakše, jer su se pojavili produkcijski streamovi koje možemo stalno gledati.

Vladimir: Koliko sam ja shvatio, front-end programeri su radili lokalno sa mocks-ovima, a onda, pošto je vrijeme za rolling developerima u frontu također kratko (5 minuta), nema problema s provjerom što se događa sa certifikatima.

— Sve je testirano i otklonjeno, čak i lokalno. To znači da ćemo napisati članak sa svim tehničkim karakteristikama, pokazati vam, reći vam sve sa dijagramima, kako je bilo.

Vladimir: Možete uzeti i ponoviti.

- Za 3 meseca.

Rezultat

— Sve opisano zajedno zvuči cool, s obzirom da je to uradila mala ekipa za tri meseca.

Nikolaj: Veliki tim ovo ne bi uradio. Ali mala grupa ljudi koji međusobno dosta blisko i dobro komuniciraju i mogu se dogovoriti mogla bi. Nemaju nikakve kontradikcije, arhitektura je izmišljena za dva dana, finalizirana i nije se zapravo promijenila. Postoji vrlo striktno olakšavanje dolazećih poslovnih zahtjeva u smislu gomilanja zahtjeva za značajkama i promjena.

— Šta je bilo na vašoj listi daljih zadataka kada su letnje konferencije već bile?

Nikolaj: Na primjer, krediti. Puzajuće linije na videu, iskačući prozori na nekim mjestima u videu u zavisnosti od sadržaja koji se prikazuje. Na primjer, govornik želi postaviti pitanje publici, a na ekranu se pojavljuje glas, koji se vraća nazad na osnovu rezultata glasanja samom govorniku. Neka vrsta društvene aktivnosti u vidu lajkova, srca, rejtinga izveštaja tokom same prezentacije, tako da možete da popunite feedback u pravom trenutku, a da vas kasnije ne ometaju formulari za povratne informacije. U početku ovako.

I također dodaje cijeloj platformi, osim za streaming i konferenciju, također stanje nakon konferencije. To su liste za reprodukciju (uključujući one koje su sastavili korisnici), eventualno sadržaj sa drugih prošlih konferencija, integrirani, označeni, dostupni korisniku, a dostupni su i za gledanje na našoj web stranici (live.jugru.org).

— Ljudi, hvala vam puno na odgovorima!

Ako među čitaocima ima onih koji su prisustvovali našim ljetnim konferencijama, podijelite svoje utiske o igraču i prijenosu. Šta vam je bilo zgodno, šta vas je iznerviralo, šta biste voleli da vidite u budućnosti?

Ako ste zainteresovani za platformu i želite da je vidite „u borbi“, koristimo je ponovo na našoj jesensko-zimske konferencije. Postoji čitav niz njih, tako da gotovo sigurno postoji onaj koji je pravi za vas.

izvor: www.habr.com

Dodajte komentar