90 kun ichida video platformani ishlab chiqing

Bu bahorda biz o'zimizni juda quvnoq sharoitlarda topdik. Pandemiya sababli yozgi konferentsiyalarimizni onlayn rejimga o'tkazish zarurligi aniq bo'ldi. Va ularni onlayn tarzda samarali o'tkazish uchun tayyor dasturiy echimlar biz uchun mos emas edi, biz o'zimizni yozishimiz kerak edi. Va buni amalga oshirish uchun bizda uch oy bor edi.

Bu hayajonli uch oy bo'lgani aniq. Ammo tashqaridan bu mutlaqo aniq emas: onlayn konferentsiya platformasi nima? U qanday qismlardan iborat? Shuning uchun, yozgi DevOops konferentsiyalarining oxirgisida men ushbu vazifaga mas'ul bo'lganlardan so'radim:

  • Nikolay Molchanov - JUG Ru Group texnik direktori;
  • Vladimir Krasilshchik pragmatik Java dasturchisi bo'lib, backend ustida ishlaydi (uning hisobotlarini Java konferentsiyalarimizda ham ko'rishingiz mumkin);
  • Artyom Nikonov bizning barcha video oqimlarimiz uchun javobgardir.

Aytgancha, kuz-qish konferentsiyalarida biz xuddi shu platformaning takomillashtirilgan versiyasidan foydalanamiz - shunchalik ko'p habra o'quvchilari hali ham uning foydalanuvchilari bo'lib qoladilar.

90 kun ichida video platformani ishlab chiqing

Katta rasm

— Jamoa tarkibi qanday edi?

Nikolay Molchanov: Bizda tahlilchi, dizayner, tester, uchta front-end va orqa tomon bor. Va, albatta, T shaklidagi mutaxassis!

— Umuman olganda, jarayon qanday kechdi?

Nikolay: Mart oyining o'rtalariga qadar bizda onlayn uchun hech narsa tayyor emas edi. 15 mart kuni esa butun onlayn karusel aylana boshladi. Biz bir nechta omborlarni o'rnatdik, rejalashtirdik, asosiy arxitekturani muhokama qildik va uch oy ichida hamma narsani qildik.

Bu, albatta, rejalashtirish, arxitektura, xususiyatlarni tanlash, ushbu xususiyatlar uchun ovoz berish, ushbu xususiyatlar bo'yicha siyosat, ularni loyihalash, ishlab chiqish, sinovdan o'tkazishning klassik bosqichlaridan o'tdi. Natijada, 6 iyun kuni biz hamma narsani ishlab chiqarishga chiqardik. TechTrain. Hamma narsa uchun 90 kun bor edi.

- Biz o'z majburiyatimizni bajara oldikmi?

Nikolay: Hozir biz DevOops konferensiyasida onlayn ishtirok etayotganimiz sababli, u ishlagan. Men shaxsan asosiy narsaga sodiq qoldim: men mijozlarga onlayn konferentsiya o'tkazishlari mumkin bo'lgan vositani keltiraman.

Muammo shundan iborat edi: bizga konferentsiyalarimizni chipta egalariga translyatsiya qilishimiz mumkin bo'lgan vosita bering.

Barcha rejalashtirish bir necha bosqichlarga bo'lingan va barcha xususiyatlar (30 ga yaqin global) 4 toifaga bo'lingan:

  • biz buni albatta qilamiz (biz ularsiz yashay olmaymiz),
  • biz buni ikkinchidan qilamiz,
  • Biz buni hech qachon qilmaymiz,
  • va biz buni hech qachon, hech qachon qilmaymiz.

Biz birinchi ikkita toifadagi barcha xususiyatlarni yaratdik.

— Bilaman, jami 600 ta JIRA soni yaratilgan. Uch oy ichida siz 13 ta mikroservis yaratdingiz va ular nafaqat Java-da yozilgan deb o'ylayman. Siz turli texnologiyalardan foydalangansiz, uchta mavjud zonada ikkita Kubernetes klasteringiz va Amazonda 5 ta RTMP oqimi mavjud.

Keling, tizimning har bir komponentini alohida ko'rib chiqaylik.

Oqim

— Bizda allaqachon video tasvir bor va u ba'zi xizmatlarga uzatilgandan boshlaylik. Artyom, ayting-chi, bu oqim qanday sodir bo'ladi?

Artyom Nikonov: Bizning umumiy sxemamiz quyidagicha ko'rinadi: kameradan olingan rasm -> bizning nazorat xonamiz -> mahalliy RTMP server -> Amazon -> video pleer. Batafsil bu haqda yozgan iyun oyida Habré-da.

Umuman olganda, buni amalga oshirishning ikkita global usuli mavjud: apparat yoki dasturiy echimlarga asoslangan. Biz dasturiy ta'minot marshrutini tanladik, chunki masofaviy dinamiklar uchun bu osonroq. Boshqa davlatdagi karnayga uskunani olib kelish har doim ham mumkin emas, lekin dasturiy ta'minotni karnayga etkazib berish osonroq va ishonchliroq ko'rinadi.

Uskuna nuqtai nazaridan, bizda ma'lum miqdordagi kameralar (studiyalarimizda va masofaviy dinamiklarda), studiyada ma'lum miqdordagi masofadan boshqarish pultlari mavjud bo'lib, ular ba'zan efir vaqtida to'g'ridan-to'g'ri stol ostida ta'mirlanishi kerak.

Ushbu qurilmalardan signallar yozib olish kartalari, kiritish/chiqish kartalari va ovoz kartalari bo'lgan kompyuterlarga kiradi. U erda signallar aralashtiriladi va sxemalarga yig'iladi:

