Ngamekarkeun platform video dina 90 poé

Musim semi ieu kami mendakan diri dina kaayaan anu riang pisan. Kusabab pandémik, janten jelas yén konperénsi usum panas urang kedah dipindahkeun sacara online. Sareng pikeun ngalaksanakeunana sacara online sacara éfisién, solusi parangkat lunak anu siap-siap henteu cocog pikeun kami; kami kedah nyerat nyalira. Sareng urang ngagaduhan tilu bulan pikeun ngalakukeun ieu.

Ieu jelas yén éta geus tilu bulan seru. Tapi ti luar teu sagemblengna atra: naon platform konferensi online? bagian naon eta diwangun ku? Ku alatan éta, dina ahir konferensi DevOops usum panas, kuring naros ka jalma anu tanggung jawab pikeun tugas ieu:

  • Nikolay Molchanov - diréktur téknis JUG Ru Grup;
  • Vladimir Krasilshchik mangrupikeun programer Java pragmatis anu damel di backend (anjeun ogé tiasa ningali laporan na dina konperénsi Java kami);
  • Artyom Nikonov tanggung jawab pikeun sadaya streaming pidéo urang.

Ku jalan kitu, dina konperénsi usum gugur-usum tiris kami bakal ngagunakeun vérsi anu ditingkatkeun tina platform anu sami - janten seueur pamiarsa habra masih bakal janten pangguna na.

Ngamekarkeun platform video dina 90 poé

Gambar sakabéh

- Naon komposisi tim?

Nikolay Molchanov: Kami gaduh analis, desainer, panguji, tilu tungtung payun, sareng tungtung tukang. Sareng, tangtosna, spesialis T ngawangun!

— Kumaha prosésna sacara umum?

Nikolay: Nepi ka pertengahan Maret, urang teu boga nanaon siap online pisan. Sareng tanggal 15 Maret, sadaya carousel online mimiti muter. Urang nyetél sababaraha repositories, rencanana, ngabahas arsitektur dasar sarta ngalakukeun sagalana dina tilu bulan.

Ieu, tangtosna, ngaliwatan tahap klasik tina tata, arsitéktur, Pilihan fitur, voting pikeun fitur maranéhanana, kawijakan pikeun fitur maranéhanana, desain maranéhanana, ngembangkeun, nguji. Hasilna, dina 6 Juni, urang digulung kaluar sagalana kana produksi. TechTrain. Aya 90 dinten kanggo sadayana.

- Naha urang tiasa ngalaksanakeun naon anu urang komitmen?

Nikolay: Kusabab urang ayeuna milu dina konperénsi DevOops online, éta hartosna tiasa dianggo. Kuring pribadi komitmen kana hal utama: Kuring bakal mawa konsumén alat nu aranjeunna tiasa ngadamel konferensi online.

Tangtanganna nyaéta kieu: pasihan kami alat anu kami tiasa nyiarkeun konperénsi kami ka anu gaduh tikét.

Sadaya perencanaan dibagi kana sababaraha tahap, sareng sadaya fitur (kira-kira 30 global) dibagi kana 4 kategori:

  • anu pasti bakal urang laksanakeun (urang moal tiasa hirup tanpa aranjeunna),
  • anu bakal urang laksanakeun kadua,
  • anu moal pernah urang laksanakeun,
  • jeung nu urang moal pernah, kantos ngalakukeun.

Kami ngadamel sadaya fitur tina dua kategori munggaran.

- Kuring nyaho yén jumlahna aya 600 masalah JIRA dijieun. Dina tilu bulan, anjeun nyieun 13 microservices, sarta kuring curiga yen aranjeunna ditulis teu ukur di Java. Anjeun nganggo téknologi anu béda, anjeun gaduh dua klaster Kubernetes dina tilu zona kasadiaan sareng 5 aliran RTMP di Amazon.

Hayu urang ayeuna kasampak di unggal komponén sistem nyalira.

Streaming

— Hayu urang mimitian ku lamun urang geus boga gambar video, sarta eta geus dikirimkeun ka sababaraha layanan. Artyom, wartosan kami kumaha streaming ieu?

Artyom Nikonov: Skéma umum urang sapertos kieu: gambar tina kaméra -> kamar kontrol urang -> server RTMP lokal -> Amazon -> pamuter video. Leuwih jéntré wrote ngeunaan eta on Habré dina Juni.

Sacara umum, aya dua cara global pikeun ngalakukeun ieu: boh dina hardware atanapi dumasar kana solusi parangkat lunak. Urang milih jalur software sabab leuwih gampang dina kasus speaker jauh. Teu salawasna mungkin pikeun mawa hardware ka spiker di nagara sejen, tapi delivering software ka spiker sigana gampang tur leuwih dipercaya.

Tina sudut pandang hardware, urang gaduh sababaraha kaméra (dina studio sareng spiker jarak jauh), sababaraha kadali jauh di studio, anu kadang-kadang kedah dilereskeun langsung handapeun méja salami siaran.

