Жумушчу видео кызматын тез өнүктүрүү үчүн серверсиз ыкма

Жумушчу видео кызматын тез өнүктүрүү үчүн серверсиз ыкма

Мен аутсорсингде иштейм, мында негизги принципти “көп сатсаң, тез жаса” деген сөз менен сыпаттаса болот. Канчалык тезирээк аткарсак, ошончолук көп киреше алабыз. Ал эми, баары балдак жана тырмак менен эмес, алгылыктуу сапаты менен иштегени жакшы. Мен кыска мөөнөттүн ичинде жарнамалык кызматты өнүктүрүү зарыл болгон кездеги тажрыйбам тууралуу айтып берейин.

Берилген: AWSдеги тамыр эсеби, технологиялык стек тандоодо эч кандай чектөөлөр жок, бир бэкэнд жана иштеп чыгуу үчүн бир ай.

Тапшырма: жарнамалык кызматты ишке ашыруу, анда колдонуучулар бирден төрт секундга чейин созулган бирден төрткө чейин видеолорду жүктөшөт, андан кийин алар оригиналдуу видео сериясына киргизилет.

чечим

Мындай кыска убакыттын ичинде өзүңүздүн велосипед кызматыңызды жазуу жакшы идея эмес. Мындан тышкары, кызмат жүктөмдү көтөрүү үчүн жана ар бир адам эңсеген видеону алуу үчүн инфраструктура талап кылынат. Ал эми учактын баасы менен эмес. Ошондуктан, биз дароо эле минималдуу ыңгайлаштыруу менен даяр чечимдерге басым жасайбыз.

Видео менен иштөө үчүн стандарттуу чечим - бул FFmpeg, кайчылаш платформа консолунун утилитасы, ал аргументтер аркылуу аудиону кесип жана ашыкча көчүрүүгө мүмкүндүк берет. Болгону, ороп жазуу жана аны жашоого чыгаруу гана калды. Биз эки видеону бириктирген прототибин жазабыз жана... кызыктуу башталат. Китепкана .NET Core 2ге негизделген, ал каалаган виртуалдык машинада иштеши керек, ошондуктан биз AWS EC2 инстанциясын алабыз жана баары иштейт

Жашырылган текстжок, ал иштебейт
.
FFmpeg тапшырманы жөнөкөйлөштүрсө да, чындап иштеген чечим үчүн EC2 инстанциясын түзүп, анын тармактык инфраструктурасын, анын ичинде Load Balancer түзүшүңүз керек. Нөлдөн баштоонун жөнөкөй тапшырмасы "бир аз" татаалдашып, инфраструктура дароо акча талап кыла баштайт - ар бир саат сайын иштөө убактысы үчүн сумма кардар эсебинен алынып турат.

Биздин кызмат Узак мөөнөттүү процесстерди камтыбайт, чоң жана майлуу реляциялык маалымат базасын талап кылбайт жана микросервис чалууларынын тизмеги менен окуяга негизделген архитектурага эң сонун шайкеш келет. Чечим өзүн сунуштайт - биз EC2ден баш тартып, AWS Lambda негизиндеги стандарттуу Image Resizer сыяктуу чыныгы серверсиз тиркемени ишке ашыра алабыз.

Айтмакчы, AWS иштеп чыгуучулары .NET үчүн ачык эле жактырбаганына карабастан, алар .NET Core 2.1ди иштөө убактысы катары колдошот, бул өнүгүү мүмкүнчүлүктөрүнүн толук спектрин камсыз кылат.

Ал эми торттогу алча - AWS видео файлдар менен иштөө үчүн өзүнчө кызматты сунуштайт - AWS Elemental MediaConvert.

Иштин маңызы укмуштуудай жөнөкөй: биз чыгып жаткан видеого S3 шилтемесин алабыз, AWS Console, .NET SDK же жөн гана JSON аркылуу видео менен эмне кылгыбыз келгенин жазып, кызматка чалабыз. Ал өзү келген суроо-талаптарды иштетүү үчүн кезектерди ишке ашырат, натыйжаны S3 өзүнө жүктөйт жана эң негизгиси, ар бир статустун өзгөрүшү үчүн CloudWatch окуясын түзөт. Бул бизге видео иштетүүнү аяктоо үчүн ламбда триггерлерин ишке ашырууга мүмкүндүк берет.