90 kun ichida video platformani ishlab chiqing
4 karnay uchun tartib namunasi

90 kun ichida video platformani ishlab chiqing
4 karnay uchun tartib namunasi

Bundan tashqari, uzluksiz eshittirish uchta kompyuter yordamida ta'minlanadi: navbat bilan bitta asosiy mashina va bir juft ishlaydigan. Birinchi kompyuter birinchi hisobotni, ikkinchisi - tanaffusni, birinchisi - keyingi hisobotni, ikkinchisi - keyingi tanaffusni va hokazo. Va asosiy mashina birinchisini ikkinchisi bilan aralashtirib yuboradi.

Bu o'ziga xos uchburchakni yaratadi va agar ushbu tugunlardan birortasi ishlamay qolsa, biz tezda va sifatni yo'qotmasdan mijozlarga tarkibni etkazib berishda davom etishimiz mumkin. Bizda shunday holat bor edi. Konferentsiyalarning birinchi haftasida biz bitta mashinani o'rnatdik, uni yoqdik/o'chirdik. Odamlar bizning chidamliligimizdan mamnun ekan.

Keyinchalik, kompyuterlardan oqimlar ikkita vazifaga ega bo'lgan mahalliy serverga o'tadi: RTMP oqimlarini yo'naltirish va zaxira nusxalarini yozish. Shunday qilib, bizda bir nechta ro'yxatga olish nuqtalari mavjud. Keyin video oqimlar tizimimizning Amazon SaaS xizmatlariga asoslangan qismiga yuboriladi. Biz foydalanamiz MediaLive:,S3, CloudFront.

Nikolay: Video tomoshabinlarga yetib borguncha u erda nima sodir bo'ladi? Siz uni qandaydir tarzda kesishingiz kerak, to'g'rimi?

Artyom: Biz videoni o'z tomonimizdan siqib, MediaLive-ga jo'natamiz. Biz u yerda transkoderlarni ishga tushiramiz. Ular videolarni real vaqt rejimida bir nechta rezolyutsiyalarga aylantiradi, shunda odamlar ularni o'z telefonlarida, mamlakatdagi zaif Internet orqali va hokazolarda ko'rishlari mumkin. Keyin bu oqimlar kesiladi bo'laklar, protokol shunday ishlaydi HLS. Biz ushbu qismlarga ko'rsatgichlarni o'z ichiga olgan pleylistni old qismga yuboramiz.

— Biz 1080p ruxsatdan foydalanamizmi?

Artyom: Videomizning kengligi 1080p - 1920 piksel bilan bir xil, balandligi esa biroz kamroq, rasm cho'zilgan - buning sabablari bor.

Aktyor

— Artyom video qanday qilib oqimlarga tushishini, turli ekran o‘lchamlari uchun turli pleylistlarga qanday taqsimlanishini, bo‘laklarga bo‘linib, pleyerga qanday kirib borishini tasvirlab berdi. Kolya, endi ayting-chi, bu qanday o'yinchi, u oqimni qanday iste'mol qiladi, nega HLS?

Nikolay: Bizda barcha konferentsiya tomoshabinlari ko'rishi mumkin bo'lgan o'yinchi bor.

90 kun ichida video platformani ishlab chiqing

Aslida, bu kutubxona atrofidagi o'ram hls.js, unda boshqa ko'plab o'yinchilar yozilgan. Ammo bizga juda aniq funksionallik kerak edi: orqaga o'rash va odam turgan joyni belgilash, hozirda u qaysi hisobotni ko'rmoqda. Shuningdek, bizga o'z maketlarimiz, barcha turdagi logotiplar va biz bilan o'rnatilgan boshqa narsalar kerak edi. Shuning uchun biz o'z kutubxonamizni (HLS bo'yicha o'ram) yozishga va uni saytga joylashtirishga qaror qildik.

Bu ildiz funksiyasi, shuning uchun u deyarli birinchi marta amalga oshirildi. Va keyin hamma narsa uning atrofida o'sdi.

Aslida, avtorizatsiya orqali o'yinchi orqa qismdan vaqt va sifatga bog'liq bo'lgan qismlarga havolalar bilan pleylistni oladi, keraklilarini yuklab oladi va yo'lda qandaydir "sehr" qilib, foydalanuvchiga ko'rsatadi.

90 kun ichida video platformani ishlab chiqing
Vaqt jadvaliga misol

— Barcha hisobotlarning vaqt jadvalini ko'rsatish uchun pleyerda tugma o'rnatilgan...

Nikolay: Ha, biz darhol foydalanuvchi navigatsiyasi muammosini hal qildik. Aprel oyining o‘rtalarida biz har bir konferensiyamizni alohida veb-saytda translyatsiya qilmay, barchasini bir joyga jamlashga qaror qildik. Shunday qilib, Full Pass chiptasi foydalanuvchilari turli konferentsiyalar o'rtasida erkin o'tishlari mumkin: ham jonli translyatsiyalar, ham o'tmishdagi yozuvlar.

Foydalanuvchilarga joriy oqimda harakatlanish va treklar o‘rtasida almashishni osonlashtirish uchun biz treklar va hisobotlar o‘rtasida almashish uchun “To‘liq translyatsiya” tugmasi va gorizontal hisobot kartalarini yaratishga qaror qildik. Klaviatura boshqaruvi mavjud.

— Bunda qandaydir texnik qiyinchiliklar bormi?

Nikolay: Ularda turli hisobotlarning boshlang'ich nuqtalari belgilangan aylantirish paneli bor edi.

