Sviluppà una piattaforma video in 90 ghjorni

Sta primavera avemu trovu in cundizioni assai allegri. A causa di a pandemia, hè diventatu chjaru chì e nostre cunferenze d'estate anu da esse spustate in linea. È per guidà in ligna in modu efficiente, i suluzioni di software pronti ùn sò micca adattati per noi; avemu bisognu di scrive u nostru. È avemu avutu trè mesi per fà questu.

Hè chjaru chì sò stati trè mesi eccitanti. Ma da l'esternu ùn hè micca cumplettamente evidenti: chì hè una piattaforma di cunferenza in linea? Di quali parti hè custituitu ? Dunque, à l'ultimi di e cunferenze DevOops d'estate, aghju dumandatu à quelli chì eranu rispunsevuli di questu compitu:

  • Nikolay Molchanov - direttore tecnicu di JUG Ru Group;
  • Vladimir Krasilshchik hè un programatore Java pragmaticu chì travaglia nantu à u backend (pudete ancu vede i so rapporti à e nostre cunferenze Java);
  • Artyom Nikonov hè rispunsevule per tutti i nostri video streaming.

In modu, à e cunferenze di u vaghjimu-inguernu avemu aduprà una versione mejorata di a stessa piattaforma - tanti lettori di habra seranu sempre i so utilizatori.

Sviluppà una piattaforma video in 90 ghjorni

U quadru generale

— Chì era a cumpusizioni di a squadra ?

Nikolay Molchanov: Avemu un analista, un designer, un tester, trè front-end è un back-end. È, sicuru, un specialista in forma di T!

- Chì era u prucessu in generale?

Nikolay: Finu à a mità di marzu, ùn aviamu nunda prontu per in linea. È u 15 di marzu, tuttu u carrusel in linea hà cuminciatu à gira. Avemu stallatu parechji repositori, pianificatu, discututu l'architettura di basa è avemu fattu tuttu in trè mesi.

Questu, sicuru, hà passatu per e tappe classiche di a pianificazione, l'architettura, a selezzione di e funzioni, u votu per quelli funziunalità, a pulitica per quelli funziunalità, u so disignu, u sviluppu, a prova. In u risultatu, u 6 di ghjugnu, avemu rializatu tuttu à a produzzione. TechTrain. Ci era 90 ghjorni per tuttu.

- Avemu riesciutu à rializà ciò chì avemu impegnatu ?

Nikolay: Siccomu participemu avà à a cunferenza DevOops in linea, significa chì hà travagliatu. I personalmente impegnatu à a cosa principal: I purteraghju i clienti un strumentu cù quale ponu fà una cunferenza in linea.

A sfida era questu : dàci un strumentu cù quale pudemu trasmette e nostre cunferenze à i titulari di u bigliettu.

Tutta a pianificazione hè stata divisa in parechje tappe, è tutte e caratteristiche (circa 30 globale) sò state divise in 4 categurie:

  • chì faremu di sicuru (ùn pudemu campà senza elli),
  • chì faremu secondu,
  • chì ùn faremu mai,
  • è chì ùn faremu mai, mai.

Avemu fattu tutte e funziunalità da e prime dui categurie.

- Sò chì un totale di 600 emissioni JIRA sò stati creati. In trè mesi, avete fattu 13 microservices, è suspettate chì sò stati scritti micca solu in Java. Avete utilizatu diverse tecnulugia, avete dui clusters Kubernetes in trè zoni di dispunibilità è 5 flussi RTMP in Amazon.

Fighjemu avà ogni cumpunente di u sistema separatamente.

Streaming

— Cuminciamu cù quandu avemu digià una maghjina video, è hè trasmessa à certi servizii. Artyom, dicci cumu succede stu streaming?

Artyom Nikonov: U nostru schema generale s'assumiglia cusì: imagine da a camera -> a nostra sala di cuntrollu -> servitore RTMP locale -> Amazon -> video player. Più dettagli hà scrittu annantu à questu nantu à Habré in ghjugnu.

In generale, ci sò duie manere globale di fà questu: o nantu à hardware o basatu nantu à suluzioni software. Avemu sceltu a strada di u software perchè hè più faciule in u casu di parlanti remoti. Ùn hè micca sempre pussibule di portà hardware à un parlante in un altru paese, ma furnisce u software à u parlante pare più faciule è più affidabile.

Da un puntu di vista di hardware, avemu un certu numaru di camere (in i nostri studiosi è in parlanti remoti), un certu numaru di cuntrolli remoti in u studiu, chì qualchì volta deve esse riparatu ghjustu sottu à a tavula durante a trasmissione.

