Գործող վիդեո ծառայության արագ զարգացման համար առանց սերվերի մոտեցում

Գործող վիդեո ծառայության արագ զարգացման համար առանց սերվերի մոտեցում

Ես աշխատում եմ աութսորսինգում, որտեղ հիմնական սկզբունքը կարելի է բնութագրել «շատ վաճառիր, արագ արա» արտահայտությամբ: Որքան արագ դա անենք, այնքան ավելի շատ կվաստակենք: Եվ, ցանկալի է, որ ամեն ինչ աշխատի ոչ թե հենակներով ու մռութով, այլ որակի ընդունելի մակարդակով։ Ես ձեզ կպատմեմ իմ փորձի մասին, երբ անհրաժեշտ էր կարճ ժամանակահատվածում զարգացնել գովազդային ծառայություն։

Տրված է. արմատային հաշիվ AWS-ի վրա, տեխնոլոգիական փաթեթի ընտրության սահմանափակումներ չկան, մեկ հետին պլան և մեկ ամիս զարգացման համար:

Առաջադրանք. իրականացնել գովազդային ծառայություն, որտեղ օգտատերերը վերբեռնում են մեկից չորս տեսանյութեր՝ մեկից չորս վայրկյան տևողությամբ, որոնք այնուհետև տեղադրվում են բնօրինակ տեսանյութերի շարքում:

որոշում

Այսքան կարճ ժամանակում սեփական հեծանվային ծառայություն գրելը լավ գաղափար չէ: Բացի այդ, որպեսզի ծառայությունը կարողանա հաղթահարել ծանրաբեռնվածությունը, և որպեսզի բոլորը ստանան բաղձալի տեսանյութը, կպահանջվեն ենթակառուցվածքներ: Եվ ցանկալի է՝ ոչ ինքնաթիռից գնի հետ: Հետեւաբար, մենք անմիջապես կենտրոնանում ենք պատրաստի լուծումների վրա՝ նվազագույն հարմարեցմամբ:

Տեսանյութի հետ աշխատելու ստանդարտ լուծումը FFmpeg-ն է՝ միջպլատֆորմային կոնսոլային գործիք, որը փաստարկների միջոցով թույլ է տալիս կտրել և չափից ավելի ձայնագրել ձայնը: Մնում է միայն փաթաթան գրել և կյանքի կոչել: Մենք գրում ենք նախատիպ, որը կարում է երկու տեսահոլովակ, և... զվարճանքը սկսվում է: Գրադարանը հիմնված է .NET Core 2-ի վրա, այն պետք է աշխատի ցանկացած վիրտուալ մեքենայի վրա, այնպես որ մենք վերցնում ենք AWS EC2 օրինակ և ամեն ինչ կաշխատի:

Թաքնված տեքստոչ, չի ստացվի
.
Չնայած FFmpeg-ը պարզեցնում է առաջադրանքը, իսկապես աշխատող լուծման համար անհրաժեշտ է ստեղծել EC2 օրինակ և դրա համար նախագծել ցանցային ենթակառուցվածք, ներառյալ Load Balancer: Զրոյից տեղակայելու պարզ խնդիրը դառնում է «մի փոքր» ավելի բարդ, և ենթակառուցվածքը սկսում է անմիջապես գումար պահանջել՝ ամեն ժամ գործարկման ժամանակի գումարը հանվում է հաճախորդի հաշվից:

Մեր ծառայությունը չի ներառում երկարատև գործընթացներ, չի պահանջում մեծ և հաստլիկ հարաբերական տվյալների բազա և հիանալի տեղավորվում է իրադարձությունների վրա հիմնված ճարտարապետության մեջ՝ միկրոսպասարկման զանգերի շղթայով: Լուծումն ինքնին հուշում է. մենք կարող ենք հրաժարվել EC2-ից և իրականացնել իրական առանց սերվերի հավելված, ինչպիսին է ստանդարտ Image Resizer-ը, որը հիմնված է AWS Lambda-ի վրա:

Ի դեպ, չնայած AWS ծրագրավորողների ակնհայտ հակակրանքին .NET-ի նկատմամբ, նրանք աջակցում են .NET Core 2.1-ին որպես գործարկման ժամանակ, որն ապահովում է զարգացման լայն հնարավորություններ։

Իսկ տորթի վրա բալը՝ AWS-ը տրամադրում է վիդեո ֆայլերի հետ աշխատելու առանձին ծառայություն՝ AWS Elemental MediaConvert։

Աշխատանքի էությունը աներևակայելի պարզ է՝ մենք վերցնում ենք S3 հղում դեպի ելքային տեսանյութ, գրում ենք AWS Console-ի, .NET SDK-ի կամ պարզապես JSON-ի միջոցով, թե ինչ ենք ուզում անել տեսանյութի հետ և զանգահարում ենք ծառայություն։ Այն ինքն է իրականացնում մուտքային հարցումների մշակման հերթեր, արդյունքը վերբեռնում է S3-ում և, ամենակարևորը, ստեղծում է CloudWatch իրադարձություն յուրաքանչյուր կարգավիճակի փոփոխության համար: Սա թույլ է տալիս մեզ կիրառել լամբդա ձգաններ՝ վիդեո մշակումն ավարտելու համար:

Գործող վիդեո ծառայության արագ զարգացման համար առանց սերվերի մոտեցում
Ահա թե ինչ տեսք ունի վերջնական ճարտարապետությունը.

Ամբողջ հետնամասը տեղադրված է երկու լամբդաների մեջ: Մյուսը ուղղահայաց տեսանյութերի պտտման համար է, քանի որ նման աշխատանք չի կարող կատարվել մեկ անցումով:

Մենք կտեղադրենք ճակատը SPA հավելվածի տեսքով, որը գրված է JS-ով և կազմված է pug-ի միջոցով հանրային S3 դույլի մեջ: Ինքնին տեսանյութերը ներբեռնելու համար մեզ որևէ սերվերի կոդ պետք չէ, մենք պարզապես պետք է բացենք REST վերջնակետերը, որոնք մեզ տրամադրում է S3-ը: Միակ բանը, մի մոռացեք կարգավորել քաղաքականությունը և CORS-ը:

Որոգայթներ

  • AWS MediaConvert-ը, ինչ-որ անհայտ պատճառով, միայն ձայն է կիրառում տեսանյութի յուրաքանչյուր հատվածի վրա առանձին, բայց մեզ անհրաժեշտ է ուրախ երգ ամբողջ էկրանապահից:
  • Ուղղահայաց տեսանյութերը պետք է մշակվեն առանձին: AWS-ը չի սիրում սև շերտերը և գլանափաթեթները դնում է 90°-ի վրա:

Հեշտ սահադաշտ

Չնայած քաղաքացիություն չունեցող ֆիլմի ողջ գեղեցկությանը, դուք պետք է հետևեք, թե ինչ է պետք անել տեսանյութի հետ՝ սոսնձել կամ աուդիո ավելացնել պատրաստի տեսանյութի հաջորդականությանը: Բարեբախտաբար, MediaConvert-ն աջակցում է մետատվյալների փոխանցումն իր Jobs-ի միջոցով, և մենք միշտ կարող ենք օգտագործել «isMasterSoundJob» ձևի պարզ դրոշակը՝ վերլուծելով այս մետատվյալները ցանկացած փուլում:

Serverless-ը հիանալի կերպով թույլ է տալիս աշխատել NoOps-ի հետ՝ մոտեցում, որը ենթադրում է նախագծի ենթակառուցվածքի համար պատասխանատու առանձին թիմի անհարկիությունը: Հետևաբար, դա փոքր խնդիր էր. մենք լուծումը տեղակայում ենք AWS-ում առանց համակարգի ադմինիստրատորների մասնակցության, որոնք, այնուամենայնիվ, միշտ անելիք ունեն:
Եվ այս ամենը արագացնելու համար մենք հնարավորինս ավտոմատացնում ենք տեղակայման սկրիպտը AWS CloudFormation-ում, որը թույլ է տալիս տեղակայել մեկ կոճակով անմիջապես VS-ից։ Արդյունքում, 200 տող կոդից բաղկացած ֆայլը թույլ է տալիս պատրաստել պատրաստի լուծում, թեև CloudFormation շարահյուսությունը կարող է ցնցող լինել, եթե դուք դրան սովոր չեք:

Ընդհանուր

Serverless-ը համադարման չէ: Բայց դա շատ ավելի հեշտ կդարձնի կյանքը երեք սահմանափակում ունեցող իրավիճակներում՝ «սահմանափակ ռեսուրսներ, կարճաժամկետ, քիչ փող»:

Առանց սերվերի համար հարմար հավելվածների բնութագրերը

  • առանց երկարատև գործընթացների: API Gateway-ի կոշտ սահմանաչափը 29 վայրկյան է, լամբդա կոշտ սահմանաչափը՝ 5 րոպե;
  • նկարագրված է իրադարձությունների վրա հիմնված ճարտարապետությամբ;
  • բաժանվում է թույլ զուգակցված բաղադրիչների, ինչպիսիք են SOA-ն;
  • չի պահանջում շատ աշխատանք ձեր վիճակի հետ;
  • գրված է .NET Core-ում: .NET Framework-ի հետ աշխատելու համար ձեզ դեռ պետք է առնվազն Docker՝ համապատասխան գործարկման ժամանակով:

Առանց սերվերի մոտեցման առավելությունները

  • նվազեցնում է ենթակառուցվածքի ծախսերը;
  • նվազեցնում է լուծման առաքման արժեքը.
  • ավտոմատ մասշտաբայնություն;
  • զարգացում տեխնոլոգիական առաջընթացի ամենաառաջին եզրին:

Թերությունները՝ կոնկրետ օրինակով

  • Բաշխված հետագծում և գրանցում - մասամբ լուծվում է AWS X-Ray և AWS CloudWatch-ի միջոցով;
  • անհարմար վրիպազերծում;
  • Սառը մեկնարկ, երբ բեռ չկա;
  • AWS օգտագործողի թշնամական ինտերֆեյսը համընդհանուր խնդիր է :)

Source: www.habr.com

Добавить комментарий