Sinyal tina alat-alat ieu asup ka komputer nganggo kartu newak, kartu input/output, sareng kartu sora. Aya sinyal-sinyal dicampur sareng dirakit kana perenah:

Ngamekarkeun platform video dina 90 poé
Conto perenah pikeun 4 speaker

Ngamekarkeun platform video dina 90 poé
Conto perenah pikeun 4 speaker

Salajengna, siaran kontinyu disayogikeun kalayan bantosan tilu komputer: aya hiji mesin utama sareng sapasang anu damel. Komputer kahiji ngumpulkeun laporan kahiji, kadua - istirahat, kahiji - laporan salajengna, kadua - istirahat salajengna, jeung saterusna. Jeung mesin utama mixes kahiji jeung kadua.

Ieu nyiptakeun jenis segitiga, sarta lamun salah sahiji titik ieu gagal, urang bisa gancang sarta tanpa leungitna kualitas neruskeun nganteurkeun eusi ka klien. Kami ngagaduhan kaayaan sapertos kitu. Salila minggu mimiti konferensi, urang ngalereskeun hiji mesin, dihurungkeun / pareum. Jalma-jalma sigana bagja ku daya tahan urang.

Salajengna, aliran tina komputer angkat ka server lokal, anu ngagaduhan dua tugas: rute aliran RTMP sareng ngarékam cadangan. Janten urang gaduh sababaraha titik rékaman. Aliran pidéo teras dikirim ka bagian tina sistem kami anu diwangun dina jasa Amazon SaaS. Urang make MediaLive:,S3, CloudFront.

Nikolay: Naon kajadian di dinya saméméh video ngahontal panongton? Anjeun kudu motong eta kumaha bae, katuhu?

Artyom: Kami niiskeun pidéo dina bagian kami sareng kirimkeun ka MediaLive. Urang ngajalankeun transcoders dinya. Aranjeunna transcode pidéo sacara real waktos kana sababaraha résolusi supados masarakat tiasa nonton dina teleponna, ngalangkungan Internét anu goréng di nagara éta, sareng sajabana. Lajeng aliran ieu dipotong kana sakumpulan, ieu kumaha protokol jalan HLS. Urang ngirim playlist ka frontend nu ngandung pointers kana sakumpulan ieu.

— Naha urang nganggo resolusi 1080p?

Artyom: Lebar pidéo kami sami sareng 1080p - 1920 piksel, sareng jangkungna sakedik kirang, gambarna langkung elongated - aya alesan pikeun ieu.

Pamaén

- Artyom ngajelaskeun kumaha pidéo asup kana aliran, kumaha éta disebarkeun kana daptar puter anu béda pikeun résolusi layar anu béda, potong sakumpulan sareng asup kana pamuter. Kolya, ayeuna wartosan kuring naon jinis pamuter ieu, kumaha éta nganggo aliran, naha HLS?

Nikolay: Simkuring boga pamuter nu sagala pemirsa konferensi bisa lalajo.

Ngamekarkeun platform video dina 90 poé

Intina, ieu téh wrapper sabudeureun perpustakaan hls.js, nu ditulis loba pamaén séjén. Tapi kami peryogi fungsionalitas anu khusus pisan: ngagulung sareng nyirian tempat dimana jalma éta, laporan naon anu ayeuna anjeunna tingali. Urang ogé diperlukeun layouts sorangan, sagala sorts logos jeung sagalana sejenna anu diwangun dina kalawan kami. Ku alatan éta, urang mutuskeun pikeun nulis perpustakaan urang sorangan (a wrapper leuwih HLS) jeung embed eta dina loka.

Ieu mangrupikeun pungsionalitas akar, janten éta dilaksanakeun ampir heula. Lajeng sagalana tumuwuh sabudeureun eta.

Kanyataanna, ngaliwatan otorisasina, pamuter nu narima ti backend playlist kalawan tumbu ka sakumpulan correlated kalawan waktu jeung kualitas, undeuran nu diperlukeun tur nembongkeun ka pamaké, ngajalankeun sababaraha "magic" sapanjang jalan.

Ngamekarkeun platform video dina 90 poé
Conto timeline

- Tombol diwangun langsung kana pamuter pikeun ningalikeun garis waktos sadaya laporan ...

Nikolay: Leres, urang langsung ngarengsekeun masalah navigasi pangguna. Dina pertengahan April, urang mutuskeun yén urang moal disiarkeun unggal konferensi urang dina ramatloka misah, tapi bakal ngagabungkeun sagalana dina hiji. Sangkan pamaké tikét Full Pass bisa kalawan bébas pindah antara konferensi béda: duanana siaran langsung jeung rekaman nu kaliwat.

Sareng pikeun ngagampangkeun pangguna pikeun nganapigasi aliran ayeuna sareng ngalih antara lagu, kami mutuskeun pikeun ngadamel tombol "Siaran Sakabeh" sareng kartu laporan horisontal pikeun ngalih antara lagu sareng laporan. Aya kontrol keyboard.