I segnali da sti dispusitivi entranu in l'urdinatori cù carte di cattura, carte di input / output, è carte di sonu. Quì i signali sò mischiati è assemblati in layout:

Sviluppà una piattaforma video in 90 ghjorni
Esempiu di un layout per 4 parlanti

Sviluppà una piattaforma video in 90 ghjorni
Esempiu di un layout per 4 parlanti

In più, a trasmissione cuntinuu hè furnita cù l'aiutu di trè computer: ci hè una macchina principale è un paru di quelli chì travaglianu à turnu. U primu urdinatore raccoglie u primu rapportu, u sicondu - a pausa, u primu - u prossimu rapportu, u sicondu - u prossimu pausa, è cusì. È a macchina principale mischia u primu cù u sicondu.

Questu crea un tipu di triangulu, è se qualchissia di sti nodi falla, pudemu rapidamente è senza perdita di qualità cuntinuà à furnisce u cuntenutu à i clienti. Avemu avutu una tale situazione. Durante a prima settimana di cunferenze, avemu riparatu una macchina, l'avemu attivata / spenta. A ghjente pare esse felice cù a nostra resilienza.

In seguitu, i flussi da l'urdinatori vanu à un servitore lucale, chì hà duie funzioni: rotta RTMP flussi è copia di salvezza. Allora avemu parechji punti di registrazione. I flussi di video sò dopu mandati à a parte di u nostru sistema custruitu nantu à i servizii Amazon SaaS. Avemu aduprà MediaLive,S3,CloudFront.

Nikolay: Chì succede quì prima chì u video ghjunghje à l'audienza? Avete da tagliallu in qualchì modu, nò?

Artyom: Cumpressemu u video da a nostra parte è u mandemu à MediaLive. Lancemu transcodificatori quì. Iddi transcode vidéos in tempu reale in parechji risuluzzioni cusì chì a ghjente pò fighjulà nantu à i so telefoni, attraversu Internet poviru in u paese, etc. Allora sti flussi sò tagliati pezzi, questu hè cumu funziona u protocolu HLS. Mandemu una playlist à u frontend chì cuntene puntatori à questi pezzi.

- Usemu a risoluzione 1080p?

Artyom: A larghezza di u nostru video hè u listessu cum'è 1080p - 1920 pixel, è l'altezza hè un pocu menu, a stampa hè più allungata - ci sò ragiuni per questu.

Ghjucatore

- Artyom hà descrittu cumu u video entra in flussi, cumu hè distribuitu in diverse playlists per diverse risoluzioni di schermu, tagliatu in pezzi è entra in u lettore. Kolya, avà dimmi chì tipu di ghjucatore hè questu, cumu si cunsuma u flussu, perchè HLS?

Nikolay: Avemu un lettore chì tutti i telespettatori di cunferenza ponu fighjà.

Sviluppà una piattaforma video in 90 ghjorni

Essenzialmente, questu hè un wrapper intornu à a biblioteca hls.js, nantu à quale parechji altri attori sò scritti. Ma avemu bisognu di funziunalità assai specifica: rewinding and marking the place where the person is, what report it is now watching. Avemu ancu bisognu di i nostri propri layout, ogni tipu di loghi è tuttu ciò chì hè statu custruitu cun noi. Per quessa, avemu decisu di scrive a nostra propria biblioteca (un wrapper sopra HLS) è incrustà nantu à u situ.

Questa hè a funziunalità radicali, cusì hè stata implementata quasi prima. È tandu tuttu hè crisciutu intornu à ellu.

In fatti, attraversu l'autorizazione, u ghjucatore riceve da u backend una playlist cù ligami à pezzi correlati cù u tempu è a qualità, scaricate i necessarii è li mostra à l'utilizatore, eseguendu qualchì "magia" in u caminu.

Sviluppà una piattaforma video in 90 ghjorni
Esempiu di timeline

- Un buttone hè custruitu ghjustu in u lettore per vede una cronologia di tutti i rapporti ...

Nikolay: Iè, avemu risoltu subitu u prublema di navigazione di l'utilizatori. À a mità d'aprili, avemu decisu chì ùn avemu micca trasmessu ognuna di e nostre cunferenze nantu à un situ web separatu, ma cumminendu tuttu in una sola. Cusì chì l'utilizatori di u bigliettu Full Pass ponu cambià liberamente trà e diverse cunferenze: sia trasmissioni in diretta sia registrazioni di quelle passate.

È per fà più faciule per l'utilizatori di navigà in u flussu attuale è cambià trà e piste, avemu decisu di fà un buttone "Trasmissione intera" è carte di rapportu horizontale per cambià trà tracce è rapporti. Ci hè un cuntrollu di u teclatu.