— Oxir-oqibat, YouTube shunga o'xshash ishlarni amalga oshirishdan oldin, siz ushbu belgilarni aylantirish paneliga kiritdingizmi?

Artyom: O'shanda ular beta-versiyasida edi. Bu juda murakkab xususiyatga o'xshaydi, chunki ular o'tgan yil davomida uni foydalanuvchilar bilan qisman sinab ko'rishgan. Va endi u sotuvga chiqdi.

Nikolay: Ammo biz uni tezroq sotuvga qo'ydik. Rostini aytsam, ushbu oddiy xususiyatning orqasida pleer ichida juda ko'p miqdordagi backend, frontend, hisob-kitoblar va matematika mavjud.

Foydalanuvchi interfeysi

— Keling, biz ko'rsatayotgan ushbu kontent (nutq kartasi, ma'ruzachilar, veb-sayt, jadval) old qismga qanday etib borishini aniqlaylik?

Vladimir Krasilshchik: Bizda bir nechta ichki IT tizimlari mavjud. Barcha hisobotlar va barcha ma'ruzachilar kiritilgan tizim mavjud. Konferentsiyada ma'ruzachi qatnashadigan jarayon mavjud. Ma'ruzachi ariza topshiradi, tizim uni ushlaydi, keyin ma'lum bir quvur liniyasi mavjud bo'lib, unga ko'ra hisobot tuziladi.

90 kun ichida video platformani ishlab chiqing
Ma'ruzachi quvur liniyasini shunday ko'radi

Bu tizim bizning ichki rivojlanishimizdir.

Keyinchalik, siz individual hisobotlardan jadval tuzishingiz kerak. Ma'lumki, bu NP uchun qiyin muammo, ammo biz uni qandaydir tarzda hal qilamiz. Buning uchun biz jadvalni yaratadigan va uni Contentful uchinchi tomon bulut xizmatiga yuklaydigan boshqa komponentni ishga tushiramiz. U erda hamma narsa stolga o'xshaydi, unda konferentsiya kunlari, kunlarda vaqt oralig'i va slotlarda hisobotlar, tanaffuslar yoki homiylik faoliyati mavjud. Shunday qilib, biz ko'rgan kontent uchinchi tomon xizmatida joylashgan. Va vazifa uni saytga etkazishdir.

Ko'rinishidan, sayt shunchaki o'yinchi bo'lgan sahifadir va bu erda hech qanday murakkab narsa yo'q. Undan tashqari. Ushbu sahifaning orqa tomoni Contentful-ga o'tadi, u yerdan jadvalni oladi, ba'zi ob'ektlarni yaratadi va uni frontendga yuboradi. Platformamizning har bir mijozi amalga oshiradigan veb-soket ulanishidan foydalanib, biz unga jadvalning yangilanishini backenddan frontendga yuboramiz.

Haqiqiy holat: ma'ruzachi konferentsiya paytida ish joyini o'zgartirdi. Biz uning ish beruvchi kompaniyasi nishonini o'zgartirishimiz kerak. Bu orqa qismdan qanday sodir bo'ladi? Yangilanish barcha mijozlarga veb-rozetka orqali yuboriladi, so'ngra frontendning o'zi vaqt jadvalini qayta chizadi. Bularning barchasi muammosiz sodir bo'ladi. Bulutli xizmat va bir nechta tarkibiy qismlarning kombinatsiyasi bizga ushbu tarkibni yaratish va uni old tomondan taqdim etish imkoniyatini beradi.

Nikolay: Bu erda bizning saytimiz klassik SPA ilovasi emasligini aniqlashtirish muhimdir. Bu ham maketga asoslangan, ko'rsatilgan veb-sayt va SPA. Google aslida bu saytni ko'rsatilgan HTML sifatida ko'radi. Bu SEO uchun va kontentni foydalanuvchiga etkazish uchun yaxshi. U sahifani ko'rishdan oldin 1,5 megabayt JavaScript yuklanishini kutmaydi, u allaqachon ko'rsatilgan sahifani darhol ko'radi va har safar hisobotni almashtirganingizda buni his qilasiz. Hamma narsa yarim soniya ichida sodir bo'ladi, chunki tarkib allaqachon tayyor va kerakli joyga joylashtirilgan.

— Texnologiyalarni sanab o'tish orqali yuqorida aytilganlarning barchasiga chiziq chizamiz. Tyomaning aytishicha, bizda 5 ta Amazon oqimi bor va biz u erda video va ovozni etkazib beramiz. Bizda bash skriptlari bor, biz ulardan ishga tushirish va sozlash uchun foydalanamiz...

Artyom: Bu AWS API orqali sodir bo'ladi, u erda yana ko'plab texnik xizmatlar mavjud. Biz o'z majburiyatlarimizni shunday taqsimladikki, men topshiraman CloudFront, va front-end va back-end ishlab chiquvchilari uni u yerdan oladi. Kontent tartibini soddalashtirish uchun bizda bir qator o'z bog'lashlarimiz bor, biz ularni keyin 4K va hokazolarda qilamiz. Belgilangan muddatlar juda qattiq bo'lgani uchun biz buni deyarli to'liq AWS da qildik.

— Keyin bularning barchasi backend tizimidan foydalangan holda pleerga tushadi. Pleyerimizda TypeScript, React, Next.JS mavjud. Va orqa tomonda bizda C#, Java, Spring Boot va Node.js-da bir nechta xizmatlar mavjud. Bularning barchasi Yandex.Cloud infratuzilmasi yordamida Kubernetes yordamida o'rnatiladi.