- Naha aya kasusah téknis sareng ieu?

Nikolay: Aranjeunna ngagaduhan gulung bar dimana titik awal laporan anu béda ditandaan.

— Tungtungna, naha anjeun nerapkeun tanda ieu dina gulung bar sateuacan YouTube ngalakukeun hal anu sami?

Artyom: Aranjeunna kagungan eta dina béta lajeng. Sigana mah ieu mangrupikeun fitur anu kompleks sabab aranjeunna parantos nguji sawaréh sareng pangguna dina taun katukang. Sareng ayeuna parantos ngahontal penjualan.

Nikolay: Tapi urang saleresna ngagaduhan éta pikeun dijual langkung gancang. Jujur, balik fitur basajan ieu aya jumlah badag backend, frontend, itungan jeung math jero pamuter nu.

Tungtung payun

— Hayu urang terang kumaha eusi ieu anu urang tunjukkeun (kartu ucapan, spiker, halaman wéb, jadwal) dugi ka tungtung payun?

Vladimir Krasilshchik: Kami ngagaduhan sababaraha sistem IT internal. Aya sistem dimana sadaya laporan sareng sadaya panyatur diasupkeun. Aya hiji prosés dimana speaker nyokot bagian dina konferensi. Spéker ngirimkeun aplikasi, sistem nangkep éta, teras aya pipa anu tangtu numutkeun laporan éta.

Ngamekarkeun platform video dina 90 poé
Ieu kumaha spiker ningali pipa

Sistem ieu mangrupikeun pamekaran internal urang.

Salajengna, anjeun kedah ngawangun jadwal tina laporan individu. Anjeun terang, ieu masalah NP-teuas, tapi urang kumaha bae ngajawab eta. Jang ngalampahkeun ieu, urang ngajalankeun komponén séjén nu ngahasilkeun jadwal tur unggah ka layanan awan pihak katilu Contentful. Aya, sagalana Sigana mah tabel nu aya poé konferensi, dina poé aya slot waktu, sarta dina slot aya laporan, ngarecah atawa kagiatan sponsor. Janten eusi anu urang tingali aya dina jasa pihak katilu. Jeung tugas téh nepikeun ka loka.

Ieu bakal sigana nu situs ngan hiji kaca sareng pamuter, tur aya nanaon pajeulit di dieu. Iwal éta henteu. The backend balik kaca ieu mana anu ka Contentful, meunang jadwal ti dinya, dibangkitkeun sababaraha objék sarta ngirimkeun ka frontend nu. Ngagunakeun sambungan websocket, nu unggal klien tina platform urang nyieun, urang ngirim anjeunna apdet kana jadwal ti backend mun frontend nu.

Kasus nyata: spiker robah jobs katuhu salila konferensi. Urang kudu ngaganti badge perusahaan dunungan na. Kumaha ieu lumangsung ti backend nu? Pembaruan dikirim ka sadaya klien via websocket, teras frontend sorangan ngagambar ulang timeline. Sadaya ieu lumangsung seamlessly. Kombinasi jasa awan sareng sababaraha komponén kami masihan kami kasempetan pikeun ngahasilkeun sadaya kontén ieu sareng nyayogikeun ka payun.

Nikolay: Penting pikeun netelakeun di dieu yén situs kami sanés aplikasi SPA klasik. Ieu duanana mangrupa perenah basis, rendered ramatloka sarta hiji SPA. Google sabenerna nilik situs ieu salaku rendered HTML. Ieu alus keur SEO jeung delivering eusi ka pamaké. Teu ngadagoan 1,5 megabytes JavaScript pikeun muka saméméh ningali kaca, éta langsung ningali kaca geus rendered, sarta anjeun ngarasa eta unggal waktos Anjeun pindah laporan. Sagalana lumangsung dina satengah detik, saprak eusi geus siap tur dipasang dina tempat katuhu.

— Hayu urang ngagambar garis dina sagala hal di luhur ku daptar téknologi. Tyoma ngomong yén urang boga 5 aliran Amazon, sarta kami nganteurkeun video jeung sora aya. Kami ngagaduhan skrip bash di dinya, kami nganggo éta pikeun ngaluncurkeun sareng ngonpigurasikeun ...

Artyom: Ieu lumangsung ngaliwatan API AWS, aya loba jasa samping teknis aya. Urang dibagi tanggung jawab urang ambéh kuring nganteurkeun ka CloudFront, sarta pamekar hareup-tungtung jeung tukang-tungtung nyandak eta ti dinya. Kami ngagaduhan sajumlah beungkeutan sorangan pikeun nyederhanakeun perenah kontén, anu teras urang damel di 4K, jsb. Kusabab deadlines ketat pisan, kami ngalakukeun éta ampir sadayana dina AWS.