- Ci sò stati difficultà tecniche cun questu?

Nikolay: Anu avutu una barra di scorrimentu nantu à quale i punti di partenza di diversi rapporti eranu marcati.

- In fine, avete implementatu sti marchi nantu à a barra di scorrimentu prima chì YouTube facia qualcosa di simile?

Artyom: L'avianu in beta allora. Sembra chì questa hè una funzione abbastanza cumplessa perchè l'anu parzialmente pruvata cù l'utilizatori durante l'annu passatu. È avà hè ghjuntu à a vendita.

Nikolay: Ma in realtà l'avemu in vendita più veloce. Onestamente, daretu à sta funzione simplice ci hè una quantità enorme di backend, frontend, calculi è matematiche in u lettore.

Frontend

- Scupritemu cumu stu cuntenutu chì mustremu (carta di discorsu, parlanti, situ web, pianificazione) ghjunghje à u front-end ?

Vladimir Krasilshchik: Avemu parechji sistemi IT interni. Ci hè un sistema in quale tutti i rapporti è tutti i parlanti sò inseriti. Ci hè un prucessu per quale un parlante participa in una cunferenza. U parlante sottumette una dumanda, u sistema cattura, allora ci hè un certu pipeline secondu chì u rapportu hè creatu.

Sviluppà una piattaforma video in 90 ghjorni
Questu hè cumu u parlante vede u pipeline

Stu sistema hè u nostru sviluppu internu.

Dopu, avete bisognu di custruisce un schedariu da i rapporti individuali. Cum'è sapete, questu hè un prublema NP-duru, ma in qualchì modu risolvemu. Per fà questu, lanciamu un altru cumpunente chì genera un calendariu è u carica in u serviziu cloud di terzu Contentful. Quì, tuttu s'assumiglia à una tavula in quale ci sò ghjorni di a cunferenza, in i ghjorni ci sò slots di tempu, è in i slots ci sò rapporti, pause o attività di sponsorizazione. Allora u cuntenutu chì vedemu hè situatu in un serviziu di terzu. È u compitu hè di trasmette à u situ.

Sembra chì u situ hè solu una pagina cù un lettore, è ùn ci hè nunda di complicatu quì. Fora chì ùn hè micca. U backend daretu à sta pagina va à Contentful, riceve u calendariu da quì, genera alcuni oggetti è u manda à u frontend. Utilizendu una cunnessione websocket, chì ogni cliente di a nostra piattaforma face, li mandemu un aghjurnamentu à u schedariu da u backend à u frontend.

Casu veru: u parlante hà cambiatu di travagliu ghjustu durante a cunferenza. Avemu bisognu di cambià u so badge di a cumpagnia di u patronu. Cumu succede questu da u backend? Una aghjurnazione hè mandata à tutti i clienti via u websocket, è dopu u frontend stessu ridisegna u timeline. Tuttu chistu succede senza saldatura. A cumminazzioni di u serviziu di nuvola è parechji di i nostri cumpunenti ci dà l'uppurtunità di generà tuttu stu cuntenutu è furnisce à u fronte.

Nikolay: Hè impurtante chjarificà quì chì u nostru situ ùn hè micca una applicazione SPA classica. Il s'agit à la fois d'un site Web rendu et d'un SPA. Google veramente vede stu situ cum'è HTML renditu. Questu hè bonu per SEO è per furnisce u cuntenutu à l'utilizatore. Ùn aspetta micca chì 1,5 megabytes di JavaScript per carica prima di vede a pagina, vede immediatamente a pagina digià rendita, è u sente ogni volta chì cambia u rapportu. Tuttu succede in una meza seconda, postu chì u cuntenutu hè digià prontu è publicatu in u locu ghjustu.

- Tracemu una linea sottu à tutte e cose sopra, listendu e tecnulugia. Tyoma hà dettu chì avemu 5 flussi Amazon, è furnimu video è sonu quì. Avemu scripts bash quì, li usemu per lancià è cunfigurà ...

Artyom: Questu succede à traversu l'API AWS, ci sò assai più servizii tecnici laterali. Avemu spartutu e nostre rispunsabilità in modu chì mi cunsegna à CloudFront, è i sviluppatori front-end è back-end piglianu da quì. Avemu una quantità di i nostri propri ligami per simplificà u layout di cuntenutu, chì poi facemu in 4K, etc. Siccomu i termini eranu assai stretti, l'avemu fattu quasi interamente nantu à AWS.

- Allora tuttu questu entra in u lettore utilizendu u sistema di backend. Avemu TypeScript, React, Next.JS in u nostru lettore. È nantu à u backend avemu parechji servizii in C#, Java, Spring Boot è Node.js. Questu hè tuttu implementatu cù Kubernetes cù l'infrastruttura Yandex.Cloud.

