90 күн ішінде бейне платформасын жасаңыз

Осы көктемде біз өте көңілді жағдайда болдық. Пандемияға байланысты жазғы конференцияларымызды онлайн режимге көшіру қажет екені белгілі болды. Оларды онлайн режимінде тиімді жүргізу үшін дайын бағдарламалық шешімдер бізге сәйкес келмеді, біз өзімізді жазуымыз керек еді. Ал бізде мұны істеу үшін үш ай болды.

Қызықты үш ай болғаны анық. Бірақ сырттан қарағанда бұл мүлдем анық емес: онлайн конференция алаңы дегеніміз не? Ол қандай бөліктерден тұрады? Сондықтан, жазғы DevOops конференцияларының соңғысында мен осы тапсырмаға жауапты адамдардан сұрадым:

  • Николай Молчанов – JUG Ru Group техникалық директоры;
  • Владимир Красильщик - бэкендте жұмыс істейтін прагматикалық Java бағдарламашысы (сіз оның баяндамаларын біздің Java конференцияларында да көре аласыз);
  • Артём Никонов біздің барлық бейне ағынымызға жауапты.

Айтпақшы, күзгі-қысқы конференцияларда біз сол платформаның жетілдірілген нұсқасын қолданамыз - сондықтан көптеген хабра оқырмандары әлі де оның пайдаланушысы болады.

90 күн ішінде бейне платформасын жасаңыз

Жалпы сурет

— Команданың құрамы қандай болды?

Николай Молчанов: Бізде аналитик, дизайнер, тестілеуші, үш фронт-эндер және бэк-энд бар. Және, әрине, Т-тәрізді маман!

— Жалпы процесс қалай болды?

Николай: Наурыз айының ортасына дейін бізде онлайн режимінде ештеңе дайын болған жоқ. Ал 15 наурызда бүкіл онлайн карусель айнала бастады. Біз бірнеше репозиторий орнаттық, жоспарладық, негізгі архитектураны талқыладық және үш айдың ішінде бәрін жасадық.

Бұл, әрине, жоспарлаудың, архитектураның, ерекшеліктерді таңдаудың, сол ерекшеліктерге дауыс берудің, сол ерекшеліктерге қатысты саясаттың, оларды жобалаудың, әзірлеудің, сынақтан өткізудің классикалық кезеңдерінен өтті. Нәтижесінде 6 маусымда біз барлығын өндіріске шығардық. TechTrain. Барлығы үшін 90 күн болды.

— Біз міндеттемені орындай алдық па?

Николай: Біз қазір DevOops конференциясына онлайн түрде қатысып жатқандықтан, бұл оның жұмыс істегенін білдіреді. Мен өз басым басты міндетімді қойдым: мен тұтынушыларға онлайн-конференция жасай алатын құрал әкелемін.

Мәселе мынада болды: бізге конференцияларымызды билет иелеріне тарата алатын құрал беріңіз.

Барлық жоспарлау бірнеше кезеңге бөлінді және барлық мүмкіндіктер (30-ға жуық жаһандық) 4 санатқа бөлінді:

  • біз міндетті түрде жасаймыз (біз оларсыз өмір сүре алмаймыз),
  • біз екіншіден жасаймыз,
  • біз оны ешқашан істемейміз,
  • және біз оны ешқашан, ешқашан жасамаймыз.

Біз алғашқы екі санаттағы барлық мүмкіндіктерді жасадық.

— Мен JIRA-ның барлығы 600 шығарылымы жасалғанын білемін. Үш ай ішінде сіз 13 микросервис жасадыңыз, мен олар тек Java тілінде жазылған жоқ деп ойлаймын. Сіз әртүрлі технологияларды қолдандыңыз, сізде үш қолжетімділік аймағында екі Kubernetes кластері және Amazon-да 5 RTMP ағыны бар.

Енді жүйенің әрбір құрамдас бөлігін бөлек қарастырайық.

Ағын

— Бізде бейне кескін бар және ол кейбір қызметтерге жіберілген кезден бастайық. Артем, айтыңызшы, бұл стриминг қалай жүреді?

Артём Никонов: Біздің жалпы схемамыз келесідей: камерадағы сурет -> біздің басқару бөлмесі -> жергілікті RTMP сервер -> Amazon -> бейне ойнатқыш. Толығырақ ол туралы жазды маусымда Хабреде.

Жалпы, мұны істеудің екі жаһандық жолы бар: аппараттық құралда немесе бағдарламалық шешімдер негізінде. Біз бағдарламалық құрал бағытын таңдадық, себебі қашықтағы динамиктер жағдайында бұл оңайырақ. Басқа елдегі динамикке жабдықты жеткізу әрдайым мүмкін емес, бірақ бағдарламалық құралды динамикке жеткізу оңайырақ және сенімдірек болып көрінеді.

Аппараттық тұрғыдан алғанда, бізде камералардың белгілі бір саны (студияларымызда және қашықтағы динамиктерде), студияда қашықтан басқару құралдарының белгілі бір саны бар, оларды кейде эфир кезінде тікелей үстелдің астында жөндеуге тура келеді.