- Lajeng sadayana ieu mana kana pamuter ngagunakeun sistem backend. Kami ngagaduhan TypeScript, React, Next.JS dina pamuter kami. Sarta dina backend urang gaduh sababaraha layanan dina C #, Java, Spring boot jeung Node.js. Ieu sadayana disebarkeun nganggo Kubernetes nganggo infrastruktur Yandex.Cloud.

Kuring ogé hoyong dicatet yén nalika kuring peryogi kenalan sareng platformna, tétéla gampang: sadaya repositori aya dina GitLab, sadayana dingaranan, tés ditulis, aya dokuméntasi. Nyaéta, sanajan dina modeu darurat, aranjeunna ngurus hal sapertos kitu.

Konstrain bisnis jeung Analytics

- Kami nargétkeun 10 pangguna dumasar kana syarat bisnis. Waktosna pikeun ngobrol ngeunaan larangan bisnis anu urang gaduh. Urang kedah mastikeun beban kerja anu luhur, mastikeun patuh kana hukum ngeunaan pelestarian data pribadi. Jeung naon deui?

Nikolay: Mimitina, urang mimitian ti syarat video. Hal pangpentingna anu disebarkeun gudang video sakuliah dunya pikeun pangiriman gancang ka klien nu. Anu sanésna kalebet résolusi 1080p, ogé mundur, anu seueur anu sanés teu dilaksanakeun dina modeu langsung. Engké urang ditambahkeun kamampuhan pikeun ngaktipkeun speed 2x, kalayan bantuan na anjeun bisa "nyekel up" kalawan hirup jeung neruskeun nonton konferensi sacara real waktu. Sareng sapanjang jalan, fungsionalitas nyirian garis waktos muncul. Tambih Deui, urang kedah janten toleran lepat sareng tahan beban 10 sambungan. Tina sudut pandang tukang, ieu kirang langkung 000 sambungan dikalikeun ku 10 pamundut pikeun tiap halaman refresh. Sareng ieu parantos 000 RPS / detik. Rada saeutik.

- Naha aya sarat anu sanés pikeun "pameran virtual" sareng mitra mitra online?

Nikolay: Leres, ieu kedah dilakukeun sacara gancang sareng sacara universal. Urang tadi nepi ka 10 pausahaan pasangan pikeun tiap konferensi, sarta sakabéh éta kudu réngsé dina atawa dua minggu. Sanajan kitu, eusi maranéhanana rada béda dina format. Tapi mesin template tangtu dijieun nu assembles kaca ieu on laleur, kalawan ampir euweuh partisipasi ngembangkeun salajengna.

- Aya ogé sarat pikeun analitik pandangan sareng statistik sacara real-time. Kuring nyaho yén kami nganggo Prometheus pikeun ieu, tapi ngabejaan urang di leuwih jéntré: sarat naon urang papanggih keur analytics, sarta kumaha ieu dilaksanakeun?

Nikolay: Mimitina, kami ngagaduhan syarat pamasaran pikeun ngumpulkeun pikeun nguji A / B sareng ngumpulkeun inpormasi supados ngartos kumaha cara ngirimkeun eusi anu pangsaéna ka klien di hareup. Aya ogé sarat pikeun sababaraha analytics on kagiatan pasangan jeung analytics nu ningali (nganjang counter). Sadaya inpormasi dikumpulkeun sacara real waktos.

Urang tiasa nyayogikeun inpormasi ieu dina bentuk agrégat bahkan ka panyatur: sabaraha jalma anu ningali anjeun dina waktos anu tangtu. Dina waktos anu sami, pikeun sasuai sareng Hukum Federal 152, akun pribadi sareng data pribadi anjeun henteu dilacak ku cara naon waé.

Platformna parantos gaduh alat pamasaran sareng métrik kami pikeun ngukur kagiatan pangguna sacara real waktos (anu ningali naon kadua laporan) pikeun ngawangun grafik kahadiran dina laporan. Dumasar kana data ieu, aya panalungtikan anu bakal ngajantenkeun konperénsi salajengna langkung saé.

Panipuan

— Naha urang gaduh mékanisme anti panipuan?

Nikolay: Kusabab kerangka waktos anu ketat tina sudut pandang bisnis, tugas éta henteu mimitina disetél pikeun langsung meungpeuk sambungan anu teu perlu. Upami dua pangguna asup dina akun anu sami, aranjeunna tiasa ningali eusina. Tapi urang terang sabaraha pandangan sakaligus tina hiji akun. Sarta kami ngalarang sababaraha violators utamana jahat.

Vladimir: Pikeun kiridit na, salah sahiji pamaké dilarang ngartos naha ieu kajadian. Manéhna datang, ménta hampura jeung jangji rék meuli karcis.

- Pikeun sakabéh ieu kajadian, Anjeun kudu lengkep ngalacak sadaya pamaké ti asupna ka kaluar, salawasna nyaho naon maranéhna ngalakukeun. Kumaha sistem ieu jalan?