Vogliu ancu nutà chì quandu aghju avutu bisognu di cunnosce a piattaforma, hè diventatu faciule: tutti i repositori sò in GitLab, tuttu hè chjamatu bè, i testi sò scritti, ci hè a documentazione. Questu hè, ancu in modu d'emergenza, anu cura di tali cose.

Limitazioni cummerciale è Analytics

- Avemu destinatu à 10 utilizatori basatu nantu à i bisogni di l'affari. Hè ora di parlà di e restrizioni cummerciale chì avemu avutu. Avemu avutu à assicurà una alta carica di travagliu, assicurà u rispettu di a lege nantu à a preservazione di e dati persunali. È chì altru ?

Nikolay: In principiu, avemu principiatu da esigenze video. A cosa più impurtante hè u almacenamentu video distribuitu in u mondu per una consegna rapida à u cliente. L'altri includenu a risoluzione 1080p, è ancu u rewind, chì parechji altri ùn implementanu micca in modu live. In seguitu avemu aghjustatu l'abilità di attivà a velocità 2x, cù u so aiutu pudete "catch up" cù u live è cuntinuà à fighjà a cunferenza in tempu reale. È in a strada, apparsu a funziunalità di marcatura di a cronologia. In più, duvemu esse toleranti à i difetti è sustene a carica di 10 000 cunnessione. Da un puntu di vista backend, questu hè circa 10 000 cunnessione multiplicate da 8 richieste per ogni rinfrescante di pagina. È questu hè digià 80 RPS / sec. Un pocu di.

— Ci era altre esigenze per una "esibizione virtuale" cù stand in linea di partenarii?

Nikolay: Iè, questu avia da esse fattu abbastanza rapidamente è universale. Avemu avutu finu à 10 cumpagnie partenarii per ogni cunferenza, è tutti anu da esse cumpletu in una settimana o duie. Tuttavia, u so cuntenutu differisce pocu in u formatu. Ma hè statu fattu un certu mutore di mudellu chì riunisce queste pagine nantu à a mosca, quasi senza più participazione à u sviluppu.

- Ci era ancu esigenze per l'analisi di viste è statistiche in tempu reale. Sapemu chì usemu Prometheus per questu, ma diteci in più detail: chì esigenze avemu da scuntrà per l'analitiche, è cumu hè implementatu?

Nikolay: Inizialmente, avemu esigenze di marketing per a cullizzioni per a prova A / B è a cullizzioni d'infurmazioni per capisce cumu furnisce bè u megliu cuntenutu à u cliente in u futuru. Ci hè ancu esigenze per qualchi analytics nantu à l'attività di i partenarii è l'analitiche chì vede (visite counter). Tutte l'infurmazioni sò cullate in tempu reale.

Pudemu furnisce sta infurmazione in forma aggregata ancu à i parlanti: quante persone vi fighjulavanu in un certu puntu in u tempu. À u listessu tempu, per rispettà a Legge Federale 152, u vostru contu persunale è e dati persunali ùn sò micca tracciati in ogni modu.

A piattaforma hà digià arnesi di cummercializazione è e nostre metriche per a misurazione di l'attività di l'utilizatori in tempu reale (chì hà guardatu ciò chì seconda di u rapportu) per custruisce grafici di l'assistenza à i rapporti. Basatu annantu à questi dati, una ricerca hè fatta chì farà megliu e prossime cunferenze.

Frode

— Avemu meccanismi anti-fraude ?

Nikolay: A causa di u tempu strettu da un puntu di vista cummerciale, u compitu ùn hè micca inizialmente stabilitu per bluccà immediatamente e cunnessione innecessarii. Se dui utilizatori anu logatu in u stessu contu, puderanu vede u cuntenutu. Ma sapemu quante vedute simultanee ci era da un contu. È avemu pruibitu parechji violatori particularmente maliziusi.

Vladimir: À u so creditu, unu di l'utilizatori pruibiti hà capitu perchè questu hè accadutu. Hè ghjuntu, si scusò è hà prumessu di cumprà un bigliettu.

- Per tuttu ciò chì succede, duvete traccia cumplettamente tutti l'utilizatori da l'entrata à a surtita, sempre sapè ciò chì facenu. Cumu funziona stu sistema?

Vladimir: Vogliu parlà di l'analitiche è di e statistiche, chì poi analizemu per u successu di u rapportu o ponu dopu furnisce à i partenarii. Tutti i clienti sò cunnessi via una cunnessione websocket à un cluster backend specificu. Si ferma quì avellana. Ogni cliente in ogni periodu di tempu manda ciò ch'ellu face è quale traccia chì vede. Allora sta infurmazione hè aggregata cù l'impieghi veloci Hazelcast è rimandate à tutti quelli chì fighjanu queste tracce. Videmu in u cantonu quantu persone sò avà cun noi.