Бұл құрылғылардың сигналдары түсіру карталары, енгізу/шығару карталары және дыбыс карталары бар компьютерлерге түседі. Мұнда сигналдар араласады және орналасуларға жиналады:

90 күн ішінде бейне платформасын жасаңыз
4 динамикке арналған орналасу үлгісі

90 күн ішінде бейне платформасын жасаңыз
4 динамикке арналған орналасу үлгісі

Әрі қарай үздіксіз хабар тарату үш компьютердің көмегімен қамтамасыз етіледі: бір негізгі машина және кезекпен жұмыс істейтін жұп. Бірінші компьютер бірінші есепті жинайды, екіншісі - үзіліс, бірінші - келесі есеп, екіншісі - келесі үзіліс және т.б. Ал негізгі машина біріншісін екіншісімен араластырады.

Бұл үшбұрыштың түрін жасайды және егер осы түйіндердің кез келгені сәтсіз болса, біз тез және сапаны жоғалтпастан мазмұнды клиенттерге жеткізуді жалғастыра аламыз. Бізде осындай жағдай болды. Конференциялардың бірінші аптасында біз бір машинаны жөндеп, оны қостық/өшірдік. Адамдар біздің төзімділігімізге риза сияқты.

Әрі қарай, компьютерлерден ағындар екі міндеті бар жергілікті серверге өтеді: RTMP ағындарын бағыттау және резервтік көшірмелерді жазу. Сондықтан бізде бірнеше жазу нүктелері бар. Содан кейін бейне ағындары жүйенің Amazon SaaS қызметтеріне негізделген бөлігіне жіберіледі. Біз қолданамыз MediaLive,S3, CloudFront.

Николай: Бейне аудиторияға жеткенше ол жерде не болады? Сіз оны қандай да бір жолмен кесуіңіз керек, солай ма?

Артем: Біз бейнені өз тарапымыздан қысып, MediaLive-ке жібереміз. Біз онда транскодерлерді іске қосамыз. Олар бейнелерді нақты уақытта бірнеше ажыратымдылыққа ауыстырады, осылайша адамдар оларды телефондарынан, елдегі нашар интернет арқылы және т.б. көре алады. Содан кейін бұл ағындар кесіледі кесектер, протокол осылай жұмыс істейді HLS. Біз осы бөліктерге көрсеткіштерді қамтитын ойнату тізімін фронтонға жібереміз.

— Біз 1080p ажыратымдылығын пайдаланамыз ба?

Артем: Біздің бейненің ені 1080p - 1920 пиксельмен бірдей, ал биіктігі сәл азырақ, сурет ұзартылған - мұның себептері бар.

Ойыншы

— Артём бейненің ағындарға қалай түсетінін, әртүрлі экран ажыратымдылығы үшін әртүрлі ойнату тізімдеріне қалай таратылатынын, бөліктерге кесіліп, ойнатқышқа қалай түсетінін сипаттады. Коля, енді айтшы бұл қандай ойыншы, ол ағынды қалай тұтынады, неге HLS?

Николай: Бізде барлық конференция көрермендері көре алатын ойыншы бар.

90 күн ішінде бейне платформасын жасаңыз

Негізінде, бұл кітапхананың айналасындағы қаптама hls.js, онда көптеген басқа ойыншылар жазылған. Бірақ бізге өте нақты функционалдылық қажет болды: адамның қай жерде екенін, қазіргі уақытта қандай репортажды көріп жатқанын кері айналдыру және белгілеу. Бізге сондай-ақ өз макеттері, барлық логотиптер және бізбен бірге салынған басқа нәрселер қажет болды. Сондықтан, біз өз кітапханамызды (HLS бойынша қаптама) жазып, оны сайтқа енгізуді шештік.

Бұл түбірлік функция, сондықтан ол бірінші рет дерлік жүзеге асырылды. Содан кейін бәрі оның айналасында өсті.

Шын мәнінде, авторизация арқылы ойыншы бэк-эндтен уақыт пен сапаға байланысты бөліктерге сілтемелері бар ойнату тізімін алады, қажеттілерін жүктеп алады және жол бойында қандай да бір «сиқыр» жасай отырып, пайдаланушыға көрсетеді.

90 күн ішінде бейне платформасын жасаңыз
Уақыт кестесінің мысалы

— Барлық есептердің уақыт шкаласын көрсету үшін тікелей ойнатқышта түйме орнатылған...

Николай: Иә, біз пайдаланушы навигациясы мәселесін бірден шештік. Сәуір айының ортасында біз әрбір конференциямызды жеке сайтта көрсетпей, барлығын бір сайтта біріктіреміз деп шештік. Толық Pass билетін пайдаланушылар әртүрлі конференциялар арасында еркін ауыса алады: тікелей эфирлер де, өткендердің жазбалары да.

Пайдаланушыларға ағымдағы ағынды шарлауды және тректер арасында ауысуды жеңілдету үшін біз тректер мен есептер арасында ауысу үшін «Толық хабар тарату» түймесін және көлденең есеп карталарын жасауды шештік. Пернетақта басқаруы бар.