Vladimir: Abdi hoyong ngobrol ngeunaan analytics sareng statistik, anu teras urang analisa pikeun kasuksésan laporan atanapi teras tiasa disayogikeun ka mitra. Sadaya klien disambungkeun via sambungan websocket ka klaster backend husus. Éta nangtung di dinya Hazelcast. Unggal klien dina unggal periode waktu ngirimkeun naon anu anjeunna laksanakeun sareng lagu naon anu anjeunna tonton. Lajeng informasi ieu aggregated ngagunakeun jobs Hazelcast gancang sarta dikirim deui ka dulur anu lalajo lagu ieu. Urang tingali di juru sabaraha urang ayeuna jeung urang.

Ngamekarkeun platform video dina 90 poé

Inpormasi anu sami disimpen dina mongo sarta mana anu ka danau data urang, ti mana urang boga kasempetan pikeun ngawangun grafik leuwih narik. Patarosan timbul: sabaraha pamaké unik nempo laporan ieu? Urang buka postgres, aya ping sadaya jalma anu sumping ku id laporan ieu. Urang dikumpulkeun, aggregated leuwih unik, tur ayeuna urang bisa ngarti.

Nikolay: Tapi dina waktos anu sami, kami ogé nampi data sacara real-time ti Prometheus. Éta diatur ngalawan sadaya jasa Kubernetes, ngalawan Kubernetes sorangan. Éta ngumpulkeun sadayana, sareng sareng Grafana urang tiasa ngawangun grafik naon waé sacara real waktos.

Vladimir: Di hiji sisi, urang unduh ieu pikeun ngolah OLAP salajengna. Sareng pikeun OLTP, aplikasi éta ngaunduh sadayana kana Prometheus, Grafana sareng grafik malah konvergen!

- Ieu kasus nalika grafik konvergen.

Parobahan dinamis

- Ngabejaan urang kumaha parobahan dinamis anu digulung kaluar: lamun laporan ieu dibolaykeun 6 menit saméméh mimiti, naon ranté lampah? Pipa mana anu dianggo?

Vladimir: Pipa éta pisan kondisional. Aya sababaraha kamungkinan. Kahiji nyaeta program generasi jadwal digawé tur robah jadwal. Jadwal anu dirobih diunggah ka Contentful. Saatos éta backend ngartos yén aya parobahan pikeun konferensi ieu dina Contentful, nyandak eta sarta ngawangun deui. Sagalana dikumpulkeun sarta dikirim via websocket.

Kamungkinan kadua, nalika sagalana lumangsung dina Pace breakneck: redaktur sacara manual ngarobah informasi dina Contentful (numbu ka Telegram, presentasi spiker, jsb) jeung logika sarua jalan sakumaha kahiji kalina.

Nikolay: Sagalana lumangsung tanpa refreshing kaca. Sadaya parobihan lumangsung leres pisan pikeun klien. Sami lumaku pikeun ngaganti laporan. Lamun waktuna datang, laporan sarta panganteur robah.

Vladimir: Ogé, aya potongan waktos pikeun ngamimitian laporan dina timeline. Dina awalna teu aya nanaon. Tur upami Anjeun salah hover mouse anjeun dina belang beureum, lajeng dina sababaraha titik, hatur nuhun ka sutradara siaran, cutoffs bakal muncul. Sutradara susunan mimiti bener tina siaran, backend nyokot robah kieu, Etang mimiti jeung tungtung kali presentasi sakabéh lagu urang luyu jeung jadwal konferensi, ngirimkeunana ka klien kami, sarta pamaén draws cutoffs. Ayeuna pangguna tiasa gampang napigasi ka awal sareng akhir laporan. Ieu sarat bisnis ketat, pohara merenah tur mangpaat. Anjeun moal miceunan waktos milarian waktos ngamimitian anu saleresna pikeun laporan. Sareng nalika urang ngalakukeun sawangan, éta bakal saé pisan.

Panyebaran

- Abdi hoyong naroskeun ngeunaan deployment. Kolya sareng tim nyéépkeun seueur waktos di awal pikeun nyetél sadayana infrastruktur dimana sadayana dibuka pikeun urang. Béjakeun ka kuring, tina naon éta sadayana?

Nikolay: Tina sudut pandang téknis, urang mimitina ngagaduhan syarat pikeun produk janten abstrak-gancang ti anu ngajual. Datang ka AWS pikeun ngadamel skrip Terraform khusus ti AWS, atanapi khusus ti Yandex, atanapi ti Azure, jsb. teu bener pas. Urang kedah ngalih tempat di sawatara titik.

Pikeun tilu minggu kahiji kami terus-terusan milarian cara pikeun ngalakukeun ieu langkung saé. Hasilna, kami dugi ka kacindekan yén Kubernetes dina hal ieu mangrupikeun sadayana urang, sabab ngamungkinkeun urang nyiptakeun jasa skala otomatis, gulung otomatis, sareng kéngingkeun ampir sadaya jasa tina kotak. Alami, sadaya jasa kedah dilatih pikeun damel sareng Kubernetes, Docker, sareng tim ogé kedah diajar.