Sviluppà una piattaforma video in 90 ghjorni

A stessa infurmazione hè guardata in Mongo è va à u nostru lacu di dati, da quale avemu l'uppurtunità di custruisce un graficu più interessante. A quistione hè: quanti utilizatori unichi anu vistu stu rapportu? Andemu à postgres, Ci sò pings di tutte e persone chì venenu per l'id di stu rapportu. Avemu cullatu, aggregate unichi, è avà pudemu capisce.

Nikolay: Ma à u stessu tempu, avemu ancu riceve dati in tempu reale da Prometheus. Hè pusatu contru à tutti i servizii Kubernetes, contru à Kubernetes stessu. Raccoglie assolutamente tuttu, è cù Grafana pudemu custruisce qualsiasi graficu in tempu reale.

Vladimir: Da una banda, scarichemu questu per un ulteriore prucessu OLAP. È per OLTP, l'applicazione scarica tuttu in Prometheus, Grafana è i grafici cunvergenu ancu!

- Questu hè u casu quandu i grafici cunvergenu.

Cambiamenti dinamichi

- Dìcimu cumu si sviluppanu cambiamenti dinamichi: se u rapportu hè statu annullatu 6 minuti prima di l'iniziu, chì hè a catena d'azzioni? Quale pipeline funziona?

Vladimir: U pipeline hè assai cundizionale. Ci sò parechje pussibulità. U primu hè chì u prugramma di generazione di u calendariu hà travagliatu è cambiatu u schedariu. U calendariu mudificatu hè caricatu in Contentful. Dopu chì u backend capisce chì ci sò cambiamenti per sta cunferenza in Contentful, piglia è ricustruisce. Tuttu hè recullatu è mandatu via websocket.

A seconda pussibilità, quandu tuttu succede à un ritmu vertiginu: l'editore cambia manualmente l'infurmazioni in Contentful (ligame à Telegram, presentazione di parlante, etc.) è a stessa logica funziona cum'è a prima volta.

Nikolay: Tuttu succede senza rinfriscà a pagina. Tutti i cambiamenti accadenu in modu assolutu per u cliente. U stessu passa per i rapporti di cambiamentu. Quandu vene u tempu, u rapportu è l'interfaccia cambianu.

Vladimir: Inoltre, ci sò cutoffs di tempu per l'iniziu di i rapporti in u timeline. À u principiu ùn ci hè nunda. È se passate u mouse nantu à a striscia rossa, in un certu puntu, grazia à u direttore di trasmissione, i cutoffs appariscenu. U direttore stabilisce l'iniziu currettu di a trasmissione, u backend ripiglià stu cambiamentu, calcula l'ora di iniziu è di fine di e presentazioni di tutta a traccia in cunfurmità cù u calendariu di a cunferenza, u manda à i nostri clienti, è u ghjucatore traccia cutoffs. Avà l'utilizatore pò facilmente navigà à u principiu è a fine di u rapportu. Era un requisitu cummerciale strettu, assai convenientu è utile. Ùn perde micca u tempu per truvà l'ora di iniziu attuale per u rapportu. È quandu facemu una vista previa, serà assolutamente maravigliu.

Impiegazione

- Vogliu dumandà à a distribuzione. Kolya è a squadra anu passatu assai tempu à u principiu per stabilisce tutta l'infrastruttura in quale tuttu si sviluppa per noi. Dimmi, di chì hè tuttu fattu ?

Nikolay: Da un puntu di vista tecnicu, avemu avutu inizialmente un requisitu per u pruduttu per esse u più astrattu pussibule da qualsiasi venditore. Venite à AWS per fà script Terraform specificamente da AWS, o specificamente da Yandex, o da Azure, etc. ùn hè micca veramente adattatu. Avemu avutu à spustà in un locu in un certu puntu.

Per e prime trè simane avemu sempre cercatu un modu per fà questu megliu. In u risultatu, avemu ghjuntu à a cunclusione chì Kubernetes in questu casu hè u nostru tuttu, perchè ci permette di creà servizii di scala in autumàticu, auto-rollout, è uttene quasi tutti i servizii fora di a scatula. Naturalmente, tutti i servizii anu da esse furmatu per travaglià cù Kubernetes, Docker, è a squadra hà avutu ancu amparà.