Жумушчу видео кызматын тез өнүктүрүү үчүн серверсиз ыкма
Бул акыркы архитектура окшойт:

Бардык арткы эки ламбдага жайгаштырылган. Дагы бири вертикалдуу видеолорду айландыруу үчүн, анткени мындай жумуш бир өтүүдө аткарылбайт.

Биз JS менен жазылган жана коомдук S3 чака менен Pug аркылуу түзүлгөн SPA өтүнмө түрүндө алдыңкы жайгаштырабыз. Видеолорду өздөрү жүктөп алуу үчүн бизге эч кандай сервердик коддун кереги жок - S3 бизге берген REST акыркы чекиттерин ачышыбыз керек. Бир гана нерсе - саясаттарды жана CORS конфигурациялоону унутпаңыз.

тузактар

  • AWS MediaConvert, кандайдыр бир белгисиз себептерден улам, ар бир видео фрагментке өзүнчө гана үн колдонот, бирок бизге бүт экран сактагычтан шайыр ыр керек.
  • Вертикалдуу видеолорду өзүнчө иштетүү керек. AWS кара тилкелерди жактырбайт жана роликтерди 90° бурат.

Жеңил муз аянтчасы

Жарансыздыктын бардык кооздугуна карабастан, сиз видеону эмне кылуу керек экенин көзөмөлдөшүңүз керек: даяр видео ырааттуулугуна клей же аудио кошуу. Бактыга жараша, MediaConvert өзүнүн Jobs аркылуу метадайындарды өткөрүүнү колдойт жана биз ар дайым "isMasterSoundJob" түрүндөгү жөнөкөй желекти колдоно алабыз, бул метаберилиштерди каалаган этапта талдоо.

Serverless NoOps менен иштөөгө эң сонун мүмкүнчүлүк берет - долбоордун инфраструктурасы үчүн жооптуу өзүнчө топтун кереги жок деп эсептеген ыкма. Ошондуктан, бул кичинекей маселе болду - биз чечимди AWSге системалык администраторлордун катышуусуз жайгаштырабыз, алар ар дайым баары бир кыла турган нерсеси бар.
Мунун баарын тездетүү үчүн биз AWS CloudFormation программасында мүмкүн болушунча жайылтуу скриптин автоматташтырабыз, бул сизге VSден түздөн-түз бир баскыч менен жайылтууга мүмкүндүк берет. Натыйжада, 200 сап коддон турган файл даяр чечимди чыгарууга мүмкүндүк берет, бирок CloudFormation синтаксиси көнбөгөн болсоңуз, таң калыштуу болушу мүмкүн.

жалпы

Serverless бул панацея эмес. Бирок бул үч чектөөсү бар жагдайларда жашоону бир топ жеңилдетет: "чектелген ресурстар - кыска мөөнөттүү - аз акча".

Серверсиздерге ылайыктуу тиркемелердин мүнөздөмөлөрү

  • Узак мөөнөттүү процесстерсиз. API Gateway катуу чеги 29 секунд, lambda катуу чеги 5 мүнөт;
  • Event-Driven архитектурасы менен сүрөттөлгөн;
  • SOA сыяктуу эркин бириктирилген компоненттерге бөлүнөт;
  • сиздин шартыңыз менен көп иштөөнү талап кылбайт;
  • .NET Core менен жазылган. .NET Framework менен иштөө үчүн сизге дагы эле жок дегенде тиешелүү иштөө убактысы бар Докер керек болот.

Серверсиз ыкманын артыкчылыктары

  • инфраструктуралык чыгымдарды азайтат;
  • чечимди жеткирүүгө кеткен чыгымды азайтат;
  • автоматтык масштабдоо;
  • технологиялык прогресстин эң алдыңкы чегинде өнүгүү.

Кемчиликтери, конкреттүү мисал менен

  • Бөлүштүрүлгөн байкоо жана журналга алуу - жарым-жартылай AWS X-Ray жана AWS CloudWatch аркылуу чечилет;
  • ыңгайсыз мүчүлүштүктөрдү оңдоо;
  • Жүк жок болгондо Cold Start;
  • AWS колдонуучу-душман интерфейси универсалдуу көйгөй :)

Source: www.habr.com

Комментарий кошуу