Shuni ham ta'kidlashni istardimki, men platforma bilan tanishishim kerak bo'lganda, bu oson bo'lib chiqdi: barcha omborlar GitLab-da, hamma narsa yaxshi nomlangan, testlar yozilgan, hujjatlar mavjud. Ya'ni, favqulodda rejimda ham ular bunday narsalarga g'amxo'rlik qilishdi.

Biznes cheklovlari va tahlili

— Biz biznes talablari asosida 10 000 foydalanuvchini maqsad qilganmiz. Bizda mavjud bo'lgan biznes cheklovlari haqida gapirish vaqti keldi. Biz yuqori ish yukini ta'minlashimiz, shaxsiy ma'lumotlarni saqlash to'g'risidagi qonunga rioya qilishni ta'minlashimiz kerak edi. Yana nima?

Nikolay: Dastlab biz video talablardan boshladik. Eng muhimi, mijozga tez yetkazib berish uchun butun dunyo bo'ylab tarqatilgan video saqlashdir. Boshqalar 1080p piksellar sonini, shuningdek orqaga o'tkazishni o'z ichiga oladi, ko'pchilik boshqalar jonli rejimda amalga oshirmaydi. Keyinchalik biz 2x tezlikni yoqish qobiliyatini qo'shdik, uning yordami bilan siz jonli efirni "qo'lga olishingiz" va real vaqtda konferentsiyani tomosha qilishni davom ettirishingiz mumkin. Va yo'lda vaqt jadvalini belgilash funktsiyasi paydo bo'ldi. Bundan tashqari, biz xatolarga chidamli bo'lishimiz va 10 000 ta ulanish yukiga bardosh berishimiz kerak edi. Backend nuqtai nazaridan, bu har bir sahifani yangilash uchun 10 ta so'rovga ko'paytirilgan taxminan 000 8 ulanishdir. Va bu allaqachon 80 000 RPS/sek. Anchagina.

— Hamkorlarning onlayn stendlari bilan “virtual koʻrgazma”ga boshqa talablar ham bormidi?

Nikolay: Ha, bu juda tez va universal tarzda amalga oshirilishi kerak edi. Har bir konferentsiya uchun 10 tagacha hamkor kompaniyamiz bor edi va ularning barchasi bir yoki ikki hafta ichida yakunlanishi kerak edi. Biroq, ularning mazmuni formatda bir oz farq qiladi. Ammo ma'lum bir shablon dvigateli yaratilgan bo'lib, u ushbu sahifalarni tezda yig'adi va keyinchalik rivojlanishda deyarli ishtirok etmaydi.

— Shuningdek, real vaqt rejimidagi ko‘rishlar va statistik ma’lumotlarni tahlil qilish talablari ham bor edi. Buning uchun biz Prometeydan foydalanayotganimizni bilaman, lekin batafsilroq ayting: biz tahlil uchun qanday talablarga javob beramiz va bu qanday amalga oshiriladi?

Nikolay: Dastlab, mijozga kelajakda eng yaxshi kontentni qanday qilib to'g'ri etkazib berishni tushunish uchun A / B testini yig'ish va ma'lumot to'plash bo'yicha marketing talablarimiz bor. Hamkorlar faoliyati va siz ko'rgan tahlillar bo'yicha ba'zi tahlillar uchun ham talablar mavjud (tayyorlash hisoblagichi). Barcha ma'lumotlar real vaqtda yig'iladi.

Biz ushbu ma'lumotni hatto ma'ruzachilarga ham jamlangan holda taqdim etishimiz mumkin: ma'lum bir vaqtda sizni qancha odam kuzatib turgan. Shu bilan birga, 152-sonli Federal qonunga rioya qilish uchun sizning shaxsiy hisobingiz va shaxsiy ma'lumotlaringiz hech qanday tarzda kuzatilmaydi.

Hisobotlarda qatnashish grafiklarini yaratish uchun platformada allaqachon marketing vositalari va foydalanuvchi faolligini real vaqt rejimida (kim hisobotning qaysi soniyasini kuzatgan) o'lchash uchun ko'rsatkichlarimiz mavjud. Ushbu ma'lumotlarga asoslanib, keyingi konferentsiyalarni yaxshiroq qilish uchun tadqiqotlar olib borilmoqda.

Firibgarlik

— Bizda firibgarlikka qarshi mexanizmlar bormi?

Nikolay: Ishbilarmonlik nuqtai nazaridan vaqt oralig'i cheklanganligi sababli, dastlab keraksiz ulanishlarni darhol blokirovka qilish vazifasi qo'yilmagan. Agar ikkita foydalanuvchi bitta hisob ostida tizimga kirsa, ular kontentni ko'rishlari mumkin edi. Lekin biz bir hisobdan bir vaqtning o'zida qancha ko'rishlar bo'lganini bilamiz. Va biz bir nechta yomon niyatli qoidabuzarlarni taqiqladik.

Vladimir: Taqiqlangan foydalanuvchilardan biri nima uchun bu sodir bo'lganini tushundi. U keldi, kechirim so'radi va chipta sotib olishga va'da berdi.

— Bularning barchasi sodir bo'lishi uchun siz barcha foydalanuvchilarni kirishdan chiqishgacha to'liq kuzatib borishingiz, har doim nima qilayotganlarini bilishingiz kerak. Bu tizim qanday ishlaydi?