Avemu dui gruppi. Pruduzzione è pruduzzione. Sò assolutamente identici in quantu à hardware è paràmetri. Implementemu l'infrastruttura cum'è codice. Tutti i servizii sò automaticamente implementati in trè ambienti da rami di funzioni, rami maestri, rami di teste, è GitLab utilizendu un pipeline automaticu. Questu hè integratu à u massimu in GitLab, integratu à u massimu cù Elastic, Prometheus.

Avemu l'uppurtunità di fà rapidamente (per u backend in 10 minuti, per u frontend in 5 minuti) lanciate cambiamenti à qualsiasi ambiente cù tutti i testi, integrazioni, eseguisce teste funziunali, testi d'integrazione in l'ambiente, è ancu pruvà cù testi di carica nantu à un ambiente di prova apprussimatamente a stessa cosa chì vulemu ottene in a produzzione.

À propositu di testi

- Pruvate quasi tuttu, hè difficiule di crede cumu avete scrittu tuttu. Ci pudete dì di e teste di backend: quantu tuttu hè coperto, chì teste?

Vladimir: Dui tipi di teste sò stati scritti. I primi sò testi di cumpunenti. Teste di livellu di elevazione di l'intera applicazione di primavera è basa in Testcontainers. Questa hè una prova di i scenarii di cummerciale di u più altu livellu. Ùn teste micca e funzioni. Testemu solu alcune cose grandi. Per esempiu, ghjustu in a prova, u prucessu di login in un utilizatore hè emulatu, a dumanda di l'utilizatore per i biglietti per induve ellu pò andà, è una dumanda d'accessu per fighjà u flussu. Scenarii d'utilizatori assai chjaru.

Apprussimatamente a stessa cosa hè implementata in i prucessi di integrazione chjamati, chì in realtà correnu nantu à l'ambiente. In fatti, quandu a prossima implementazione in a produzzione hè ghjunta, i veri scenari basi sò ancu in pruduzzione. U stessu login, dumandendu i biglietti, dumandendu l'accessu à CloudFront, verificate chì u flussu cunnetta veramente cù i mo permessi, verificate l'interfaccia di u direttore.

À u mumentu aghju circa 70 teste di cumpunenti è circa 40 teste di integrazione à bordu. A cobertura hè assai vicinu à u 95%. Questu hè per i cumpunenti, menu per quelli di integrazione, ùn ci hè micca cusì necessariu. Cunsiderendu chì u prugettu implica ogni tipu di generazione di codice, questu hè un indicatore assai bonu. Ùn ci era micca altru modu per fà ciò chì avemu fattu in trè mesi. Perchè s'è avemu pruvatu manualmente, dendu e funziunalità à u nostru tester, è ella truverà bugs è li rinviate à noi per correzioni, allora stu viaghju di andata per debug u codice seria assai longu, è ùn avemu micca scuntrà i termini.

Nikolay: Convenzionalmente, per fà una regressione in tutta a piattaforma quandu cambia una funzione, avete bisognu à pusà è poke in ogni locu per dui ghjorni.

Vladimir: Per quessa, hè un grande successu chì quandu aghju stimatu una funzione, dicu chì aghju bisognu di 4 ghjorni per dui penne simplici è 1 websocket, Kolya permette. Hè digià abituatu à u fattu chì questi ghjorni 4 includenu 2 tipi di teste, è dopu, assai prubabilmente, hà da travaglià.

Nikolay: Aghju ancu 140 testi scritti: cumpunente + funziunale, chì facenu a listessa cosa. Tutti i stessi scenarii sò pruvati in pruduzzione, in prova è in produzzione. Avemu dinò recentemente aghjustatu testi funziunali di UI basi. Questu modu copremu a funziunalità più basica chì pò fallu.

Vladimir: Di sicuru, vale a pena parlà di testi di carica. Era necessariu di pruvà a piattaforma sottu una carica vicinu à a vera per capisce cumu tuttu hè, ciò chì succede cù Rabbit, ciò chì succede cù i JVM, quantu memoria hè veramente necessariu.

- Ùn sò micca sicuru se testemu qualcosa in u latu di u flussu, ma mi ricordu chì ci sò stati prublemi cù i transcoders quandu avemu fattu riunioni. Avemu pruvatu i flussi?

Artyom: Pruvatu iterativamente. Urganizà riunioni. In u prucessu di urganizà incontri, ci era circa 2300 biglietti JIRA. Quessi sò solu cose generiche chì a ghjente hà fattu per fà riunioni. Avemu pigliatu parte di a piattaforma in una pagina separata per incontri, chì era gestita da Kirill Tolkachev (parlà).

Per esse onesto, ùn ci era micca grandi prublemi. Litteralmente un paru di volte avemu pigliatu bug di cache in CloudFront, l'avemu risoltu abbastanza rapidamente - avemu solu ricunfiguratu e pulitiche. Ci era significativamente più bug in e persone, in i sistemi di streaming in u situ.