— Бұған қатысты техникалық қиындықтар болды ма?

Николай: Оларда әртүрлі есептердің бастапқы нүктелері белгіленген айналдыру жолағы болды.

— Ақырында, YouTube ұқсас нәрсе жасамас бұрын, сіз айналдыру жолағында осы белгілерді енгіздіңіз бе?

Артем: Олар ол кезде бета нұсқасында болды. Бұл өте күрделі функция сияқты көрінеді, өйткені олар оны соңғы бір жылда пайдаланушылармен ішінара сынап көрді. Ал қазір сатылымға шықты.

Николай: Бірақ біз оны тезірек сатуға алдық. Шынымды айтсам, осы қарапайым мүмкіндіктің артында ойнатқыштың ішінде көптеген серверлер, фронттер, есептеулер және математика бар.

Алғы жақ

— Біз көрсететін бұл мазмұн (сөйлеу картасы, спикерлер, веб-сайт, кесте) алдыңғы жаққа қалай түсетінін анықтайық?

Владимир Красильщик: Бізде бірнеше ішкі IT жүйелері бар. Барлық есептер мен барлық баяндамашылар енгізілген жүйе бар. Спикердің конференцияға қатысатын процесі бар. Спикер өтініш береді, жүйе оны түсіреді, содан кейін есеп жасалатын белгілі бір құбыр бар.

90 күн ішінде бейне платформасын жасаңыз
Баяндамашы құбырды осылай көреді

Бұл жүйе біздің ішкі дамуымыз.

Әрі қарай, жеке есептерден кесте құру керек. Өздеріңіз білетіндей, бұл NP қиын мәселе, бірақ біз оны қандай да бір жолмен шешеміз. Мұны істеу үшін біз кестені жасайтын және оны үшінші тараптың Contentful бұлттық қызметіне жүктеп салатын басқа компонентті іске қосамыз. Онда барлығы конференция күндері, күндерінде уақыт аралықтары, ал слоттарда есептер, үзілістер немесе демеушілік әрекеттері бар кестеге ұқсайды. Сондықтан біз көріп отырған мазмұн үшінші тарап қызметінде орналасқан. Ал міндет оны сайтқа жеткізу.

Сайт ойнатқышы бар парақ сияқты көрінеді және мұнда күрделі ештеңе жоқ. Болмаса. Бұл беттің артындағы сервер Contentful-ке өтеді, сол жерден кестені алады, кейбір нысандарды жасайды және оны фронтендке жібереді. Біздің платформамыздың әрбір клиенті жасайтын websocket қосылымын пайдалана отырып, біз оған кестеге жаңартуды серверден фронтендке жібереміз.

Нақты жағдай: спикер тікелей конференция кезінде жұмысын ауыстырды. Біз оның жұмыс берушінің белгісін өзгертуіміз керек. Бұл серверден қалай болады? Жаңарту веб-розетка арқылы барлық клиенттерге жіберіледі, содан кейін фронтонның өзі уақыт шкаласын қайта сызады. Мұның бәрі үздіксіз жүреді. Бұлттық қызмет пен біздің бірнеше құрамдастардың үйлесімі бізге осы мазмұнның барлығын жасауға және оны алдыңғы қатарға шығаруға мүмкіндік береді.

Николай: Бұл жерде біздің сайт классикалық SPA қолданбасы емес екенін түсіндіру маңызды. Бұл орналасуға негізделген, көрсетілетін веб-сайт және SPA. Google шын мәнінде бұл сайтты HTML түрінде көрсетілгендей көреді. Бұл SEO үшін және пайдаланушыға мазмұнды жеткізу үшін жақсы. Ол бетті көрмес бұрын 1,5 мегабайт JavaScript жүктелуін күтпейді, ол қазірдің өзінде көрсетілген бетті бірден көреді және сіз оны есепті ауыстырған сайын сезінесіз. Барлығы жарты секундта болады, өйткені мазмұн дайын және дұрыс жерде орналастырылған.

— Технологияларды тізімдеу арқылы жоғарыда аталғандардың барлығының астына сызық сызайық. Тиома бізде 5 Amazon ағыны бар екенін айтты және біз сонда бейне мен дыбысты жеткіземіз. Бізде bash сценарийлері бар, біз оларды іске қосу және конфигурациялау үшін қолданамыз...

Артем: Бұл AWS API арқылы жүзеге асады, онда көптеген техникалық қосымша қызметтер бар. Біз өз міндеттерімізді мен жеткізетіндей етіп бөлдік CloudFront, ал фронт-end және back-end әзірлеушілер оны сол жерден алады. Мазмұнның орналасуын жеңілдету үшін бізде бірқатар жеке байлаулар бар, оларды кейін 4K форматында жасаймыз және т.б. Мерзімдері өте тығыз болғандықтан, біз оны толығымен дерлік AWS-те жасадық.