Vladimir: Men tahliliy va statistika haqida gapirmoqchiman, keyin biz hisobotning muvaffaqiyati uchun tahlil qilamiz yoki keyin hamkorlarga taqdim etishimiz mumkin. Barcha mijozlar veb-soket ulanishi orqali ma'lum bir backend klasteriga ulangan. U yerda turibdi Hazelcast. Har bir mijoz har bir vaqt oralig'ida nima qilayotganini va qaysi trekni tomosha qilayotganini yuboradi. Keyin bu ma'lumotlar tezkor Hazelcast ishlari yordamida jamlanadi va ushbu treklarni tomosha qilgan har bir kishiga qaytariladi. Burchakda biz bilan qancha odam borligini ko'ramiz.

90 kun ichida video platformani ishlab chiqing

Xuddi shu ma'lumot ichida saqlanadi Mongo va bizning ma'lumotlar ko'liga boradi, undan biz qiziqarliroq grafik yaratish imkoniyatiga egamiz. Savol tug'iladi: ushbu hisobotni nechta noyob foydalanuvchilar ko'rgan? ga boramiz Postgres, bu hisobotning identifikatori bilan kelgan barcha odamlarning pinglari bor. Biz noyoblarini to'pladik, jamladik va endi tushunishimiz mumkin.

Nikolay: Shu bilan birga, biz Prometeydan real vaqt rejimida ma'lumotlarni olamiz. U barcha Kubernetes xizmatlariga, Kubernetesning o'ziga qarshi o'rnatilgan. U mutlaqo hamma narsani to'playdi va Grafana yordamida biz real vaqtda istalgan grafiklarni yaratishimiz mumkin.

Vladimir: Bir tomondan, biz buni keyingi OLAP qayta ishlash uchun yuklab olamiz. OLTP uchun esa dastur hamma narsani Prometey, Grafana-ga yuklaydi va hatto grafiklar birlashadi!

- Grafiklar yaqinlashganda shunday bo'ladi.

Dinamik o'zgarishlar

— Dinamik o‘zgarishlar qanday amalga oshirilayotganini ayting: agar hisobot boshlanishidan 6 daqiqa oldin bekor qilingan bo‘lsa, harakatlar zanjiri qanday? Qaysi quvur liniyasi ishlaydi?

Vladimir: Quvur liniyasi juda shartli. Bir nechta imkoniyatlar mavjud. Birinchisi, jadval yaratish dasturi ishlagan va jadvalni o'zgartirgan. O'zgartirilgan jadval Contentful-ga yuklanadi. Shundan so'ng, server ushbu konferentsiya uchun Contentful-da o'zgarishlar borligini tushunadi, uni oladi va qayta tiklaydi. Hamma narsa to'planadi va websocket orqali yuboriladi.

Ikkinchi imkoniyat, hamma narsa keskin sur'atda sodir bo'lganda: muharrir Contentful-dagi ma'lumotlarni qo'lda o'zgartiradi (Telegramga havola, ma'ruzachi taqdimoti va boshqalar) va xuddi shu mantiq birinchi marta bo'lgani kabi ishlaydi.

Nikolay: Hamma narsa sahifani yangilamasdan sodir bo'ladi. Barcha o'zgarishlar mijoz uchun mutlaqo muammosiz sodir bo'ladi. Xuddi shu narsa hisobotlarni almashtirish uchun ham amal qiladi. Vaqti kelganda, hisobot va interfeys o'zgaradi.

Vladimir: Bundan tashqari, vaqt jadvalida hisobotlarni boshlash uchun vaqt cheklovlari mavjud. Eng boshida hech narsa yo'q. Va agar siz sichqonchani qizil chiziq ustiga olib kelsangiz, bir vaqtning o'zida translyatsiya direktori tufayli uzilishlar paydo bo'ladi. Rejissor translyatsiyaning to'g'ri boshlanishini belgilaydi, backend bu o'zgarishlarni qabul qiladi, konferentsiya jadvaliga muvofiq butun trek taqdimotlarining boshlanish va tugash vaqtlarini hisoblab chiqadi, uni mijozlarimizga yuboradi va o'yinchi uzilishlarni belgilaydi. Endi foydalanuvchi hisobotning boshi va oxiriga osongina o'tishi mumkin. Bu qattiq biznes talabi, juda qulay va foydali edi. Hisobotning haqiqiy boshlanish vaqtini topishga vaqt sarflamaysiz. Va biz oldindan ko'rishni amalga oshirganimizda, bu mutlaqo ajoyib bo'ladi.

Joylashtirish

- Men joylashtirish haqida so'ramoqchiman. Kolya va jamoa boshida biz uchun hamma narsa ochiladigan butun infratuzilmani o'rnatish uchun ko'p vaqt sarflashdi. Ayting-chi, bularning barchasi nimadan iborat?

Nikolay: Texnik nuqtai nazardan, biz dastlab mahsulotning har qanday sotuvchidan imkon qadar mavhum bo'lishini talab qildik. Terraform skriptlarini maxsus AWS-dan yoki maxsus Yandex-dan yoki Azure-dan va hokazolardan yaratish uchun AWS-ga keling. haqiqatan ham mos kelmadi. Biz bir nuqtada biron joyga ko'chib o'tishga majbur bo'ldik.

Dastlabki uch hafta davomida biz doimo buni yaxshiroq qilish yo'lini qidirdik. Natijada, biz bu holatda Kubernetes bizning hamma narsamiz degan xulosaga keldik, chunki bu bizga avtomatik ravishda o'lchamdagi xizmatlarni yaratish, avtomatik ravishda ishga tushirish va deyarli barcha xizmatlarni qutidan olish imkonini beradi. Tabiiyki, barcha xizmatlar Kubernetes, Docker bilan ishlashga o'rgatilgan va jamoa ham o'rganishi kerak edi.