Duranti e cunferenze, aghju avutu à scrive parechji più esportatori per copre più equipaghji è servizii. In certi lochi aghju avutu à fà e mo biciclette solu per a misura di metrica. U mondu di l'hardware AV (audio-video) ùn hè micca assai rosatu - avete qualchì tipu di "API" di l'equipaggiu chì ùn pudete micca influenzallu. È hè luntanu da un fattu chì puderete uttene l'infurmazioni chì avete bisognu. I venditori di hardware sò veramente lenti, è hè quasi impussibile di ottene ciò chì vulete da elli. In u tutale, ci sò più di 100 pezzi di hardware, ùn dannu micca ciò chì avete bisognu, è scrive l'esportatori strani è redundante, grazia à quale pudete almenu debug u sistema.

Equipment

- Mi ricordu cumu prima di l'iniziu di e cunferenze avemu acquistatu parzialmente equipaggiu supplementu.

Artyom: Avemu compru computers, laptops, è batterie. À u mumentu pudemu campà senza elettricità per 40 minuti. In u ghjugnu ci sò stati tempeste severi in San Petruburgu - cusì avemu avutu un tali blackout. À u listessu tempu, parechji fornituri venenu à noi cù ligami ottichi da diversi punti. Questu hè veramente 40 minuti di custruzzione di downtime, durante u quale averemu luci, sonu, camere, etc.

- Avemu una storia simile cù Internet. In l'uffiziu induve i nostri studi sò situati, trascinamu una reta feroce trà i piani.

Artyom: Avemu 20 Gbit di fibra trà i piani. In più longu à i piani, in qualchì locu ci hè l'ottica, in qualchì locu ùn ci hè micca otticu, ma ci sò ancu menu canali cà i gigabit - eseguimu video nantu à elli trà e piste di a cunferenza. In generale, hè assai convenientu di travaglià nantu à a vostra propria infrastruttura; raramente pudete fà questu in cunferenze offline in siti.

- Prima di travaglià in JUG Ru Group, aghju vistu cumu e stanze di hardware in cunferenze offline sò state stallate durante a notte, induve ci era un grande monitoru cù tutte e metriche chì custruite in Grafana. Avà ci hè ancu una sala di a sede in a quale u squadra di sviluppu si trova, chì durante a cunferenza corregge qualchi bug è sviluppa funzioni. À u listessu tempu, ci hè un sistema di surviglianza chì si vede nantu à una grande schermu. Artyom, Kolya è altri picciotti si sentenu è assicuratevi chì tuttu ùn cascà micca è travaglia bè.

Curiosità è prublemi

- Avete parlatu bè di u fattu chì avemu streaming cù Amazon, ci hè un lettore cù u web, tuttu hè scrittu in diverse lingue di prugrammazione, a tolleranza à i difetti è altre esigenze cummerciale sò furnite, cumpresu un contu persunale chì hè supportatu per e persone giuridiche è individui, è pudemu integrà cù qualchissia chì usa OAuth 2.0, ci hè anti-fraude, bloccu d'utilizatori. Pudemu lancià cambiamenti dinamicamente perchè l'avemu fattu bè, è tuttu hè pruvatu.

Sò interessatu à sapè chì stranezze eranu implicati in avè qualcosa cuminciatu. Ci hè statu qualchì situazione strana quandu avete sviluppatu un backend, frontend, qualcosa di pazzia hè stata è ùn avete micca capitu chì fà cun questu?

Vladimir: Mi pare chì questu hè accadutu solu per l'ultimi trè mesi. Ogni ghjornu. Comu pudete vede, tutti i mo capelli sò stati strappati.

Sviluppà una piattaforma video in 90 ghjorni
Vladimir Krasilshchik dopu à 3 mesi, quandu un tipu di ghjocu hè diventatu è nimu hà capitu chì fà cun ellu.

Ogni ghjornu ci era qualcosa di questu, quandu ci era un momentu cusì quandu u pigliate è strappate i vostri capelli, o capisce chì ùn ci hè nimu, è solu pudete fà. U nostru primu grande avvenimentu era TechTrain. U 6 di ghjugnu à 2 a.m. ùn aviamu micca ancu sbulicatu l'ambiente di produzzione, Kolya l'avia rializatu. È u contu persunale ùn hà micca travagliatu cum'è un servitore d'autorizazione cù OAuth2.0. Avemu turnatu in un fornitore OAuth2.0 per cunnette a piattaforma à questu. Aviu travagliatu per probabilmente 18 ore dritta, aghju guardatu l'urdinatore è ùn aghju micca vistu nunda, ùn aghju micca capitu perchè ùn era micca travagliatu, è Kolya hà guardatu u mo codice remotamente, cercò un bug in a cunfigurazione Spring. , truvò, è u LC hà travagliatu, è ancu in a produzzione.