— Содан кейін мұның бәрі бэкенд жүйесі арқылы ойнатқышқа түседі. Біздің ойнатқышта TypeScript, React, Next.JS бар. Ал серверде C#, Java, Spring Boot және Node.js тілдерінде бірнеше қызметтер бар. Мұның барлығы Yandex.Cloud инфрақұрылымы арқылы Kubernetes көмегімен орналастырылған.

Сондай-ақ, платформамен танысу қажет болғанда, бұл оңай болғанын атап өткім келеді: барлық репозиторийлер GitLab-да, бәрі жақсы аталды, тесттер жазылған, құжаттама бар. Яғни, апаттық режимде болса да, олар осындай істермен айналысты.

Бизнес шектеулері және аналитика

— Біз бизнес талаптары негізінде 10 000 пайдаланушыны мақсат тұттық. Бізде болған бизнес шектеулері туралы айтатын кез келді. Бізге жоғары жүктемені қамтамасыз ету, жеке деректерді сақтау туралы заңның сақталуын қамтамасыз ету керек болды. Тағы не?

Николай: Бастапқыда бейне талаптардан бастадық. Ең бастысы, клиентке жылдам жеткізу үшін бүкіл әлем бойынша таратылатын бейне қоймасы. Басқалары 1080p ажыратымдылығын, сондай-ақ кері айналдыруды қамтиды, басқалары тікелей режимде іске асырмайды. Кейінірек біз 2x жылдамдықты қосу мүмкіндігін қостық, оның көмегімен сіз тікелей эфирді «қуып жетуге» және нақты уақытта конференцияны қарауды жалғастыра аласыз. Сонымен қатар, уақыт шкаласын белгілеу функциясы пайда болды. Оған қоса, біз ақауларға төзімді болуымыз керек және 10 000 қосылымның жүктемесіне төтеп беруіміз керек еді. Сервер тұрғысынан бұл әр бетті жаңарту үшін 10 сұрауға көбейтілген шамамен 000 8 қосылым. Бұл қазірдің өзінде 80 000 RPS/сек. Біраз.

— Әріптестердің онлайн стенділері бар «виртуалды көрмеге» басқа талаптар болды ма?

Николай: Иә, бұл өте тез және әмбебап түрде жасалуы керек еді. Әр конференцияға бізде 10-ға дейін серіктес компаниялар болды және олардың барлығы бір-екі аптада аяқталуы керек еді. Дегенмен, олардың мазмұны пішімінде аздап ерекшеленеді. Бірақ бұл парақтарды жылдам жинайтын белгілі бір үлгі қозғалтқышы жасалды, одан әрі әзірлеуге іс жүзінде қатысуы жоқ.

— Сондай-ақ нақты уақыт режиміндегі көріністер мен статистиканың аналитикасына қойылатын талаптар болды. Мен бұл үшін Прометейді қолданатынымызды білемін, бірақ толығырақ айтыңыз: аналитикаға қандай талаптарды орындаймыз және бұл қалай жүзеге асырылады?

Николай: Бастапқыда бізде болашақта ең жақсы мазмұнды клиентке қалай дұрыс жеткізу керектігін түсіну үшін A/B сынағы үшін жинау және ақпарат жинау бойынша маркетингтік талаптар бар. Сондай-ақ серіктес әрекеттері туралы кейбір талдауларға және сіз көретін талдауларға (санауышқа кіру) талаптар бар. Барлық ақпарат нақты уақытта жиналады.

Біз бұл ақпаратты жинақталған түрде тіпті спикерлерге де бере аламыз: белгілі бір уақытта сізді қанша адам бақылап отырды. Сонымен қатар, 152 Федералдық заңға сәйкес сіздің жеке шотыңыз бен жеке деректеріңіз ешқандай жолмен бақыланбайды.

Платформада есептерге қатысу графиктерін құру үшін нақты уақыт режимінде (есептің қай секундын бақылаған) пайдаланушы белсенділігін өлшеуге арналған маркетинг құралдары мен біздің көрсеткіштеріміз бар. Осы деректерге сүйене отырып, келесі конференцияларды жақсырақ ететін зерттеулер жүргізілуде.

Алаяқтық

— Бізде алаяқтыққа қарсы механизмдер бар ма?

Николай: Іскерлік тұрғыдан алғанда уақыттың тығыздығына байланысты қажетсіз қосылымдарды дереу блоктау үшін тапсырма бастапқыда орнатылмады. Егер екі пайдаланушы бір тіркелгі арқылы кірсе, олар мазмұнды көре алады. Бірақ біз бір аккаунттан қанша бір уақытта қаралғанын білеміз. Және біз бірнеше аса зиянды бұзушыларға тыйым салдық.

Владимир: Тыйым салынған қолданушылардың бірі мұның неліктен болғанын түсінді. Келіп, кешірім сұрап, билет алуға уәде берді.

— Мұның бәрі болуы үшін сіз барлық пайдаланушыларды кіруден шыққанға дейін толығымен қадағалап отыруыңыз керек, әрқашан олардың не істеп жатқанын білуіңіз керек. Бұл жүйе қалай жұмыс істейді?