Bizda ikkita klaster bor. Sinov va ishlab chiqarish. Uskuna va sozlamalar jihatidan ular mutlaqo bir xil. Biz infratuzilmani kod sifatida amalga oshiramiz. Barcha xizmatlar avtomatik ravishda avtomatik quvur liniyasi yordamida xususiyat filiallari, asosiy filiallar, test filiallari va GitLab dan uchta muhitga chiqariladi. Bu GitLab-ga maksimal darajada integratsiyalangan, Elastic, Prometey bilan maksimal darajada integratsiyalangan.

Biz tezda (backend uchun 10 daqiqada, frontend uchun 5 daqiqada) barcha testlar, integratsiyalar, ishlaydigan funktsional testlar, atrof-muhit bo'yicha integratsiya testlari, shuningdek yuk testlari bilan har qanday muhitga o'zgartirishlarni kiritish imkoniyatiga ega bo'lamiz. sinov muhiti, biz ishlab chiqarishda olishni istagan taxminan bir xil narsa.

Sinovlar haqida

- Siz deyarli hamma narsani sinab ko'rasiz, hamma narsani qanday yozganingizga ishonish qiyin. Bizga backend testlari haqida aytib bera olasizmi: hamma narsa qancha qamrab olingan, qanday testlar?

Vladimir: Ikki turdagi testlar yozilgan. Birinchisi, komponent testlari. Butun bahorni qo'llash va tayanchni ko'tarish darajasi sinovlari Sinov konteynerlari. Bu eng yuqori darajadagi biznes stsenariylarining sinovi. Men funktsiyalarni sinab ko'rmayapman. Biz faqat ba'zi katta narsalarni sinab ko'ramiz. Masalan, to'g'ridan-to'g'ri testda foydalanuvchiga kirish jarayoni taqlid qilinadi, bu foydalanuvchining borishi mumkin bo'lgan chiptalar so'rovi va oqimni tomosha qilish uchun kirish so'rovi. Juda aniq foydalanuvchi stsenariylari.

Taxminan xuddi shu narsa atrof-muhitda ishlaydigan integratsiya testlarida amalga oshiriladi. Haqiqatan ham, ishlab chiqarishda keyingi o'rnatish amalga oshirilganda, ishlab chiqarishda haqiqiy asosiy stsenariylar ham ishlaydi. Xuddi shu login, chiptalarni so'rash, CloudFront-ga kirishni so'rash, oqim haqiqatan ham mening ruxsatlarim bilan bog'langanligini tekshirish, direktorning interfeysini tekshirish.

Ayni paytda menda 70 ga yaqin komponent testlari va 40 ga yaqin integratsiya testlari bor. Qamrash 95% ga juda yaqin. Bu komponentlar uchun, integratsiyalashganlar uchun kamroq, unchalik zarur emas. Loyiha kod ishlab chiqarishning barcha turlarini o'z ichiga olganligini hisobga olsak, bu juda yaxshi ko'rsatkich. Uch oy ichida qilgan ishni qilishning boshqa yo'li yo'q edi. Chunki agar biz qo'lda sinovdan o'tkazgan bo'lsak, testerimizga xususiyatlarni berib, u xatolarni topib, ularni tuzatish uchun bizga qaytarsa, kodni disk raskadrovka qilish bo'yicha bu safar juda uzoq davom etadi va biz hech qanday muddatga rioya qilmaymiz.

Nikolay: An'anaviy ravishda, biron bir funktsiyani o'zgartirganda butun platformada regressiyani amalga oshirish uchun siz ikki kun davomida hamma joyda o'tirib, poklashingiz kerak.

Vladimir: Shuning uchun, men biron bir xususiyatni baholaganimda, ikkita oddiy qalam va 4 ta veb-rozetka uchun 1 kun kerak, deb aytsam, Kolya bunga ruxsat beradi. U allaqachon bu 4 kun ichida 2 turdagi testlarni o'z ichiga olganiga o'rganib qolgan va keyin, ehtimol, ishlaydi.

Nikolay: Menda 140 ta test yozilgan: komponent + funktsional, ular xuddi shu narsani qiladi. Barcha bir xil stsenariylar ishlab chiqarishda, sinovda va ishlab chiqarishda sinovdan o'tkaziladi. Shuningdek, biz yaqinda funktsional asosiy UI testlarini qo'shdik. Shunday qilib, biz parchalanishi mumkin bo'lgan eng asosiy funktsiyalarni qamrab olamiz.

Vladimir: Albatta, yuk sinovlari haqida gapirishga arziydi. Hamma narsa qanday ekanligini, Rabbit bilan nima sodir bo'layotganini, JVM bilan nima sodir bo'layotganini, aslida qancha xotira kerakligini tushunish uchun platformani haqiqiyga yaqin yuk ostida sinab ko'rish kerak edi.

- Biz oqim tomonida biror narsani sinab ko'ryapmizmi yoki yo'qmi, aniq bilmayman, lekin biz uchrashganimizda transkoderlar bilan bog'liq muammolar borligini eslayman. Biz oqimlarni sinab ko'rdikmi?

Artyom: Takroriy sinovdan o'tkazildi. Uchrashuvlarni tashkil qilish. Uchrashuvlarni tashkil etish jarayonida 2300 ga yaqin JIRA chiptalari mavjud edi. Bu odamlar uchrashish uchun qilgan umumiy narsalar. Biz platformaning bir qismini Kirill Tolkachev boshqargan uchrashuvlar uchun alohida sahifaga joylashtirdik (talkkv).