Urang boga dua klaster. Test jeung produksi. Éta leres-leres idéntik dina hal hardware sareng setélan. Urang nerapkeun infrastruktur salaku kode. Sadaya jasa sacara otomatis digulung kana tilu lingkungan tina cabang fitur, cabang master, cabang uji, sareng GitLab nganggo jalur pipa otomatis. Ieu sacara maksimal terpadu kana GitLab, sacara maksimal terpadu sareng Elastis, Prometheus.

Urang meunang kasempetan pikeun gancang (pikeun backend dina 10 menit, pikeun frontend dina 5 menit) gulung kaluar parobahan lingkungan mana wae kalayan sagala tés, integrasi, ngajalankeun tés fungsional, tés integrasi dina lingkungan, sarta ogé nguji kalawan tés beban on. lingkungan test kira hal anu sarua yen urang hayang meunang dina produksi.

Ngeunaan tés

- Anjeun nguji ampir sadayana, hese percanten kumaha anjeun nyerat sadayana. Naha anjeun tiasa nyarioskeun ka kami ngeunaan tés backend: sabaraha sadayana katutupan, naon tés?

Vladimir: Dua jinis tés parantos ditulis. Anu kahiji nyaéta tés komponén. Uji tingkat angkat tina sakabéh aplikasi spring sareng dasarna Testcontainers. Ieu tés tina skenario bisnis tingkat pangluhurna. Abdi henteu nguji fungsi. Urang ukur nguji sababaraha hal badag. Salaku conto, pas dina tés, prosés log in ka pangguna ditiru, pamundut pangguna pikeun tiket dimana anjeunna tiasa angkat, sareng pamundut aksés pikeun nonton aliran. skenario pamaké pisan jelas.

Kira-kira hal anu sami dilaksanakeun dina anu disebut tés integrasi, anu leres-leres dijalankeun dina lingkungan. Kanyataanna, nalika deployment salajengna dina produksi digulung kaluar, skenario dasar nyata ogé ngajalankeun dina produksi. Login sarua, requesting tiket, requesting aksés ka CloudFront, mariksa yen stream bener nyambung jeung idin kuring, mariksa panganteur diréktur urang.

Di momen kuring boga ngeunaan 70 tés komponén tur ngeunaan 40 tés integrasi on dewan. Sinyalna caket pisan ka 95%. Ieu kanggo komponén, kirang pikeun integrasi, ngan saukur teu peryogi pisan. Nganggap yén proyék ngalibatkeun sagala jinis generasi kode, ieu mangrupikeun indikator anu saé. Teu aya deui jalan sanés pikeun ngalakukeun naon anu urang lakukeun dina tilu bulan. Kusabab upami urang diuji sacara manual, masihan fitur ka panguji urang, sareng anjeunna bakal mendakan bug sareng uih deui ka kami pikeun perbaikan, maka perjalanan babak ieu pikeun nga-debug kodeu bakal panjang pisan, sareng urang moal nyumponan wates waktu.

Nikolay: Sacara konvensional, pikeun ngalaksanakeun régrési dina sadaya platform nalika ngarobih sababaraha fungsi, anjeun kedah calik sareng nyodok dimana-mana salami dua dinten.

Vladimir: Kituna, eta mangrupakeun kasuksésan hébat nalika kuring estimasi fitur a, Kuring nyebutkeun yén kuring kudu 4 poé pikeun dua pens basajan tur 1 websocket, Kolya ngamungkinkeun. Anjeunna parantos biasa kanyataan yén 4 dinten ieu kalebet 2 jinis tés, teras, paling dipikaresep, éta bakal jalan.

Nikolay: Kuring boga ogé 140 tés ditulis: komponén + fungsi, nu lakonan hal nu sarua. Sadaya skénario anu sami diuji dina produksi, uji, sareng produksi. Kami ogé nembe nambihan tés UI dasar fungsional. Ku cara ieu urang nutupan pungsionalitas paling dasar anu tiasa ngarusak.

Vladimir: Tangtosna, éta patut ngobrol ngeunaan tés beban. Ieu diperlukeun pikeun nguji platform dina beban deukeut hiji nyata dina urutan ngartos kumaha sagalana, naon anu lumangsung kalawan Rabbit, naon anu lumangsung kalawan JVMs, sabaraha memori sabenerna diperlukeun.

- Kuring henteu weruh pasti naha urang keur nguji nanaon di sisi stream, tapi kuring inget yen aya masalah sareng transcoders nalika urang meetups. Naha urang nguji aliran?

Artyom: Diuji iteratively. Ngatur rapat. Dina prosés ngayakeun meetup, aya kurang leuwih 2300 tikét JIRA. Ieu mangrupikeun hal umum anu dilakukeun ku jalma pikeun rapat. Kami nyandak bagian tina platform kana halaman anu misah pikeun rapat, anu dijalankeun ku Kirill Tolkachev (talkkv).