Владимир: Мен аналитика мен статистика туралы айтқым келеді, біз оны есептің сәттілігі үшін талдаймыз немесе серіктестерге бере аламыз. Барлық клиенттер белгілі сервер кластеріне websocket қосылымы арқылы қосылған. Сол жерде тұр Хазелкаст. Әрбір клиент әр уақытта не істеп жатқанын және қандай трек көріп жатқанын жібереді. Содан кейін бұл ақпарат жылдам Hazelcast тапсырмалары арқылы жинақталады және осы тректерді көретіндердің барлығына қайтарылады. Бұрыштан бізбен бірге қанша адам бар екенін көреміз.

90 күн ішінде бейне платформасын жасаңыз

Дәл осындай ақпарат сақталады Mongo және біздің деректер көліне барады, одан біз қызықтырақ графикті құруға мүмкіндік аламыз. Сұрақ туындайды: бұл есепті қанша бірегей пайдаланушы қарады? барамыз Пострегтер, осы есептің идентификаторы арқылы келген барлық адамдардың пингтері бар. Біз бірегейлерін жинадық, біріктірдік, енді түсінеміз.

Николай: Бірақ сонымен бірге біз Прометейден нақты уақыттағы деректерді аламыз. Ол барлық Kubernetes қызметтеріне қарсы, Kubernetes өзіне қарсы қойылған. Ол барлығын жинайды және Grafana көмегімен біз нақты уақытта кез келген графиктерді құра аламыз.

Владимир: Бір жағынан, біз оны одан әрі OLAP өңдеу үшін жүктеп аламыз. Ал OLTP үшін қолданба Прометейге, Графанаға толығымен жүктейді және графиктер тіпті біріктіріледі!

- Бұл графиктер жинақталған кездегі жағдай.

Динамикалық өзгерістер

— Динамикалық өзгерістер қалай жүзеге асырылатынын айтыңыз: егер есеп басталардан 6 минут бұрын жойылса, әрекеттер тізбегі қандай? Қандай құбыр жұмыс істейді?

Владимир: Құбыр өте шартты. Бірнеше мүмкіндіктер бар. Біріншісі, кестені құру бағдарламасы жұмыс істеп, кестені өзгертті. Өзгертілген кесте Contentful қолданбасына жүктеп салынған. Осыдан кейін сервер Contentful бағдарламасында осы конференция үшін өзгерістер бар екенін түсінеді, оны қабылдайды және қайта жасайды. Барлығы websocket арқылы жиналады және жіберіледі.

Екінші мүмкіндік, бәрі жылдам қарқынмен болған кезде: редактор Contentful ішіндегі ақпаратты қолмен өзгертеді (Telegram сілтемесі, спикердің тұсаукесері және т.б.) және бірдей логика бірінші рет жұмыс істейді.

Николай: Барлығы бетті жаңартпай орындалады. Барлық өзгертулер клиент үшін мүлдем кедергісіз орын алады. Бұл есептерді ауыстыруға да қатысты. Уақыты келгенде есеп пен интерфейс өзгереді.

Владимир: Сондай-ақ, уақыт шкаласында есептерді бастау үшін уақыт шектеулері бар. Ең басында ештеңе жоқ. Егер сіз тінтуірді қызыл жолақтың үстіне апарсаңыз, онда бір сәтте хабар тарату директорының арқасында кесулер пайда болады. Режиссер трансляцияның дұрыс басталуын белгілейді, сервер бұл өзгерісті қабылдайды, конференция кестесіне сәйкес тректің барлық презентацияларының басталу және аяқталу уақыттарын есептейді, оны біздің клиенттерге жібереді және ойыншы үзілістерді тартады. Енді пайдаланушы есептің басы мен соңына оңай шарлай алады. Бұл өте ыңғайлы және пайдалы бизнестің қатаң талабы болды. Есептің нақты басталу уақытын табуға уақыт жоғалтпайсыз. Ал біз алдын ала қарауды жасағанда, бұл өте керемет болады.

Орналастыру

— Мен орналастыру туралы сұрағым келеді. Коля мен команда біз үшін барлығы ашылатын барлық инфрақұрылымды орнатуға басында көп уақыт жұмсады. Айтыңызшы, мұның бәрі неден жасалған?

Николай: Техникалық тұрғыдан алғанда, бізде бастапқыда кез келген сатушыдан өнім мүмкіндігінше дерексіз болу талабы болды. Терраформ сценарийлерін арнайы AWS-тен немесе арнайы Яндекстен немесе Azure-дан және т.б. жасау үшін AWS-ке келіңіз. шынымен сәйкес келмеді. Бір кезде бір жерге көшуге тура келді.

Алғашқы үш аптада біз мұны жақсартудың жолын үнемі іздедік. Нәтижесінде біз Kubernetes бұл жағдайда біздің бәріміз деген қорытындыға келдік, өйткені ол автоматты түрде масштабталатын қызметтерді жасауға, автоматты түрде шығаруға және барлық дерлік қызметтерді қораптан алуға мүмкіндік береді. Әрине, барлық қызметтерді Kubernetes, Docker-пен жұмыс істеуге үйрету керек болды және команда да үйренуі керек болды.