Rostini aytsam, katta muammolar yo'q edi. CloudFront-da bir necha marta keshlash xatolariga duch keldik, biz uni juda tez hal qildik - biz shunchaki siyosatlarni qayta sozladik. Odamlarda, saytdagi oqim tizimlarida sezilarli darajada ko'proq xatolar mavjud edi.

Konferentsiyalar davomida men ko'proq uskunalar va xizmatlarni qamrab olish uchun yana bir nechta eksportchilarni yozishga majbur bo'ldim. Ba'zi joylarda faqat o'lchovlar uchun o'z velosipedlarimni yasashga majbur bo'ldim. AV (audio-video) uskunalari dunyosi unchalik qizg'in emas - sizda shunchaki ta'sir qila olmaydigan uskunaning "API" turi mavjud. Va siz kerakli ma'lumotni olishingiz mumkin bo'lgan haqiqatdan uzoqdir. Uskuna sotuvchilari haqiqatan ham sekin va ulardan xohlagan narsangizni olish deyarli mumkin emas. Hammasi bo'lib 100 dan ortiq jihozlar mavjud, ular sizga kerak bo'lgan narsani qaytarib bermaydi va siz g'alati va ortiqcha eksportchilarni yozasiz, buning yordamida siz hech bo'lmaganda tizimni disk raskadrovka qilishingiz mumkin.

uskunalar

— Konferentsiyalar boshlanishidan oldin biz qisman qo'shimcha uskunalar sotib olganimizni eslayman.

Artyom: Biz kompyuterlar, noutbuklar va batareya paketlarini sotib oldik. Ayni paytda biz 40 daqiqa elektrsiz yashashimiz mumkin. Iyun oyida Sankt-Peterburgda kuchli momaqaldiroq bo'ldi - shuning uchun bizda shunday yorug'lik bor edi. Shu bilan birga, bir nechta provayderlar bizga turli nuqtalardan optik aloqalar bilan kelishadi. Bu haqiqatan ham qurilishning 40 daqiqalik to'xtash vaqti bo'lib, bu vaqt davomida bizda chiroqlar, ovoz, kameralar va boshqalar ishlaydi.

— Bizda internet bilan ham xuddi shunday voqea bor. Bizning studiyamiz joylashgan ofisda biz qattiq to'rni qavatlar orasiga sudrab chiqdik.

Artyom: Bizda qavatlar orasida 20 Gbit tola bor. Qavatlar bo'ylab, qayerdadir optika bor, qayerdadir optika yo'q, lekin baribir gigabitli kanallardan kamroq kanallar bor - biz konferentsiya treklari orasida ular ustida video olib boramiz. Umuman olganda, o'z infratuzilmangizda ishlash juda qulay, buni saytlardagi oflayn konferentsiyalarda kamdan-kam hollarda qilishingiz mumkin.

— JUG Ru Group’da ishlashdan oldin men bir kechada oflayn konferentsiyalarda apparat xonalari qanday tashkil etilganini ko‘rdim, u yerda Grafana’da yaratgan barcha ko‘rsatkichlarga ega katta monitor bor edi. Endi konferentsiya davomida ba'zi xatolarni tuzatadigan va xususiyatlarni ishlab chiqadigan rivojlanish guruhi o'tiradigan shtab-kvartira xonasi mavjud. Shu bilan birga, katta ekranda ko'rsatiladigan monitoring tizimi mavjud. Artyom, Kolya va boshqa yigitlar o'tirib, hammasi tushmasligiga va chiroyli ishlashiga ishonch hosil qilishadi.

Qiziqishlar va muammolar

— Siz bizda Amazon bilan striming borligi, internetga ega pleer borligi, hamma narsa turli dasturlash tillarida yozilgani, nosozliklarga chidamlilik va boshqa biznes talablari taʼminlanganligi, shu jumladan yuridik shaxslar uchun qoʻllab-quvvatlanadigan shaxsiy kabinet va boshqalar haqida yaxshi gapirdingiz. shaxslar, va biz OAuth 2.0 yordamida kimdir bilan integratsiya qilishimiz mumkin, firibgarlikka qarshi, foydalanuvchi blokirovkasi mavjud. Biz o'zgarishlarni dinamik ravishda amalga oshirishimiz mumkin, chunki biz buni yaxshi bajardik va barchasi sinovdan o'tkazildi.

Men biror narsani boshlashda qanday g'alati narsalar ishtirok etganini bilishga qiziqaman. Backend, frontend ishlab chiqayotganingizda g'alati vaziyatlar bo'lganmi, aqldan ozgan narsa yuz berdi va siz u bilan nima qilishni tushunmadingiz?

Vladimir: Menimcha, bu so'nggi uch oy ichida sodir bo'lgandek tuyuladi. Har kuni. Ko'rib turganingizdek, mening barcha sochlarim taralgan.

90 kun ichida video platformani ishlab chiqing
Vladimir Krasilshchik 3 oydan so'ng, qandaydir o'yin paydo bo'lganida va hech kim u bilan nima qilishni tushunmadi.

Har kuni shunga o'xshash narsa bo'lardi, qachonki siz uni olib, sochingizni yulib yuborsangiz yoki boshqa hech kim yo'qligini va buni faqat siz qila olasiz. Bizning birinchi yirik tadbirimiz TechTrain edi. 6-iyun kuni soat 2 da biz ishlab chiqarish muhitini hali ishga tushirmagan edik, Kolya uni ishlab chiqarayotgan edi. Va shaxsiy hisob OAuth2.0 yordamida avtorizatsiya serveri sifatida ishlamadi. Biz platformani unga ulash uchun uni OAuth2.0 provayderiga aylantirdik. Men 18 soat to'g'ridan-to'g'ri ishladim, men kompyuterga qaradim va hech narsani ko'rmadim, nega u ishlamayotganini tushunmadim va Kolya uzoqdan mening kodimga qaradi, bahor konfiguratsiyasida xatolikni qidirdi. , uni topdi va LC ishladi va ishlab chiqarishda ham.