Jujur, teu aya masalah anu ageung. Sacara harfiah sababaraha kali kami nyekel cache kutu dina CloudFront, kami ngabéréskeunana gancang-gancang - kami ngan ukur ngatur deui kawijakan. Aya langkung seueur bug dina jalma, dina sistem streaming dina situs éta.

Salila konperénsi, kuring kedah nyerat sababaraha eksportir langkung seueur pikeun nutupan langkung seueur alat sareng jasa. Di sababaraha tempat kuring kedah ngadamel sapédah sorangan ngan ukur pikeun métrik. Dunya hardware AV (audio-video) henteu pisan rosy - anjeun gaduh sababaraha jinis "API" alat anu teu tiasa dipangaruhan. Sareng jauh tina kanyataan yén anjeun bakal tiasa nampi inpormasi anu anjeun peryogikeun. ngical paralatan hardware estu slow, sarta éta ampir teu mungkin keur meunang naon rék ti aranjeunna. Dina total aya leuwih ti 100 buah hardware, aranjeunna teu masihan deui naon nu peryogi, jeung anjeun nulis eksportir aneh tur kaleuleuwihan, hatur nuhun nu bisa sahenteuna kumaha bae debug sistem.

pakakas

- Abdi émut kumaha sateuacan ngamimitian konperénsi kami sawaréh mésér alat tambahan.

Artyom: Kami ngagaleuh komputer, laptop, sareng bungkus batré. Ayeuna urang tiasa hirup tanpa listrik salami 40 menit. Dina Juni aya thunderstorms parna di St Petersburg - jadi urang kungsi blackout a. Dina waktos anu sami, sababaraha panyadia sumping ka kami kalayan tautan optik tina titik anu béda. Ieu bener 40 menit wangunan downtime, salila urang bakal boga lampu on, sora, kaméra, jsb jalan.

— Urang gaduh carita anu sami sareng Internét. Di kantor tempat studio urang aya, urang nyeret jaring sengit antara lantai.

Artyom: Kami gaduh 20 Gbit serat antara lantai. Salajengna sapanjang lantai, dimana waé aya élmu optik, dimana waé henteu aya élmu optik, tapi masih aya saluran anu langkung sakedik tibatan gigabit - kami ngajalankeun pidéo di antara lagu-lagu konperénsi éta. Sacara umum, merenah pisan pikeun ngerjakeun infrastruktur anjeun nyalira; anjeun jarang tiasa ngalakukeun ieu dina konperénsi offline dina situs.

- Sateuacan kuring damel di JUG Ru Group, kuring ningali kumaha kamar hardware dina konferensi offline diatur sapeuting, dimana aya monitor ageung sareng sadaya métrik anu anjeun ngawangun di Grafana. Ayeuna aya ogé kamar markas dimana tim pamekaran linggih, anu salami konperénsi éta ngalereskeun sababaraha bug sareng ngembangkeun fitur. Dina waktos anu sami, aya sistem ngawaskeun anu dipidangkeun dina layar anu ageung. Artyom, Kolya sareng jalma-jalma sanés calik sareng mastikeun yén éta sadayana henteu murag sareng tiasa dianggo saé.

Curiosities jeung masalah

- Anjeun spoke ogé ngeunaan kanyataan yén urang geus streaming kalawan Amazon, aya pamuter kalawan web, sagalana geus ditulis dina basa programming béda, kasabaran sesar jeung sarat bisnis sejenna disadiakeun, kaasup rekening pribadi nu dirojong pikeun badan légal jeung individu, sarta kami bisa ngahijikeun kalawan batur maké OAuth 2.0, aya anti panipuan, pamaké blocking. Urang tiasa ngaluncurkeun parobihan sacara dinamis sabab urang ngalakukeun éta saé, sareng éta sadayana diuji.

Abdi kabetot uninga naon oddities ieu aub dina ngamimitian hiji hal. Naha aya kaayaan anu anéh nalika anjeun ngembangkeun backend, frontend, anu gélo tétéla sareng anjeun henteu ngartos naon anu kudu dilakukeun sareng éta?

Vladimir: Sigana mah ieu ngan lumangsung salila tilu bulan panungtungan. Unggal dinten. Sakumaha anjeun tiasa tingali, sadaya rambut kuring dicabut.

Ngamekarkeun platform video dina 90 poé
Vladimir Krasilshchik sanggeus 3 bulan, nalika sababaraha jenis kaulinan tétéla sarta teu saurang ogé ngartos naon anu kudu dipigawé kalayan eta.

Saban poé aya hal kawas ieu, nalika aya momen misalna mun anjeun nyandak eta jeung luh bulu anjeun kaluar, atawa nyadar yén euweuh hiji sejenna, sarta ngan anjeun bisa ngalakukeun eta. acara badag kahiji urang éta TechTrain. Dina tanggal 6 Juni jam 2 kami henteu acan ngaluncurkeun lingkungan produksi, Kolya ngaluncurkeunana. Sareng akun pribadi henteu tiasa dianggo salaku server otorisasi nganggo OAuth2.0. Urang tos janten panyadia OAuth2.0 pikeun nyambungkeun platform éta. Kuring parantos damel sigana 18 jam langsung, kuring ningali komputer sareng henteu ningali nanaon, kuring henteu ngartos naha éta henteu tiasa dianggo, sareng Kolya ningali kode kuring tina jarak jauh, milarian bug dina konfigurasi Spring. , kapanggih eta, sarta LC digawé, sarta dina produksi teuing.