Бізде екі кластер бар. Сынақ және өндіру. Аппараттық құралдар мен параметрлер бойынша олар мүлдем бірдей. Біз инфрақұрылымды код ретінде енгіземіз. Барлық қызметтер мүмкіндік тармақтарынан, негізгі тармақтардан, сынақ тармақтарынан және GitLab жүйесінен автоматты құбыр арқылы автоматты түрде үш ортаға шығарылады. Бұл GitLab-ке барынша біріктірілген, Elastic, Prometheus-пен барынша біріктірілген.

Біз барлық сынақтармен, интеграциялармен, іске қосылған функционалдық сынақтармен, қоршаған ортадағы біріктіру сынақтарымен, сондай-ақ жүктеу сынақтарымен кез келген ортаға өзгерістерді жылдам шығару мүмкіндігін аламыз (бағдарлама үшін 10 минут ішінде, фронтенд үшін 5 минут ішінде) сынақ ортасы біз өндірісте алғымыз келетін шамамен бірдей нәрсе.

Тесттер туралы

— Сіз бәрін дерлік сынайсыз, бәрін қалай жазғаныңызға сену қиын. Бізге серверлік сынақтар туралы айтып бере аласыз ба: барлығы қаншалықты қамтылған, қандай сынақтар?

Владимир: Тесттердің екі түрі жазылған. Біріншісі - құрамдас сынақтар. Бүкіл серіппелі қолдану мен негізді көтеру деңгейінің сынақтары Сынақ контейнерлері. Бұл ең жоғары деңгейдегі бизнес сценарийлерінің сынағы. Мен функцияларды тексермеймін. Біз тек кейбір үлкен нәрселерді сынаймыз. Мысалы, дәл сынақта пайдаланушыға кіру процесі эмуляцияланады, пайдаланушының қайда бара алатын билеттерін сұрауы және ағынды көруге рұқсат сұрауы. Өте анық пайдаланушы сценарийлері.

Шамамен бірдей нәрсе қоршаған ортада жұмыс істейтін интеграциялық сынақтар деп аталатында жүзеге асырылады. Шындығында, өндірісте келесі орналастыру іске қосылғанда, нақты негізгі сценарийлер де өндірісте іске қосылады. Дәл сол логин, билеттерді сұрау, CloudFront-қа кіруді сұрау, ағынның шынымен менің рұқсаттарыма қосылатынын тексеру, директор интерфейсін тексеру.

Қазіргі уақытта менде 70-ке жуық компоненттік сынақтар мен 40-қа жуық интеграциялық сынақтар бар. Қамту 95%-ға өте жақын. Бұл құрамдас бөліктерге арналған, интеграциялық құрамдас бөліктерге аз, бұл өте қажет емес. Жоба кодты генерациялаудың барлық түрлерін қамтитынын ескерсек, бұл өте жақсы көрсеткіш. Үш айдың ішінде істеген ісімізден басқа амал қалмады. Өйткені, егер біз тестілеушімізге мүмкіндіктер бере отырып, қолмен сынақтан өткізсек және ол қателерді тауып, оларды түзету үшін бізге қайтаратын болса, кодты жөндеуге арналған бұл сапар өте ұзақ болады және біз ешқандай мерзімге сай болмас едік.

Николай: Шартты түрде, қандай да бір функцияны өзгерту кезінде бүкіл платформада регрессияны жүзеге асыру үшін сіз екі күн бойы барлық жерде отыруыңыз керек.

Владимир: Сондықтан, қандай да бір мүмкіндікті бағалағанда, екі қарапайым қалам мен 4 веб-розеткаға 1 күн қажет екенін айтамын, Коля рұқсат етеді. Ол қазірдің өзінде осы 4 күнде 2 сынақ түрін қамтитынына, содан кейін, ең алдымен, нәтиже беретініне үйренген.

Николай: Менде 140 сынақ жазылған: компонент + функционалды, олар бірдей нәрсені жасайды. Барлық бірдей сценарийлер өндірісте, сынақта және өндірісте сыналады. Жақында біз функционалды негізгі UI сынақтарын қостық. Осылайша, біз ыдырауы мүмкін ең негізгі функцияларды қарастырамыз.

Владимир: Әрине, жүктеме сынақтары туралы айту керек. Барлығы қалай екенін, Rabbit-те не болып жатқанын, JVM-де не болып жатқанын, қанша жад қажет екенін түсіну үшін платформаны нақтыға жақын жүктеме астында сынау қажет болды.

— Біз ағындық жағында бірдеңені сынап жатқанымызды нақты білмеймін, бірақ кездесулер кезінде транскодерлерде проблемалар болғаны есімде. Біз ағындарды сынап көрдік пе?

Артем: Итеративті түрде сыналған. Кездесулерді ұйымдастыру. Кездесулерді ұйымдастыру барысында шамамен 2300 JIRA билеттері болды. Бұл адамдар кездесулер жасау үшін жасаған жалпы нәрселер. Біз платформаның бөліктерін Кирилл Толкачев басқаратын кездесулер үшін жеке бетке алдық (talkkv).