Nikolay: Va TechTrain-dan bir soat oldin reliz bo'lib o'tdi.

Bu erda ko'plab yulduzlar to'plangan. Biz juda omadli edik, chunki bizda super jamoa bor edi va hamma buni onlayn qilish g'oyasidan ilhomlantirdi. Bu uch oy davomida biz "YouTube"ni yaratganimizdan hayratda qoldik. Men sochimni yirtib tashlashga ruxsat bermadim, lekin hamma narsa yaxshi bo'lishini hammaga aytdim, chunki aslida hamma narsa uzoq vaqt oldin hisoblab chiqilgan.

Ishlash haqida

— Ayta olasizmi, bitta trekda qancha odam saytda edi? Har qanday ishlash bilan bog'liq muammolar bormi?

Nikolay: Yuqorida aytib o'tganimizdek, ishlash bilan bog'liq muammolar yo'q edi. Bitta hisobotda qatnashganlarning maksimal soni 1300 kishini tashkil etdi, bu Heisenbugda.

— Mahalliy tomosha bilan bog'liq muammolar bo'lganmi? Va bularning barchasi qanday ishlashini diagrammalar bilan texnik tavsifga ega bo'lish mumkinmi?

Nikolay: Bu haqda keyinroq maqola tayyorlaymiz.

Hatto mahalliy ravishda oqimlarni disk raskadrovka qilishingiz mumkin. Konferentsiyalar boshlangandan so'ng, bu yanada osonlashdi, chunki biz har doim tomosha qilishimiz mumkin bo'lgan ishlab chiqarish oqimlari paydo bo'ldi.

Vladimir: Men tushunganimdek, front-end ishlab chiquvchilari mahalliy ravishda masxara bilan ishlagan, keyin esa oldingi ishlab chiquvchilarga chiqish vaqti ham qisqa (5 daqiqa) bo'lgani uchun sertifikatlar bilan nima sodir bo'layotganini tekshirishda hech qanday muammo yo'q.

— Hammasi sinovdan o'tgan va tuzatilgan, hatto mahalliy. Bu shuni anglatadiki, biz barcha texnik xususiyatlar bilan maqola yozamiz, sizga ko'rsatamiz, sizga diagrammalar bilan hamma narsani aytib beramiz, qanday bo'lgan.

Vladimir: Siz uni olib, takrorlashingiz mumkin.

- 3 oy ichida.

Xulosa

— Birgalikda tasvirlangan hamma narsa juda zo'r tuyuladi, buni kichik bir jamoa uch oy ichida amalga oshirganini hisobga olsak.

Nikolay: Katta jamoa buni qilolmaydi. Ammo bir-biri bilan juda yaqin va yaxshi muloqot qiladigan va kelishuvga erisha oladigan kichik bir guruh odamlar. Ularda hech qanday qarama-qarshilik yo'q, arxitektura ikki kun ichida ixtiro qilindi, yakunlandi va aslida o'zgarmadi. Xususiyat so'rovlari va o'zgarishlarni to'plash nuqtai nazaridan kiruvchi biznes talablarini juda qattiq osonlashtirish mavjud.

— Yozgi konferentsiyalar bo'lib o'tganda keyingi vazifalaringiz ro'yxatida nima bor edi?

Nikolay: Masalan, kreditlar. Videodagi oʻrmalovchi chiziqlar, koʻrsatilayotgan kontentga qarab videoning baʼzi joylarida qalqib chiquvchi oynalar. Misol uchun, ma'ruzachi tinglovchilarga savol bermoqchi bo'lib, ekranda ovoz berish belgisi paydo bo'ladi, u ovoz berish natijalariga ko'ra ma'ruzachining o'ziga qaytib ketadi. Taqdimot davomida yoqtirishlar, yuraklar, hisobotning reytinglari ko'rinishidagi ijtimoiy faollik, shunda siz o'z vaqtida fikr-mulohazalarni keyinchalik qayta aloqa shakllari bilan chalg'itmasdan to'ldirishingiz mumkin. Avvaliga shunday.

Shuningdek, butun platformaga oqim va konferentsiyadan tashqari, shuningdek, konferentsiyadan keyingi holatni qo'shish. Bular pleylistlar (jumladan, foydalanuvchilar tomonidan tuzilganlar), ehtimol boshqa o'tgan konferentsiyalar tarkibi, birlashtirilgan, etiketlangan, foydalanuvchi uchun ochiq va shuningdek bizning veb-saytimizda ko'rish mumkin (live.jugru.org).

— Bolalar, javoblaringiz uchun katta rahmat!

O'quvchilar orasida yozgi anjumanlarimizga tashrif buyurganlar bo'lsa, futbolchi haqidagi taassurotlaringiz bilan o'rtoqlashing va translyatsiya qiling. Nima qulay edi, sizni nima bezovta qildi, kelajakda nimani ko'rishni xohlaysiz?

Agar siz platformaga qiziqsangiz va uni "jangda" ko'rishni istasangiz, biz uni yana o'zimizda ishlatamiz kuz-qish konferentsiyalari. Ularning to'liq assortimenti bor, shuning uchun sizga mos keladigani deyarli aniq.

Manba: www.habr.com

a Izoh qo'shish