Nikolay: Sarta sajam saméméh TechTrain release lumangsung.

Seueur béntang anu sajajar di dieu. Kami bagja pisan sabab kami ngagaduhan tim super, sareng sadayana diideuan ku ideu pikeun ngalakukeunana online. Sadaya tilu bulan ieu kami didorong ku kanyataan yén kami "ngadamel YouTube." Kuring henteu ngijinkeun diri pikeun nyéépkeun rambut kuring, tapi nyarios ka sadayana yén sadayana bakal jalan, sabab kanyataanna, sadayana parantos diitung lami pisan.

Ngeunaan kinerja

- Dupi anjeun ngabejaan ka kuring sabaraha urang éta dina situs dina hiji lagu? Naha aya masalah kinerja?

Nikolay: Henteu aya masalah kinerja, sakumaha anu parantos kami nyarios. Jumlah maksimum jalma anu ngahadiran hiji laporan éta 1300 jalma, ieu dina Heisenbug.

- Naha aya masalah sareng tampilan lokal? Sareng éta mungkin gaduh pedaran téknis sareng diagram kumaha éta sadayana jalan?

Nikolay: Urang bakal nyieun artikel ngeunaan ieu engké.

Anjeun malah tiasa debug aliran lokal. Sakali konperénsi dimimitian, éta janten langkung gampang, sabab aliran produksi muncul yén urang tiasa nonton sadaya waktos.

Vladimir: Salaku I ngartos eta, pamekar hareup-tungtung digawé lokal kalawan mocks, lajeng, saprak waktu gulung kaluar ka devs di hareup oge pondok (5 menit), euweuh masalah mariksa naon anu lumangsung kalawan sertipikat.

- Sadayana diuji sareng di-debug, bahkan sacara lokal. Ieu ngandung harti yén urang bakal nulis artikel kalawan sagala fitur teknis, némbongkeun Anjeun, ngabejaan Anjeun sagalana kalawan diagram, kumaha éta.

Vladimir: Anjeun tiasa nyandak sareng ngulang deui.

- Dina 3 bulan.

hasil

- Sagalana digambarkeun babarengan disada tiis, tempo yén éta dipigawé ku tim leutik dina tilu bulan.

Nikolay: Hiji tim badag moal ngalakukeun ieu. Tapi sakelompok leutik jalma anu komunikasi cukup raket tur ogé saling sarta bisa datang ka hiji perjangjian bisa. Aranjeunna teu gaduh kontradiksi, arsitéktur ieu nimukeun dina dua poé, ieu finalized tur teu sabenerna robah. Aya facilitation ketat pisan syarat bisnis asup dina watesan tumpukan up requests fitur sarta parobahan.

- Naon anu aya dina daptar tugas salajengna anjeun nalika konperénsi usum panas parantos dilaksanakeun?

Nikolay: Contona, sks. Garis ngarayap dina pidéo, pop-up di sababaraha tempat dina pidéo gumantung kana eusi anu dipidangkeun. Contona, panyatur rék nanya ka panongton, sarta sora pop up dina layar, nu balik ka tukang dumasar kana hasil voting ka speaker sorangan. Sababaraha jenis kagiatan sosial dina bentuk likes, hate, ratings laporan salila presentasi sorangan, ku kituna anjeun bisa ngeusian kaluar eupan balik dina momen katuhu tanpa keur kacau engké ku formulir eupan balik. Mimitina siga kieu.

Sarta ogé nambahkeun kana sakabéh platform, iwal streaming sarta konferensi, ogé kaayaan pos-konferensi. Ieu mangrupikeun daptar puter (kalebet anu disusun ku pangguna), kamungkinan kontén tina konperénsi katukang anu sanés, terpadu, dilabélan, tiasa diaksés ku pangguna, sareng ogé sayogi pikeun ditingali dina halaman wéb kami (live.jugru.org).

— Guys, hatur nuhun pisan pikeun waleran anjeun!

Upami diantara pamiarsa aya anu ngahadiran konferensi usum panas kami, punten bagikeun kesan anjeun ngeunaan pamuter sareng siaran. Naon anu pikaresepeun, naon anu ngaganggu anjeun, naon anu anjeun hoyong tingali di hareup?

Upami anjeun kabetot dina platform sareng hoyong ningali éta "dina perang", kami nganggo deui dina kami konferensi gugur-usum tiis. Aya sajumlah ageung, janten ampir pasti aya anu cocog pikeun anjeun.

sumber: www.habr.com

Tambahkeun komentar