Шынымды айтсам, үлкен проблемалар болған жоқ. CloudFront-те кэштеу қателерін бірнеше рет байқадық, біз оны тез шештік - біз жай ғана саясаттарды қайта конфигурацияладық. Адамдарда, сайттағы ағындық жүйелерде қателер айтарлықтай көп болды.

Конференциялар кезінде көбірек жабдықтар мен қызметтерді қамту үшін тағы бірнеше экспорттаушыларды жазуға тура келді. Кейбір жерлерде метрика үшін өзім велосипед жасауға тура келді. AV (аудио-бейне) аппараттық құралдарының әлемі өте қызғылт емес - сізде әсер ете алмайтын жабдықтың қандай да бір «API» түрі бар. Және бұл сізге қажетті ақпаратты ала алатындығыңыздан алыс. Аппараттық жабдықтаушылар шынымен баяу жұмыс істейді және олардан қалағаныңызды алу мүмкін емес. Барлығы 100-ден астам жабдық бар, олар сізге қажет нәрсені қайтармайды және сіз оғаш және артық экспорттаушыларды жазасыз, соның арқасында сіз жүйені қандай да бір жолмен жөндеуге болады.

Жабдық

— Конференциялар басталар алдында қосымша жабдықты жартылай сатып алғанымыз есімде.

Артем: Біз компьютерлер, ноутбуктер және аккумуляторлар жинағы сатып алдық. Қазіргі уақытта біз 40 минут электр жарығынсыз өмір сүре аламыз. Маусым айында Санкт-Петербургте қатты найзағай болды - сондықтан бізде осындай жарық сөніп қалды. Бұл ретте бірнеше провайдер бізге әртүрлі нүктелерден оптикалық сілтемелермен келеді. Бұл шынымен де құрылыстың 40 минуттық тоқтап қалуы, осы уақыт ішінде бізде шамдар, дыбыс, камералар және т.б. жұмыс істейді.

— Бізде интернетте де осындай оқиға бар. Студияларымыз орналасқан кеңседе біз едендер арасында қатты торды сүйретіп тастадық.

Артем: Бізде қабаттар арасында 20 Гбит талшық бар. Әрі қарай едендерде, бір жерде оптика бар, бір жерде оптика жоқ, бірақ әлі де гигабиттік арналардан гөрі азырақ - біз конференция тректері арасында оларда бейне түсіреміз. Жалпы алғанда, жеке инфрақұрылымда жұмыс істеу өте ыңғайлы, оны сайттардағы офлайн конференцияларда сирек жасай аласыз.

— JUG Ru Group-та жұмыс істемес бұрын мен бір түнде офлайн конференциялардағы аппараттық бөлмелердің қалай құрылғанын көрдім, онда сіз Grafana-да құрастырған барлық өлшемдері бар үлкен монитор бар. Енді конференция барысында кейбір қателерді түзететін және мүмкіндіктерді дамытатын әзірлеушілер тобы отыратын бас кеңсе бөлмесі бар. Бұл ретте үлкен экранда көрсетілетін бақылау жүйесі бар. Артём, Коля және басқа жігіттер отырады және бәрі құлап кетпейтініне және әдемі жұмыс істейтініне көз жеткізеді.

Қызығушылықтар мен проблемалар

— Сіз Amazon-да стриминг бар, веб-плеер бар, барлығы әртүрлі бағдарламалау тілдерінде жазылған, ақауларға төзімділік және басқа да бизнес талаптары, соның ішінде заңды тұлғаларға қолдау көрсетілетін жеке кабинет және жеке тұлғалар, және біз OAuth 2.0 арқылы біреумен біріктіре аламыз, алаяқтыққа қарсы, пайдаланушыны блоктау бар. Біз өзгерістерді динамикалық түрде енгізе аламыз, өйткені біз мұны жақсы орындадық және бәрі тексерілді.

Мен бір нәрсені бастауға қандай оғаштықтардың әсер еткенін білгім келеді. Сіз бэкенд, фронтенд жасап жатқанда, бірдеңе шығып, онымен не істеу керектігін түсінбеген кезде қандай да бір оғаш жағдайлар болды ма?

Владимир: Меніңше, бұл соңғы үш айда ғана болған сияқты. Күн сайын. Көріп отырғаныңыздай, менің шашым түгел жұлынды.

90 күн ішінде бейне платформасын жасаңыз
Владимир Красильщик 3 айдан кейін қандай да бір ойын болып, онымен не істеу керектігін ешкім түсінбеген кезде

Күнде бірдеңе болды, оны алып, шашыңды жұлып алатын немесе басқа ешкім жоқ, тек сенің қолыңнан келетінін түсінетін сәт болған. Біздің алғашқы үлкен оқиғамыз TechTrain болды. 6 маусымда таңғы сағат 2-де біз өндіріс ортасын әлі шығарған жоқпыз, Коля оны шығарып жатыр еді. Ал жеке кабинет OAuth2.0 арқылы авторизация сервері ретінде жұмыс істемеді. Біз платформаны оған қосу үшін оны OAuth2.0 провайдеріне айналдырдық. Мен 18 сағат бойы жұмыс істедім, мен компьютерге қарадым және ештеңе көрмедім, оның неге жұмыс істемейтінін түсінбедім, ал Коля менің кодты қашықтан қарап, Spring конфигурациясында қатені іздеді. , оны тапты және LC жұмыс істеді және өндірісте де .