Nikolay: È una ora prima di TechTrain a liberazione hè stata.

Un saccu di stelle sò stati allinati quì. Eramu assai furtunati perchè avemu avutu una super squadra, è tutti sò stati inspirati da l'idea di fà in linea. Tutti questi trè mesi eramu guidati da u fattu chì avemu "fattu YouTube". Ùn m'aghju micca permessu di strappò i mo capelli, ma disse à tutti chì tuttu u travagliu, perchè in fattu, tuttu era statu calculatu longu fà.

Circa u rendiment

- Pudete dì quante persone eranu nantu à u situ nantu à una pista? Ci sò stati prublemi di rendiment?

Nikolay: Ùn ci era micca prublemi di rendiment, cum'è avemu digià dettu. U numaru massimu di persone chì anu assistitu à un rapportu era 1300 persone, questu hè nantu à Heisenbug.

- Ci sò stati prublemi cù a visualizazione lucali? È hè pussibule avè una descrizzione tecnica cù diagrammi di cumu tuttu funziona?

Nikolay: Faremu un articulu annantu à questu dopu.

Pudete ancu debug streams in u locu. Una volta chì e cunferenze cumincianu, hè diventatu ancu più faciule, perchè i flussi di produzzione apparsu chì pudemu fighjà tuttu u tempu.

Vladimir: Cum'è l'aghju capitu, i sviluppatori front-end anu travagliatu in u locu cù mocks, è dopu, postu chì u tempu di sparghje à i devs in fronte hè ancu cortu (5 minuti), ùn ci sò micca prublemi cù cuntrollà ciò chì succede cù i certificati.

- Tuttu hè pruvatu è debuggatu, ancu in u locu. Questu significa chì scriveremu un articulu cù tutte e caratteristiche tecniche, vi mustrarà, vi dicu tuttu cù diagrammi, cumu era.

Vladimir: Pudete piglià è ripetiri.

- In 3 mesi.

U risultatu

- Tuttu ciò chì descrive inseme sona cool, cunziddi chì hè statu fattu da una piccula squadra in trè mesi.

Nikolay: Un grande squadra ùn faria micca questu. Ma un picculu gruppu di pirsuni chì cumunicanu abbastanza vicinu è bè cù l'altri è ponu ghjunghje à un accordu puderia. Ùn anu micca cuntradizioni, l'architettura hè stata inventata in dui ghjorni, hè stata finalizata è ùn hà micca veramente cambiatu. Ci hè una facilitazione assai stretta di i bisogni di l'affari entranti in quantu à l'accumulazione di richieste è cambiamenti di funzioni.

— Chì era nantu à a vostra lista di più cumpetenze quandu e cunferenze di l'estate avianu digià fattu ?

Nikolay: Per esempiu, i crediti. Linee creeping nantu à u video, pop-ups in certi lochi in u video secondu u cuntenutu chì si mostra. Per esempiu, u parlante vole dumandà una dumanda à l'audienza, è un votu s'appoghja nantu à u screnu, chì torna in daretu basatu annantu à i risultati di u votu à u parlante stessu. Qualchese tipu d'attività suciale in forma di piace, cori, valutazioni di u rapportu durante a presentazione stessu, in modu chì pudete cumpiendu feedback à u mumentu propiu senza esse distrattu dopu da forme di feedback. In principiu cum'è questu.

È aghjunghjendu ancu à tutta a piattaforma, eccettu u streaming è a cunferenza, ancu un statu post-conferenza. Quessi sò playlists (cumprese quelli compilati da l'utilizatori), possibbilmente cuntenutu da altre cunferenze passate, integrate, etichettate, accessibili à l'utilizatori, è ancu dispunibili per vede nantu à u nostru situ web (live.jugru.org).

- Ragazzi, grazie assai per e vostre risposte !

Se trà i lettori ci sò quelli chì anu assistitu à e nostre cunferenze d'estate, per piacè sparte e vostre impressioni di u ghjucatore è trasmette. Ciò chì era cunvene, ciò chì vi irritava, chì vulete vede in u futuru?

Sè vo site interessatu à a piattaforma è vulete vedà "in battaglia", l'avemu aduprà novu nantu à u nostru cunferenze autunno-inguernu. Ci hè una larga gamma di elli, cusì ci hè quasi certamente unu chì hè ghjustu per voi.

Source: www.habr.com

Add a comment