Жұмыс істейтін бейне сервисті жылдам дамыту үшін серверсіз тәсіл

Жұмыс істейтін бейне сервисті жылдам дамыту үшін серверсіз тәсіл

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

Берілгендер: 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 шелекінде құрастырылған SPA қосымшасы түрінде орналастырамыз. Бейнелерді өздері жүктеп алу үшін бізге ешқандай сервер коды қажет емес - бізге S3 ұсынатын REST соңғы нүктелерін ашу керек. Жалғыз нәрсе - саясаттар мен CORS конфигурациялауды ұмытпаңыз.

Төзімділік

  • AWS MediaConvert, белгісіз себептермен дыбысты тек әрбір бейне фрагментіне бөлек қолданады, бірақ бізге бүкіл экран сақтағышынан көңілді ән қажет.
  • Тік бейнелерді бөлек өңдеу керек. AWS қара жолақтарды ұнатпайды және роликтерді 90°-қа қояды.

Жеңіл сырғанақ

Азаматсыздың барлық сұлулығына қарамастан, бейнемен не істеу керек екенін қадағалап отыру керек: дайын бейне тізбегін желімдеу немесе аудио қосу. Бақытымызға орай, MediaConvert метадеректерді Тапсырмалар арқылы жіберуді қолдайды және біз әрқашан кез келген кезеңде осы метадеректерді талдай отырып, «isMasterSoundJob» пішіміндегі қарапайым жалаушаны пайдалана аламыз.

Серверсіз NoOps-пен жұмыс істеуге тамаша мүмкіндік береді - жобаның инфрақұрылымына жауапты жеке топтың қажетсіздігін болжайтын тәсіл. Сондықтан, бұл кішкене мәселе болды - біз шешімді AWS жүйесінде жүйелік әкімшілердісіз орналастырамыз, олар әрқашан бәрібір істеу керек.
Осының барлығын жылдамдату үшін біз VS жүйесінен бір түймемен орналастыруға мүмкіндік беретін AWS CloudFormation жүйесінде мүмкіндігінше орналастыру сценарийін автоматтандырамыз. Нәтижесінде, 200 жолдық код файлы дайын шешімді шығаруға мүмкіндік береді, дегенмен CloudFormation синтаксисі оған үйренбеген жағдайда таң қалдырады.

Барлығы

Серверсіз - бұл панацея емес. Бірақ бұл үш шектеуі бар жағдайларда өмірді әлдеқайда жеңілдетеді: «шектелген ресурстар - қысқа мерзімді - аз ақша».

Серверсіз үшін қолайлы қолданбалардың сипаттамалары

  • Ұзақ мерзімді процестерсіз. API Gateway қатты шегі 29 секунд, lambda қатты шегі 5 минут;
  • оқиғаға негізделген архитектурамен сипатталған;
  • SOA сияқты еркін байланысқан компоненттерге ыдырайды;
  • сіздің жағдайыңызбен көп жұмыс істеуді қажет етпейді;
  • .NET Core жүйесінде жазылған. .NET Framework-пен жұмыс істеу үшін сізге әлі де кем дегенде сәйкес жұмыс уақыты бар Docker қажет болады.

Серверсіз тәсілдің артықшылықтары

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

Кемшіліктер, нақты мысалмен

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

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

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