Николай: TechTrain-тен бір сағат бұрын шығарылым болды.

Мұнда көптеген жұлдыздар тізілген. Бізде өте бақытты болды, өйткені бізде супер команда болды және барлығы оны онлайн жасау идеясымен шабыттанды. Осы үш айдың бәрінде бізді «YouTube жасаған» фактісі итермеледі. Мен шашымды жұлып алуға рұқсат бермедім, бірақ бәріне бәрі жақсы болатынын айттым, өйткені шын мәнінде бәрі бұрыннан есептелген.

Өнімділік туралы

— Бір тректе сайтта қанша адам болғанын айта аласыз ба? Қандай да бір өнімділік мәселелері болды ма?

Николай: Жоғарыда айтқанымыздай өнімділік проблемалары болған жоқ. Бір баяндамаға қатысқан адамдардың ең көп саны 1300 адам болды, бұл Heisenbug-те.

— Жергілікті көріністе қандай да бір қиындықтар болды ма? Оның барлығы қалай жұмыс істейтіні туралы диаграммалары бар техникалық сипаттама болуы мүмкін бе?

Николай: Бұл туралы кейінірек мақала жазамыз.

Сіз тіпті жергілікті түрде ағындарды жөндеуге болады. Конференциялар басталғаннан кейін бұл оңайырақ болды, өйткені біз үнемі көре алатын өндірістік ағындар пайда болды.

Владимир: Менің түсінуімше, алдыңғы қатарлы әзірлеушілер жергілікті түрде мазақпен жұмыс істеді, содан кейін алдыңғы жағындағы әзірлеушілерге шығу уақыты да қысқа болғандықтан (5 минут), сертификаттармен не болып жатқанын тексеруде қиындықтар болмайды.

— Барлығы тексеріліп, түзетілген, тіпті жергілікті жерде де. Бұл дегеніміз, біз барлық техникалық мүмкіндіктері бар мақала жазамыз, сізге көрсетеміз, барлығын диаграммалармен, қалай болғанын айтып береміз.

Владимир: Сіз оны алып, қайталай аласыз.

- 3 айдан кейін.

Нәтиже

— Бірге сипатталғанның барлығы үш айдың ішінде шағын ұжымның қолынан шыққанын ескерсек, керемет естіледі.

Николай: Үлкен команда мұны жасамас еді. Бірақ бір-бірімен өте тығыз және жақсы қарым-қатынаста болатын және келісімге келе алатын адамдардың шағын тобы. Оларда ешқандай қарама-қайшылықтар жоқ, сәулет екі күнде ойлап табылды, аяқталды және іс жүзінде өзгерген жоқ. Функция сұраулары мен өзгерістерді жинақтау тұрғысынан кіріс бизнес талаптарын өте қатаң жеңілдету бар.

— Жазғы конференциялар өтіп кеткенде, сіздің алдағы міндеттер тізіміңізде не болды?

Николай: Мысалы, несиелер. Бейнедегі жылжымалы сызықтар, көрсетілетін мазмұнға байланысты бейненің кейбір жерлерінде қалқымалы терезелер. Мысалы, спикер аудиторияға сұрақ қойғысы келеді және экранда дауыс беру пайда болады, ол спикердің өзіне дауыс беру нәтижелері бойынша кері қайтарылады. Презентация кезінде есептің лайктары, жүрекшелері, рейтингтері түріндегі әлеуметтік белсенділіктің қандай да бір түрі, осылайша сіз кері байланыс формаларына алаңдамай, қажетті уақытта кері байланысты толтыра аласыз. Басында осылай.

Сондай-ақ, ағынды және конференцияны қоспағанда, бүкіл платформаға конференциядан кейінгі күйді қосу. Бұл ойнату тізімдері (пайдаланушылар құрастырғандарды қоса), басқа өткен конференциялардағы мазмұн болуы мүмкін, біріктірілген, белгіленген, пайдаланушыға қолжетімді, сонымен қатар біздің веб-сайтта қарауға қолжетімді (live.jugru.org).

— Балалар, жауаптарыңызға көп рахмет!

Оқырмандар арасында біздің жазғы конференцияларымызға қатысқандар болса, ойыншы мен эфирден алған әсерлеріңізбен бөлісіңіз. Не ыңғайлы болды, сізді не тітіркендірді, болашақта не көргіңіз келеді?

Егер сіз платформаға қызығушылық танытсаңыз және оны «шайқаста» көргіңіз келсе, біз оны өзімізде қайта пайдаланамыз күзгі-қысқы конференциялар. Олардың кең ауқымы бар, сондықтан сізге сәйкес келетіні сөзсіз.

Ақпарат көзі: www.habr.com

пікір қалдыру