Այս գարնանը մենք հայտնվեցինք շատ ուրախ պայմաններում։ Համաճարակի պատճառով պարզ դարձավ, որ մեր ամառային համաժողովները պետք է տեղափոխվեն առցանց։ Իսկ դրանք առցանց արդյունավետ իրականացնելու համար պատրաստի ծրագրային լուծումները մեզ հարմար չէին, մենք պետք է գրեինք մերը։ Եվ մենք երեք ամիս ունեինք դա անելու համար:
Պարզ է, որ դա հուզիչ երեք ամիս էր: Բայց դրսից ամբողջովին ակնհայտ չէ. ի՞նչ է առցանց կոնֆերանսի հարթակը: Ի՞նչ մասերից է այն բաղկացած: Հետևաբար, ամառային DevOops-ի վերջին համաժողովներում ես հարցրի նրանց, ովքեր պատասխանատու էին այս առաջադրանքի համար.
- Նիկոլայ Մոլչանով - JUG Ru Group-ի տեխնիկական տնօրեն;
- Վլադիմիր Կրասիլշչիկը պրագմատիկ Java ծրագրավորող է, որն աշխատում է backend-ի վրա (նրա զեկույցները կարող եք տեսնել նաև մեր Java կոնֆերանսներում);
- Արտյոմ Նիկոնովը պատասխանատու է մեր բոլոր վիդեո հոսքերի համար:
Ի դեպ, աշուն-ձմեռ կոնֆերանսներին մենք կօգտագործենք նույն հարթակի բարելավված տարբերակը. այնքան շատ habra ընթերցողներ դեռ կլինեն դրա օգտատերերը։
Ընդհանուր պատկերը
- Ինչպիսի՞ն էր թիմի կազմը:
Նիկոլայ Մոլչանով. Մենք ունենք վերլուծաբան, դիզայներ, փորձարկող, երեք ֆրոնտ-էնդեր և հետնամաս: Եվ, իհարկե, T-աձեւ մասնագետ!
-Ընդհանուր առմամբ ինչպիսի՞ն էր գործընթացը:
Նիկոլայ. Մինչև մարտի կեսերը մենք ընդհանրապես պատրաստ ոչինչ չունեինք առցանց: Իսկ մարտի 15-ին ամբողջ օնլայն կարուսելը սկսեց պտտվել։ Մենք մի քանի շտեմարան հիմնեցինք, պլանավորեցինք, քննարկեցինք հիմնական ճարտարապետությունը և ամեն ինչ արեցինք երեք ամսում:
Սա, իհարկե, անցավ պլանավորման, ճարտարապետության, առանձնահատկությունների ընտրության, այդ հատկանիշների քվեարկության, այդ հատկանիշների քաղաքականության, դրանց նախագծման, մշակման, փորձարկման դասական փուլերով: Արդյունքում, հունիսի 6-ին մենք ամեն ինչ դուրս բերեցինք արտադրության մեջ:
- Մեզ հաջողվե՞լ է իրականացնել այն, ինչին պարտավորվել էինք:
Նիկոլայ. Քանի որ մենք այժմ մասնակցում ենք DevOops կոնֆերանսին առցանց, դա նշանակում է, որ այն աշխատեց: Ես անձամբ հավատարիմ եմ եղել գլխավորին. հաճախորդներին կբերեմ գործիք, որով նրանք կարող են առցանց կոնֆերանս կազմակերպել:
Մարտահրավերը հետևյալն էր. տվեք մեզ գործիք, որով մենք կարող ենք հեռարձակել մեր կոնֆերանսները տոմսերի սեփականատերերին:
Ամբողջ պլանավորումը բաժանված էր մի քանի փուլերի, և բոլոր հատկանիշները (մոտ 30 գլոբալ) բաժանվեցին 4 կատեգորիաների.
- ինչը մենք անպայման կանենք (մենք չենք կարող ապրել առանց նրանց),
- ինչը մենք անելու ենք երկրորդ հերթին,
- որը մենք երբեք չենք անի,
- և որը մենք երբեք, երբեք չենք անի:
Մենք պատրաստեցինք բոլոր հատկանիշները առաջին երկու կատեգորիաներից:
— Գիտեմ, որ ընդհանուր առմամբ 600 JIRA թողարկում է ստեղծվել։ Երեք ամսում 13 միկրոսերվիս եք արել, ու ես կասկածում եմ, որ դրանք գրվել են ոչ միայն Java-ով։ Դուք օգտագործել եք տարբեր տեխնոլոգիաներ, ունեք երկու Kubernetes կլաստերներ երեք հասանելիության գոտիներում և 5 RTMP հոսքեր Amazon-ում:
Այժմ դիտարկենք համակարգի յուրաքանչյուր բաղադրիչ առանձին:
Սթրիմինգ
— Սկսենք նրանից, երբ մենք արդեն ունենք վիդեո պատկեր, և այն փոխանցվում է որոշ ծառայությունների։ Արտյոմ, ասա մեզ, թե ինչպես է այս հոսքը տեղի ունենում:
Արտյոմ Նիկոնով. Մեր ընդհանուր սխեման հետևյալն է. պատկեր տեսախցիկից -> մեր կառավարման սենյակ -> տեղական RTMP սերվեր -> Amazon -> վիդեո նվագարկիչ: Ավելի մանրամասն
Ընդհանուր առմամբ, դա անելու երկու գլոբալ եղանակ կա՝ կա՛մ ապարատային, կա՛մ ծրագրային լուծումների հիման վրա: Մենք ընտրեցինք ծրագրային երթուղին, քանի որ այն ավելի հեշտ է հեռակառավարվող բարձրախոսների դեպքում: Միշտ չէ, որ հնարավոր է սարքավորում բերել այլ երկրում բարձրախոսին, սակայն ծրագրակազմը բարձրախոսին հասցնելն ավելի հեշտ և հուսալի է թվում:
Սարքավորման տեսանկյունից մենք ունենք որոշակի թվով տեսախցիկներ (մեր ստուդիաներում և հեռակառավարման բարձրախոսների մոտ), որոշակի թվով հեռակառավարման վահանակներ ստուդիայում, որոնք երբեմն պետք է վերանորոգվեն հենց սեղանի տակ հեռարձակման ժամանակ:
Այս սարքերից ազդանշանները մտնում են ձայնագրման քարտերով, մուտքային/ելքային քարտերով և ձայնային քարտերով համակարգիչներ: Այնտեղ ազդանշանները խառնվում և հավաքվում են դասավորության մեջ.
4 բարձրախոսների դասավորության օրինակ
4 բարձրախոսների դասավորության օրինակ
Այնուհետև, շարունակական հեռարձակումն իրականացվում է երեք համակարգիչների միջոցով՝ հերթով կա մեկ հիմնական մեքենա և մեկ զույգ աշխատանքային։ Առաջին համակարգիչը հավաքում է առաջին հաշվետվությունը, երկրորդը` ընդմիջումը, առաջինը` հաջորդ հաշվետվությունը, երկրորդը` հաջորդ ընդմիջումը և այլն: Իսկ հիմնական մեքենան առաջինը խառնում է երկրորդին։
Սա ստեղծում է մի տեսակ եռանկյունի, և եթե այս հանգույցներից որևէ մեկը ձախողվի, մենք կարող ենք արագ և առանց որակի կորստի շարունակել բովանդակություն մատակարարել հաճախորդներին: Նման իրավիճակ ունեինք. Համաժողովների առաջին շաբաթվա ընթացքում մենք ուղղեցինք մեկ մեքենա, միացրինք/անջատեցինք այն: Մարդիկ կարծես գոհ են մեր ճկունությունից:
Հաջորդը, համակարգիչներից հոսքերը գնում են տեղական սերվեր, որն ունի երկու խնդիր՝ երթուղել RTMP հոսքերը և ձայնագրման կրկնօրինակումներ: Այսպիսով, մենք ունենք բազմաթիվ ձայնագրման կետեր: Այնուհետև տեսահոսքերը ուղարկվում են մեր համակարգի այն մասին, որը կառուցված է Amazon SaaS ծառայությունների վրա: Մենք օգտագործում ենք
Նիկոլայ. Ի՞նչ է տեղի ունենում այնտեղ, մինչև տեսանյութը հասնի հանդիսատեսին: Պետք է ինչ-որ կերպ կտրել, չէ՞:
Արտյոմ. Մենք սեղմում ենք տեսանյութը մեր կողմից և ուղարկում MediaLive: Մենք այնտեղ գործարկում ենք տրանսկոդերներ։ Նրանք տեսանյութերն իրական ժամանակում փոխակերպում են մի քանի բանաձեւի, որպեսզի մարդիկ կարողանան դրանք դիտել իրենց հեռախոսներով, երկրում վատ ինտերնետի միջոցով և այլն: Այնուհետև այս հոսքերը կտրվում են
— Մենք օգտագործում ենք 1080p լուծում:
Արտյոմ. Մեր տեսահոլովակի լայնությունը նույնն է, ինչ 1080p - 1920 պիքսել, իսկ բարձրությունը մի փոքր ավելի քիչ է, նկարն ավելի երկարաձգված է, դրա համար կան պատճառներ:
Խաղացող
— Արտյոմը նկարագրել է, թե ինչպես է տեսանյութը հայտնվում հոսքերում, ինչպես է այն բաշխվում տարբեր երգացանկերի մեջ՝ էկրանի տարբեր լուծաչափերի համար, կտրատվում մասերի և հայտնվում նվագարկչի մեջ: Կոլյա, հիմա ասա, թե սա ինչ խաղացող է, ինչպես է այն սպառում հոսքը, ինչու՞ HLS:
Նիկոլայ. Մենք ունենք նվագարկիչ, որը կարող են դիտել կոնֆերանսի բոլոր դիտողները:
Ըստ էության, սա գրադարանի շուրջը փաթաթված է
Սա արմատային գործառույթն է, ուստի այն իրականացվել է գրեթե առաջինը: Եվ հետո ամեն ինչ աճեց դրա շուրջ:
Փաստորեն, թույլտվության միջոցով նվագարկիչը backend-ից ստանում է երգացանկ՝ ժամանակի և որակի հետ փոխկապակցված հատվածների հղումներով, ներբեռնում է անհրաժեշտները և ցուցադրում դրանք օգտատիրոջը՝ կատարելով որոշ «կախարդանք» ճանապարհին:
Ժամանակացույցի օրինակ
— Խաղացողի մեջ ներկառուցված է կոճակ՝ բոլոր հաշվետվությունների ժամանակացույցը ցուցադրելու համար...
Նիկոլայ. Այո, մենք անմիջապես լուծեցինք օգտատերերի նավիգացիայի խնդիրը։ Ապրիլի կեսերին մենք որոշեցինք, որ մեր կոնֆերանսներից յուրաքանչյուրը չենք հեռարձակելու առանձին կայքէջով, այլ կհամատեղենք ամեն ինչ մեկում: Որպեսզի Full Pass տոմսերի օգտվողները կարողանան ազատորեն անցնել տարբեր կոնֆերանսների միջև՝ և՛ ուղիղ հեռարձակումներ, և՛ անցյալի ձայնագրություններ:
Եվ որպեսզի օգտատերերի համար հեշտացնենք նավարկելու ընթացիկ հոսքը և անցումը հետքերի միջև, մենք որոշեցինք ստեղծել «Ամբողջ հեռարձակում» կոճակը և հորիզոնական հաշվետվության քարտեր՝ հետքերի և հաշվետվությունների միջև անցնելու համար: Առկա է ստեղնաշարի կառավարում։
- Սրա հետ կապված տեխնիկական դժվարություններ եղե՞լ են:
Նիկոլայ. Նրանք ունեին ոլորման սանդղակ, որի վրա նշված էին տարբեր հաշվետվությունների մեկնարկային կետերը։
— Ի վերջո, դուք կիրառե՞լ եք այս նշանները ոլորման տողում, նախքան YouTube-ը նման բան անելը:
Արտյոմ. Նրանք այն ժամանակ բետա տարբերակով ունեին: Թվում է, թե սա բավականին բարդ հատկություն է, քանի որ նրանք մասնակիորեն փորձարկել են այն օգտվողների հետ անցած տարվա ընթացքում: Իսկ այժմ այն հասել է վաճառքի։
Նիկոլայ. Բայց մենք իրականում այն ավելի արագ վաճառեցինք: Անկեղծ ասած, այս պարզ հատկանիշի հետևում խաղացողի ներսում հսկայական քանակությամբ հետնամասեր, ճակատներ, հաշվարկներ և մաթեմատիկա կան:
Դիմային մաս
— Եկեք պարզենք, թե ինչպես է այս բովանդակությունը, որը մենք ցուցադրում ենք (խոսքի քարտ, խոսնակներ, կայք, ժամանակացույց) հայտնվում առաջին մասում:
Վլադիմիր Կրասիլշչիկ. Մենք ունենք մի քանի ներքին ՏՏ համակարգեր։ Կա համակարգ, որտեղ մուտքագրված են բոլոր հաշվետվությունները և բոլոր խոսնակները։ Գործընթաց կա, որով բանախոսը մասնակցում է կոնֆերանսի: Բանախոսը դիմում է ներկայացնում, համակարգը գրավում է այն, հետո կա որոշակի խողովակաշար, ըստ որի ստեղծվում է հաշվետվությունը։
Ահա թե ինչպես է բանախոսը տեսնում խողովակաշարը
Այս համակարգը մեր ներքին զարգացումն է։
Հաջորդը, դուք պետք է կազմեք ժամանակացույց անհատական հաշվետվություններից: Ինչպես գիտեք, սա NP-դժվար խնդիր է, բայց մենք ինչ-որ կերպ լուծում ենք այն: Դա անելու համար մենք գործարկում ենք մեկ այլ բաղադրիչ, որը ստեղծում է ժամանակացույց և այն վերբեռնում երրորդ կողմի Contentful ամպային ծառայության մեջ: Այնտեղ ամեն ինչ նման է սեղանի, որի մեջ կան համաժողովի օրեր, օրերին՝ ժամանակային հատվածներ, իսկ սլոտներում՝ հաշվետվություններ, ընդմիջումներ կամ հովանավորչական գործողություններ։ Այսպիսով, բովանդակությունը, որը մենք տեսնում ենք, գտնվում է երրորդ կողմի ծառայության մեջ: Իսկ խնդիրը կայք հասցնելն է։
Թվում է, թե կայքը պարզապես էջ է խաղացողի հետ, և այստեղ բարդ բան չկա: Միայն թե դա այդպես չէ: Այս էջի հետևում գտնվող backend-ը գնում է Contentful, այնտեղից ստանում է ժամանակացույցը, գեներացնում է որոշ օբյեկտներ և ուղարկում այն ճակատային մաս: Օգտագործելով վեբսոկետ կապ, որը ստեղծում է մեր պլատֆորմի յուրաքանչյուր հաճախորդ, մենք նրան ուղարկում ենք ժամանակացույցի թարմացում backend-ից մինչև frontend:
Իրական դեպք. բանախոսը փոխեց աշխատանքը հենց համաժողովի ժամանակ: Մենք պետք է փոխենք նրա գործատու ընկերության կրծքանշանը: Ինչպե՞ս է դա տեղի ունենում հետնամասից: Թարմացումն ուղարկվում է բոլոր հաճախորդներին websocket-ի միջոցով, այնուհետև ֆրոնտենդն ինքն է վերագծում ժամանակացույցը: Այս ամենը տեղի է ունենում անխափան: Ամպային ծառայության և մեր մի քանի բաղադրիչների համադրությունը մեզ հնարավորություն է տալիս ստեղծել այս ամբողջ բովանդակությունը և տրամադրել այն առջևում:
Նիկոլայ. Այստեղ կարևոր է հստակեցնել, որ մեր կայքը դասական SPA հավելված չէ: Սա և՛ դասավորության վրա հիմնված, մատուցված կայք է, և՛ SPA: Google-ը իրականում այս կայքը տեսնում է որպես HTML-ի ցուցադրում: Սա լավ է SEO-ի և օգտագործողին բովանդակություն մատուցելու համար: Այն չի սպասում 1,5 մեգաբայթ JavaScript-ի բեռնմանը, նախքան էջը տեսնելը, նա անմիջապես տեսնում է արդեն իսկ ցուցադրված էջը, և դուք դա զգում եք ամեն անգամ, երբ փոխում եք զեկույցը։ Ամեն ինչ տեղի է ունենում կես վայրկյանում, քանի որ բովանդակությունն արդեն պատրաստ է և տեղադրված է ճիշտ տեղում։
— Եկեք գիծ քաշենք վերը նշված բոլորի տակ՝ թվարկելով տեխնոլոգիաները: Tyoma-ն ասաց, որ մենք ունենք Amazon-ի 5 հոսք, և այնտեղ վիդեո և ձայն ենք առաքում։ Մենք այնտեղ ունենք bash սկրիպտներ, դրանք օգտագործում ենք գործարկելու և կարգավորելու համար...
Արտյոմ. Դա տեղի է ունենում AWS API-ի միջոցով, այնտեղ կան շատ ավելի շատ տեխնիկական կողմնակի ծառայություններ: Մենք բաժանել ենք մեր պարտականությունները, որպեսզի ես հանձնեմ
— Այնուհետև այս ամենը մտնում է նվագարկիչ՝ օգտագործելով backend համակարգը: Մեր նվագարկիչում ունենք TypeScript, React, Next.JS: Իսկ հետնամասում մենք ունենք մի քանի ծառայություններ C#-ում, Java-ում, Spring Boot-ում և Node.js-ում: Այս ամենը տեղադրված է Kubernetes-ի միջոցով՝ օգտագործելով Yandex.Cloud ենթակառուցվածքը:
Ուզում եմ նաև նշել, որ երբ պետք էր ծանոթանալ հարթակին, պարզվեց, որ հեշտ էր՝ բոլոր պահեստները գտնվում են GitLab-ում, ամեն ինչ լավ անվանված է, թեստերը գրված են, կա փաստաթղթավորում։ Այսինքն՝ նույնիսկ արտակարգ ռեժիմով նման բաներ են հոգացել։
Բիզնեսի սահմանափակումներ և վերլուծություն
— Մենք թիրախավորել ենք 10 օգտատերերի՝ հիմնվելով բիզնեսի պահանջների վրա: Ժամանակն է խոսելու այն բիզնեսի սահմանափակումների մասին, որոնք մենք ունեինք։ Մենք պետք է ապահովեինք բարձր ծանրաբեռնվածություն, ապահովեինք անձնական տվյալների պահպանման օրենքի պահպանումը։ Իսկ ուրիշ ի՞նչ։
Նիկոլայ. Սկզբում մենք սկսել ենք տեսանյութերի պահանջներից։ Ամենակարևորը վիդեո պահեստավորումն է ամբողջ աշխարհում՝ հաճախորդին արագ առաքելու համար: Մյուսները ներառում են 1080p լուծաչափ, ինչպես նաև հետադարձ շարժում, որը շատ ուրիշներ չեն իրականացնում կենդանի ռեժիմում: Ավելի ուշ մենք ավելացրինք 2x արագությունը միացնելու հնարավորությունը, որի օգնությամբ դուք կարող եք «հասցնել» ուղիղ եթերում և շարունակել դիտել կոնֆերանսը իրական ժամանակում: Եվ ճանապարհին հայտնվեց ժամանակացույցի նշագրման գործառույթը: Գումարած, մենք պետք է հանդուրժող լինեինք սխալների նկատմամբ և դիմակայեինք 10 միացումների բեռին: Հետին պլանի տեսանկյունից սա մոտավորապես 000 կապ է՝ բազմապատկված 10 հարցումով՝ յուրաքանչյուր էջի թարմացման համար: Եվ սա արդեն 000 RPS/վրկ է: Բավականին մի քիչ:
— Գործընկերների առցանց տաղավարներով «վիրտուալ ցուցահանդեսի» համար այլ պահանջներ կային:
Նիկոլայ. Այո, դա պետք է արվեր բավականին արագ և համընդհանուր: Յուրաքանչյուր համաժողովի համար մենք ունեինք մինչև 10 գործընկեր ընկերություն, և դրանք բոլորը պետք է ավարտվեին մեկ-երկու շաբաթվա ընթացքում: Այնուամենայնիվ, դրանց բովանդակությունը փոքր-ինչ տարբերվում է ձևաչափով: Բայց ստեղծվել է որոշակի ձևանմուշային շարժիչ, որը հավաքում է այս էջերը անմիջապես՝ գործնականում առանց հետագա զարգացման:
— Կային նաև պահանջներ իրական ժամանակի դիտումների և վիճակագրության վերլուծության համար: Ես գիտեմ, որ մենք օգտագործում ենք Պրոմեթևսը դրա համար, բայց ավելի մանրամասն ասեք՝ ի՞նչ պահանջներ ենք բավարարում վերլուծության համար, և ինչպե՞ս է դա իրականացվում:
Նիկոլայ. Սկզբում մենք ունենք մարքեթինգային պահանջներ A/B թեստավորման և տեղեկատվության հավաքագրման համար, որպեսզի հասկանանք, թե ինչպես ճիշտ մատուցել լավագույն բովանդակությունը հաճախորդին ապագայում: Կան նաև պահանջներ գործընկերների գործունեության և ձեր տեսած վերլուծությունների համար (այցելությունների հաշվիչ): Ամբողջ տեղեկատվությունը հավաքվում է իրական ժամանակում:
Մենք կարող ենք այս տեղեկատվությունը ագրեգացված ձևով տրամադրել նույնիսկ բանախոսներին. քանի մարդ է ձեզ հետևում ժամանակի որոշակի պահին: Միևնույն ժամանակ, 152 Դաշնային օրենքին համապատասխանելու համար ձեր անձնական հաշիվը և անձնական տվյալները որևէ կերպ չեն հետևվում:
Պլատֆորմն արդեն ունի մարքեթինգային գործիքներ և մեր չափումներ՝ իրական ժամանակում օգտատերերի ակտիվությունը չափելու համար (ովքեր դիտել են հաշվետվության որ վայրկյանը), որպեսզի ստեղծվեն հաշվետվություններին հաճախելիության գրաֆիկներ: Այս տվյալների հիման վրա կատարվում են հետազոտություններ, որոնք ավելի լավը կդարձնեն հաջորդ համաժողովները։
Խարդախություն
- Մենք ունե՞նք խարդախության դեմ պայքարի մեխանիզմներ։
Նիկոլայ. Բիզնեսի տեսանկյունից սեղմ ժամկետի պատճառով ի սկզբանե խնդիր դրված չէր անհարկի կապերը անմիջապես արգելափակելու համար: Եթե երկու օգտատեր մուտք են գործել նույն հաշվի տակ, նրանք կարող են դիտել բովանդակությունը: Բայց մենք գիտենք, թե քանի միաժամանակյա դիտում է եղել մեկ աքաունթից։ Եվ մի քանի առանձնապես չարամիտ խախտողների արգելեցինք։
Վլադիմիր. Ի պատիվ իրեն, արգելված օգտատերերից մեկը հասկացավ, թե ինչու է դա տեղի ունեցել։ Եկավ, ներողություն խնդրեց ու խոստացավ տոմս գնել։
— Որպեսզի այս ամենը տեղի ունենա, դուք պետք է ամբողջությամբ հետևեք բոլոր օգտատերերին մուտքից մինչև ելք, միշտ իմանաք, թե ինչ են նրանք անում: Ինչպե՞ս է աշխատում այս համակարգը:
Վլադիմիր. Ես կցանկանայի խոսել վերլուծության և վիճակագրության մասին, որոնք մենք այնուհետև վերլուծում ենք հաշվետվության հաջողության համար կամ կարող ենք տրամադրել գործընկերներին: Բոլոր հաճախորդները միացված են վեբ-սոկետային կապի միջոցով որոշակի հետին կլաստերի հետ: Այն կանգնած է այնտեղ
Նույն տեղեկատվությունը պահվում է
Նիկոլայ. Բայց միևնույն ժամանակ մենք նաև իրական ժամանակի տվյալներ ենք ստանում Պրոմեթևսից։ Այն դրված է Kubernetes-ի բոլոր ծառայությունների դեմ, հենց Kubernetes-ի դեմ: Այն հավաքում է բացարձակապես ամեն ինչ, և Grafana-ի հետ մենք կարող ենք իրական ժամանակում կառուցել ցանկացած գրաֆիկ:
Վլադիմիր. Մի կողմից, մենք ներբեռնում ենք սա OLAP-ի հետագա մշակման համար: Իսկ OLTP-ի համար հավելվածը ներբեռնում է ամբողջը Պրոմեթևս, Գրաֆանա և գրաֆիկները նույնիսկ համընկնում են:
- Սա այն դեպքն է, երբ գրաֆիկները համընկնում են:
Դինամիկ փոփոխություններ
- Պատմեք մեզ, թե ինչ դինամիկ փոփոխություններ են տեղի ունենում. եթե զեկույցը չեղարկվել է մեկնարկից 6 րոպե առաջ, ո՞րն է գործողությունների շղթան: Ո՞ր խողովակաշարն է աշխատում:
Վլադիմիր. Խողովակաշարը շատ պայմանական է։ Կան մի քանի հնարավորություններ. Առաջինն այն է, որ ժամանակացույցի ստեղծման ծրագիրն աշխատեց և փոխեց ժամանակացույցը: Փոփոխված ժամանակացույցը վերբեռնվում է Contentful-ում: Որից հետո backend-ը հասկանում է, որ այս կոնֆերանսի համար փոփոխություններ կան Contentful-ում, վերցնում է այն և վերակառուցում: Ամեն ինչ հավաքվում և ուղարկվում է վեբսոկետի միջոցով:
Երկրորդ հնարավորությունը, երբ ամեն ինչ տեղի է ունենում կտրուկ տեմպերով. խմբագիրը ձեռքով փոխում է տեղեկատվությունը Contentful-ում (հղում դեպի Telegram, խոսնակի ներկայացում և այլն) և նույն տրամաբանությունն է աշխատում, ինչ առաջին անգամ:
Նիկոլայ. Ամեն ինչ տեղի է ունենում առանց էջը թարմացնելու։ Բոլոր փոփոխությունները կատարվում են բացարձակապես անխափան հաճախորդի համար: Նույնը վերաբերում է հաշվետվությունների փոխանակմանը: Երբ ժամանակը գալիս է, զեկույցը և ինտերֆեյսը փոխվում են:
Վլադիմիր. Բացի այդ, ժամանակացույցում կան հաշվետվությունների մեկնարկի ժամանակային ընդհատումներ: Հենց սկզբում ոչինչ չկա։ Եվ եթե մկնիկը անցկացնեք կարմիր շերտի վրայով, ապա ինչ-որ պահի հեռարձակման տնօրենի շնորհիվ կտրվածքներ կհայտնվեն: Ռեժիսորը սահմանում է հեռարձակման ճիշտ սկիզբը, հետին պլանը վերցնում է այս փոփոխությունը, հաշվարկում է ամբողջ թրեքի շնորհանդեսների մեկնարկի և ավարտի ժամերը՝ համաձայն կոնֆերանսի ժամանակացույցի, այն ուղարկում է մեր հաճախորդներին, և նվագարկիչը նկարում է կտրվածքներ: Այժմ օգտվողը կարող է հեշտությամբ նավարկել դեպի զեկույցի սկիզբը և վերջը: Դա խիստ բիզնես պահանջ էր, շատ հարմար և օգտակար։ Դուք ժամանակ չեք կորցնում հաշվետվության իրական մեկնարկի ժամանակը գտնելու համար: Եվ երբ մենք նախադիտում անենք, դա բացարձակապես հիանալի կլինի:
Տեղակայում
- Կցանկանայի հարցնել տեղակայման մասին: Կոլյան և թիմը սկզբում շատ ժամանակ են ծախսել, որպեսզի ստեղծեն ամբողջ ենթակառուցվածքը, որտեղ ամեն ինչ զարգանում է մեզ համար: Ասա ինձ, ինչի՞ց է այդ ամենը պատրաստված:
Նիկոլայ. Տեխնիկական տեսանկյունից մենք ի սկզբանե պահանջ ունեինք, որ ապրանքը հնարավորինս վերացական լինի ցանկացած վաճառողի կողմից: Եկեք AWS՝ Terraform-ի սցենարներ պատրաստելու հատուկ AWS-ից, կամ մասնավորապես Yandex-ից, կամ Azure-ից և այլն: իսկապես չէր տեղավորվում: Մենք ինչ-որ պահի պետք է տեղափոխվեինք ինչ-որ տեղ:
Առաջին երեք շաբաթվա ընթացքում մենք անընդհատ ուղիներ էինք փնտրում դա ավելի լավ անելու համար: Արդյունքում մենք եկանք այն եզրակացության, որ Kubernetes-ն այս դեպքում մեր ամեն ինչն է, քանի որ այն թույլ է տալիս մեզ ստեղծել ավտոմատ մասշտաբային ծառայություններ, ավտոմատ տեղակայում և դուրս բերել գրեթե բոլոր ծառայությունները: Բնականաբար, բոլոր ծառայությունները պետք է վերապատրաստվեին Kubernetes-ի, Docker-ի հետ աշխատելու համար, և թիմը նույնպես պետք է սովորեր:
Մենք ունենք երկու կլաստեր: Փորձարկում և արտադրություն: Նրանք բացարձակապես նույնական են ապարատային և պարամետրերի առումով: Մենք ներդրում ենք ենթակառուցվածքը որպես ծածկագիր: Բոլոր ծառայություններն ավտոմատ կերպով դուրս են բերվում երեք միջավայրում՝ ֆունկցիաների ճյուղերից, հիմնական ճյուղերից, փորձնական ճյուղերից և GitLab-ից՝ օգտագործելով ավտոմատ խողովակաշար: Սա առավելագույնս ինտեգրված է GitLab-ին, առավելագույնս ինտեգրված է Elastic-ի, Prometheus-ի հետ:
Մենք հնարավորություն ենք ստանում արագորեն (հետին պլանի համար 10 րոպեի ընթացքում, ճակատային մասի համար՝ 5 րոպեի ընթացքում) փոփոխություններ կատարել ցանկացած միջավայրում՝ բոլոր թեստերով, ինտեգրումներով, գործարկվող ֆունկցիոնալ թեստերով, շրջակա միջավայրի վրա ինտեգրման թեստերով, ինչպես նաև փորձարկելով բեռնվածության թեստեր: թեստային միջավայր մոտավորապես նույնն է, ինչ մենք ուզում ենք ստանալ արտադրության մեջ:
Թեստերի մասին
— Դուք գրեթե ամեն ինչ փորձարկում եք, դժվար է հավատալ, թե ինչպես եք գրել ամեն ինչ։ Կպատմե՞ք backend-ի թեստերի մասին՝ որքանո՞վ է ամեն ինչ ծածկված, ի՞նչ թեստեր։
Վլադիմիր. Գրվել են երկու տեսակի թեստեր. Առաջինը բաղադրիչների թեստերն են: Վերելակների մակարդակի փորձարկումներ ամբողջ զսպանակի կիրառման և հիմքի վրա
Մոտավորապես նույն բանն իրականացվում է այսպես կոչված ինտեգրացիոն թեստերում, որոնք իրականում աշխատում են շրջակա միջավայրի վրա։ Իրականում, երբ արտադրությունում հաջորդ տեղակայումը սկսվի, արտադրության մեջ գործում են նաև իրական հիմնական սցենարներ: Նույն մուտքը, տոմսեր պահանջելը, CloudFront մուտքի խնդրանքը, ստուգելը, որ հոսքը իսկապես կապվում է իմ թույլտվությունների հետ, ստուգելով տնօրենի ինտերֆեյսը:
Այս պահին ես ունեմ մոտ 70 բաղադրիչ թեստ և մոտ 40 ինտեգրացիոն թեստ: Ծածկույթը շատ մոտ է 95%-ին։ Սա բաղադրիչների համար է, ավելի քիչ՝ ինտեգրացիոնների համար, պարզապես այդքան էլ անհրաժեշտ չէ: Հաշվի առնելով, որ նախագիծը ներառում է բոլոր տեսակի կոդերի ստեղծում, սա շատ լավ ցուցանիշ է: Ուրիշ տարբերակ չկար անել այն, ինչ երեք ամսում արեցինք։ Որովհետև, եթե մենք փորձարկեինք ձեռքով, հնարավորություններ տալով մեր փորձարկողին, և նա գտներ սխալներ և դրանք վերադարձներ մեզ շտկելու համար, ապա ծածկագիրը վրիպազերծելու այս շրջագայությունը շատ երկար կլիներ, և մենք ոչ մի վերջնաժամկետ չենք պահպանի:
Նիկոլայ. Պայմանականորեն, ամբողջ պլատֆորմի վրա ռեգրեսիա իրականացնելու համար ինչ-որ ֆունկցիա փոխելիս պետք է երկու օր նստել և խոթել ամենուր:
Վլադիմիր. Հետևաբար, մեծ հաջողություն է, որ երբ ես գնահատում եմ որևէ հատկանիշ, ասում եմ, որ ինձ 4 օր է պետք երկու պարզ գրչի և 1 վեբ վարդակի համար, Կոլյան դա թույլ է տալիս։ Նա արդեն սովոր է, որ այս 4 օրը ներառում է 2 տեսակի թեստ, հետո, ամենայն հավանականությամբ, կստացվի։
Նիկոլայ. Ես էլ ունեմ 140 թեստ գրված՝ բաղադրիչ + ֆունկցիոնալ, որոնք նույն բանն են անում։ Նույն բոլոր սցենարները փորձարկվում են արտադրության, փորձարկման և արտադրության մեջ: Մենք նաև վերջերս ավելացրել ենք ֆունկցիոնալ հիմնական UI թեստեր: Այս կերպ մենք ծածկում ենք ամենահիմնական ֆունկցիոնալությունը, որը կարող է քանդվել:
Վլադիմիր. Իհարկե, արժե խոսել բեռի թեստերի մասին: Հարկավոր էր փորձարկել հարթակը իրականին մոտ բեռի տակ, որպեսզի հասկանանք, թե ինչպես է ամեն ինչ, ինչ է կատարվում Rabbit-ի հետ, ինչ է կատարվում JVM-ների հետ, իրականում որքան հիշողություն է անհրաժեշտ։
— Ես հստակ չգիտեմ, թե արդյոք մենք ինչ-որ բան փորձարկում ենք հոսքի կողմից, բայց ես հիշում եմ, որ տրանսկոդերի հետ կապված խնդիրներ կային, երբ մենք հանդիպումներ անցկացրինք: Մենք փորձարկե՞լ ենք հոսքերը:
Արտյոմ. Փորձարկվել է կրկնվող: Հանդիպումների կազմակերպում. Հանդիպումների կազմակերպման գործընթացում կար մոտավորապես 2300 JIRA տոմս: Սրանք պարզապես ընդհանուր բաներ են, որոնք մարդիկ արել են հանդիպումներ կազմակերպելու համար: Մենք հարթակի մասերը վերցրեցինք առանձին էջ՝ հանդիպումների համար, որը վարում էր Կիրիլ Տոլկաչևը (
Անկեղծ ասած, մեծ խնդիրներ չեն եղել։ Բառացիորեն մի քանի անգամ մենք բռնեցինք CloudFront-ի քեշավորման սխալները, մենք այն բավականին արագ լուծեցինք. մենք պարզապես վերակազմավորեցինք քաղաքականությունը: Կայքի հոսքային համակարգերում մարդկանց մոտ զգալիորեն ավելի շատ սխալներ կային:
Համաժողովների ժամանակ ես ստիպված էի գրել ևս մի քանի արտահանողների՝ ավելի շատ սարքավորումներ և ծառայություններ լուսաբանելու համար: Որոշ տեղերում ես ստիպված էի սեփական հեծանիվ պատրաստել միայն չափումների համար: AV (աուդիո-վիդեո) սարքավորումների աշխարհը այնքան էլ վարդագույն չէ. դուք ունեք սարքավորումների ինչ-որ «API», որի վրա պարզապես չեք կարող ազդել: Եվ դա հեռու է այն փաստից, որ դուք կկարողանաք ստանալ ձեզ անհրաժեշտ տեղեկատվությունը: Սարքավորումների վաճառողները իսկապես դանդաղ են աշխատում, և գրեթե անհնար է նրանցից ստանալ այն, ինչ ցանկանում եք: Ընդհանուր առմամբ 100-ից ավելի սարքաշար կա, նրանք հետ չեն տալիս այն, ինչ ձեզ հարկավոր է, և դուք գրում եք տարօրինակ և ավելորդ արտահանողներ, որոնց շնորհիվ կարող եք գոնե ինչ-որ կերպ կարգաբերել համակարգը:
սարքավորում
— Հիշում եմ, թե ինչպես մինչ համաժողովների մեկնարկը մենք մասամբ գնեցինք լրացուցիչ սարքավորումներ։
Արտյոմ. Մենք գնեցինք համակարգիչներ, դյուրակիր համակարգիչներ և մարտկոցներ: Այս պահին մենք կարող ենք առանց էլեկտրականության ապրել 40 րոպե։ Հունիսին Սանկտ Պետերբուրգում սաստիկ ամպրոպներ եղան, այնպես որ մենք ունեցանք այդպիսի անջատում: Միևնույն ժամանակ, մի քանի պրովայդերներ մեզ մոտ են գալիս տարբեր կետերից օպտիկական հղումներով։ Սա իսկապես 40 րոպե շենքի պարապուրդ է, որի ընթացքում մենք կունենանք լույսեր, ձայն, տեսախցիկներ և այլն կաշխատեն:
— Մենք նման պատմություն ունենք համացանցի հետ կապված։ Գրասենյակում, որտեղ գտնվում են մեր ստուդիաները, մենք հատակների միջև կատաղի ցանց ենք քաշել։
Արտյոմ. Մենք ունենք 20 Գբիթ մանրաթել հատակների միջև: Այնուհետև հարկերի երկայնքով, ինչ-որ տեղ կա օպտիկա, ինչ-որ տեղ չկա օպտիկա, բայց այնուամենայնիվ կան ավելի քիչ ալիքներ, քան գիգաբիթները. Ընդհանուր առմամբ, շատ հարմար է աշխատել ձեր սեփական ենթակառուցվածքի վրա, դուք հազվադեպ կարող եք դա անել կայքերում անցանց կոնֆերանսների ժամանակ:
— Նախքան JUG Ru Group-ում աշխատելը, ես տեսա, թե ինչպես են անցանց կոնֆերանսների ապարատային սենյակները տեղադրվում մեկ գիշերվա ընթացքում, որտեղ կար մի մեծ մոնիտոր՝ բոլոր չափանիշներով, որոնք դուք կառուցում եք Grafana-ում: Այժմ կա նաև շտաբի սենյակ, որտեղ նստած է մշակողների թիմը, որը կոնֆերանսի ընթացքում շտկում է որոշ սխալներ և զարգացնում գործառույթներ։ Միաժամանակ գործում է մոնիտորինգի համակարգ, որը ցուցադրվում է մեծ էկրանին։ Արտյոմը, Կոլյան և մյուս տղաները նստում են և համոզվում, որ այդ ամենը չընկնի և գեղեցիկ աշխատի։
Հետաքրքրություններ և խնդիրներ
— Դուք լավ խոսեցիք այն մասին, որ մենք ունենք սթրիմինգ Amazon-ի հետ, կա վեբով խաղացող, ամեն ինչ գրված է ծրագրավորման տարբեր լեզուներով, ապահովված են սխալների հանդուրժողականություն և բիզնեսի այլ պահանջներ, ներառյալ անձնական հաշիվ, որն աջակցվում է իրավաբանական անձանց և անհատներ, և մենք կարող ենք ինտեգրվել OAuth 2.0 օգտագործող մեկի հետ, կա խարդախության դեմ, օգտատերերի արգելափակում: Մենք կարող ենք փոփոխություններ կատարել դինամիկ կերպով, քանի որ մենք դա լավ արեցինք, և այդ ամենը փորձարկված է:
Ինձ հետաքրքրում է իմանալ, թե ինչ տարօրինակություններ են եղել ինչ-որ բան սկսելու մեջ: Եղե՞լ են տարօրինակ իրավիճակներ, երբ դուք մշակում էիք հետնամաս, ճակատ, ինչ-որ խելագար բան ստացվեց, և դուք չեք հասկացել, թե ինչ անել դրա հետ:
Վլադիմիր. Ինձ թվում է, որ դա տեղի է ունեցել միայն վերջին երեք ամիսների ընթացքում։ Ամեն օր. Ինչպես տեսնում եք, իմ բոլոր մազերը քաշվել են։
Վլադիմիր Կրասիլշչիկը 3 ամիս անց, երբ ինչ-որ խաղ ստացվեց, և ոչ ոք չհասկացավ, թե ինչ անել դրա հետ
Ամեն օր նման բան էր լինում, երբ այնպիսի պահ կար, երբ վերցնում ես ու մազերդ պոկում, կամ հասկանում ես, որ ուրիշ ոչ ոք չկա, և միայն դու կարող ես դա անել։ Մեր առաջին մեծ իրադարձությունը TechTrain-ն էր: Հունիսի 6-ին ժամը 2-ին մենք դեռ չէինք գլորել արտադրական միջավայրը, Կոլյան էր գլորում։ Եվ անձնական հաշիվը չի աշխատել որպես OAuth2.0 օգտագործող թույլտվության սերվեր: Մենք այն վերածեցինք OAuth2.0 մատակարարի՝ հարթակը դրան միացնելու համար: Ես աշխատել էի երևի 18 ժամ անընդմեջ, նայեցի համակարգչին և ոչինչ չտեսա, չհասկացա, թե ինչու այն չի աշխատում, և Կոլյան հեռակա կարգով նայեց իմ կոդը, Spring կոնֆիգուրացիայի մեջ սխալ փնտրեց։ , գտավ այն, և LC-ն սկսեց աշխատել, և արտադրության մեջ նույնպես:
Նիկոլայ. Իսկ TechTrain-ից մեկ ժամ առաջ տեղի ունեցավ թողարկումը։
Այստեղ շատ աստղեր էին դասավորված: Մենք չափազանց բախտավոր էինք, քանի որ ունեինք սուպեր թիմ, և բոլորը ոգեշնչված էին դա առցանց անելու գաղափարով: Այս երեք ամիսների ընթացքում մենք առաջնորդվեցինք այն փաստով, որ մենք «ստեղծեցինք YouTube»: Ես ինձ թույլ չտվեցի մազերս պոկել, բայց բոլորին ասացի, որ ամեն ինչ կստացվի, քանի որ իրականում ամեն ինչ վաղուց հաշվարկված էր։
Կատարման մասին
— Կարո՞ղ եք ինձ ասել, թե քանի մարդ է եղել կայքում մեկ ուղու վրա: Կա՞ն կատարողականի հետ կապված խնդիրներ:
Նիկոլայ. Կատարման հետ կապված խնդիրներ չեն եղել, ինչպես արդեն ասացինք։ Մեկ զեկույցին ներկա մարդկանց առավելագույն թիվը եղել է 1300 մարդ, սա Heisenbug-ում է:
- Տեղական դիտման հետ կապված խնդիրներ եղե՞լ են: Իսկ հնարավո՞ր է տեխնիկական նկարագրություն ունենալ գծապատկերներով, թե ինչպես է այդ ամենը աշխատում։
Նիկոլայ. Այս մասին ավելի ուշ հոդված կպատրաստենք:
Դուք նույնիսկ կարող եք վրիպազերծել հոսքերը տեղում: Կոնֆերանսները սկսելուց հետո այն ավելի հեշտացավ, քանի որ հայտնվեցին արտադրական հոսքեր, որոնք մենք կարող ենք անընդհատ դիտել:
Վլադիմիր. Ինչպես հասկացա, ֆրոնտ-էնդի ծրագրավորողներն աշխատում էին լոկալ ծաղրերով, և այնուհետև, քանի որ առջևի մշակողների վրա տարածելու ժամանակը նույնպես կարճ է (5 րոպե), խնդիրներ չկան ստուգելու, թե ինչ է կատարվում վկայականների հետ:
— Ամեն ինչ փորձարկված և կարգաբերված է, նույնիսկ տեղական: Սա նշանակում է, որ մենք հոդված կգրենք բոլոր տեխնիկական հատկանիշներով, ցույց կտանք, կպատմենք ամեն ինչ գծապատկերներով, թե ինչպես է դա եղել:
Վլադիմիր. Դուք կարող եք վերցնել այն և կրկնել այն:
- 3 ամսից։
Լրիվ
— Միասին նկարագրված ամեն ինչ հիանալի է թվում, եթե հաշվի առնենք, որ դա արվել է փոքր թիմի կողմից երեք ամսում։
Նիկոլայ. Մեծ թիմը դա չէր անի: Բայց մարդկանց մի փոքր խումբ, ովքեր բավականին սերտ ու լավ են շփվում միմյանց հետ և կարող են համաձայնության գալ: Դրանք հակասություններ չունեն, ճարտարապետությունը հորինվել է երկու օրում, վերջնական տեսքի է բերվել և փաստացի չի փոխվել։ Գոյություն ունի մուտքային բիզնեսի պահանջների շատ խիստ դյուրացում՝ հնարավորությունների հարցումների և փոփոխությունների կուտակման առումով:
— Ի՞նչ կար ձեր հետագա անելիքների ցանկում, երբ արդեն կայացել էին ամառային համաժողովները:
Նիկոլայ. Օրինակ՝ վարկեր։ Տեսահոլովակի վրա սողացող տողեր, տեսանյութի որոշ տեղերում թռուցիկներ՝ կախված ցուցադրվող բովանդակությունից: Օրինակ, բանախոսը ցանկանում է հարց տալ լսարանին, և էկրանին հայտնվում է քվեարկություն, որը վերադառնում է հետևի կողմը՝ քվեարկության արդյունքների հիման վրա հենց խոսնակին: Ինչ-որ սոցիալական ակտիվություն՝ հավանումների, սրտերի, զեկույցի գնահատականների տեսքով հենց ներկայացման ժամանակ, որպեսզի կարողանաք ճիշտ պահին լրացնել հետադարձ կապը՝ հետագայում չշեղվելու հետադարձ կապի ձևերից: Սկզբում այսպես.
Եվ նաև ամբողջ հարթակին, բացառությամբ հոսքի և կոնֆերանսի, նաև հետկոնֆերանսի վիճակի: Սրանք երգացանկեր են (ներառյալ օգտատերերի կողմից կազմվածները), հնարավոր է բովանդակություն այլ անցյալ կոնֆերանսներից, ինտեգրված, պիտակավորված, հասանելի օգտատիրոջը, ինչպես նաև հասանելի է մեր կայքում դիտելու համար (
- Տղերք, շատ շնորհակալ եմ ձեր պատասխանների համար:
Եթե ընթերցողների մեջ կան այնպիսիք, ովքեր ներկա են եղել մեր ամառային համաժողովներին, խնդրում ենք կիսվել խաղացողի և հեռարձակման մասին ձեր տպավորություններով: Ի՞նչն էր հարմար, ի՞նչն էր ձեզ նյարդայնացնում, ի՞նչ կցանկանայիք տեսնել ապագայում։
Եթե դուք հետաքրքրված եք պլատֆորմով և ցանկանում եք այն տեսնել «կռվի մեջ», մենք այն կրկին օգտագործում ենք մեր կայքում
Source: www.habr.com