Bezserverový prístup pre rýchly vývoj fungujúcej video služby

Bezserverový prístup pre rýchly vývoj fungujúcej video služby

Pracujem v oblasti outsourcingu, kde hlavný princíp možno opísať frázou „predaj veľa, urob to rýchlo“. Čím rýchlejšie to urobíme, tým viac zarobíme. A je žiaduce, aby všetko fungovalo nie o barlách a sopli, ale s prijateľnou úrovňou kvality. Poviem vám o mojej skúsenosti, keď bolo potrebné v krátkom čase vyvinúť propagačnú službu.

Vzhľadom na to: root účet na AWS, žiadne obmedzenia na výber technologického zásobníka, jeden backend a jeden mesiac na vývoj.

cieľ: implementovať propagačnú službu, kde používatelia nahrávajú jedno až štyri videá v trvaní jednej až štyroch sekúnd, ktoré sú potom vložené do pôvodnej série videí.

rozhodnutie

Napísať si vlastný cykloservis v takom krátkom čase nie je dobrý nápad. Navyše, aby si služba poradila so záťažou a aby každý dostal vytúžené video, bude potrebná infraštruktúra. A radšej nie s cenovkou z lietadla. Preto sa okamžite zameriavame na hotové riešenia s minimálnym prispôsobením.

Štandardným riešením pre prácu s videom je FFmpeg, multiplatformová konzolová utilita, ktorá pomocou argumentov umožňuje strihať a nadabovať zvuk. Zostáva už len napísať obal a uviesť ho do života. Napíšeme prototyp, ktorý spojí dve videá dohromady a... zábava sa začína. Knižnica je založená na .NET Core 2, mala by bežať na akomkoľvek virtuálnom stroji, takže vezmeme inštanciu AWS EC2 a všetko bude fungovať

Skrytý textnie, nebude to fungovať
.
Hoci FFmpeg zjednodušuje úlohu, pre skutočne fungujúce riešenie je potrebné vytvoriť inštanciu EC2 a navrhnúť pre ňu sieťovú infraštruktúru vrátane Load Balanceru. Jednoduchá úloha nasadenia od nuly sa „trochu“ skomplikuje a infraštruktúra začne okamžite požadovať peniaze – každú hodinu sa z klientskeho účtu stiahne suma za runtime.

Naša služba nezahŕňa dlhotrvajúce procesy, nevyžaduje veľkú a tučnú relačnú databázu a dokonale zapadá do architektúry založenej na udalostiach s reťazcom volaní mikroslužieb. Riešenie sa navrhuje samo – môžeme opustiť EC2 a implementovať skutočnú bezserverovú aplikáciu, ako je štandardný Image Resizer založený na AWS Lambda.

Mimochodom, napriek zjavnej nechuti vývojárov AWS k .NET, podporujú .NET Core 2.1 ako runtime, čo poskytuje celý rad možností vývoja.

A čerešnička na torte – AWS poskytuje samostatnú službu pre prácu s video súbormi – AWS Elemental MediaConvert.

Podstata práce je neuveriteľne jednoduchá: vezmeme odkaz S3 na odchádzajúce video, napíšeme cez AWS Console, .NET SDK alebo jednoducho JSON, čo chceme s videom urobiť a zavoláme službu. Sama implementuje fronty na spracovanie prichádzajúcich požiadaviek, sama si nahrá výsledok do S3 a hlavne generuje CloudWatch Event pre každú zmenu stavu. To nám umožňuje implementovať spúšťače lambda na dokončenie spracovania videa.

Bezserverový prístup pre rýchly vývoj fungujúcej video služby
Takto vyzerá finálna architektúra:

Celý backend je umiestnený v dvoch lambdach. Ďalší je určený na otáčanie vertikálnych videí, pretože takúto prácu nemožno vykonať jedným prechodom.

Prednú stranu vo forme SPA aplikácie napísanej v JS a zostavenej cez mops umiestnime do verejného S3 vedra. Na stiahnutie samotných videí nepotrebujeme žiadny serverový kód – stačí nám otvoriť koncové body REST, ktoré nám poskytuje S3. Jediná vec je, že nezabudnite nakonfigurovať politiky a CORS.

Úskalia

  • AWS MediaConvert z nejakého neznámeho dôvodu aplikuje zvuk iba na každý fragment videa samostatne, ale potrebujeme veselú pesničku z celého šetriča obrazovky.
  • Vertikálne videá je potrebné spracovať samostatne. AWS nemá rád čierne pruhy a kladie valčeky pod uhlom 90°.

Ľahké klzisko

Napriek všetkej kráse Stateless musíte mať prehľad o tom, čo je potrebné s videom urobiť: prilepiť alebo pridať zvuk do hotovej videosekvencie. Našťastie MediaConvert podporuje odovzdávanie metadát prostredníctvom svojich úloh a vždy môžeme použiť jednoduchý príznak vo forme „isMasterSoundJob“, ktorý tieto metadáta analyzuje v ktorejkoľvek fáze.

Serverless dokonale umožňuje prácu s NoOps - prístup, ktorý predpokladá zbytočnosť samostatného tímu zodpovedného za projektovú infraštruktúru. Išlo teda o maličkosť – riešenie nasadzujeme na AWS bez účasti systémových administrátorov, ktorí majú aj tak vždy čo robiť.
A aby sme to všetko urýchlili, na AWS CloudFormation maximálne automatizujeme skript nasadenia, ktorý umožňuje nasadenie jedným tlačidlom priamo z VS. Výsledkom je, že súbor s 200 riadkami kódu vám umožňuje zaviesť hotové riešenie, hoci syntax CloudFormation môže byť šokujúca, ak na to nie ste zvyknutí.

Celkom

Serverless nie je všeliekom. Ale výrazne to uľahčí život v situáciách s tromi limitmi: „obmedzené zdroje – krátkodobo – málo peňazí“.

Charakteristika aplikácií Vhodné pre bezserverové

  • bez dlhotrvajúcich procesov. Pevný limit API brány je 29 sekúnd, pevný limit lambda je 5 minút;
  • popísaná architektúrou riadenou udalosťou;
  • rozkladá sa na voľne spojené komponenty ako SOA;
  • nevyžaduje veľa práce s vaším stavom;
  • napísaný v .NET Core. Na prácu s .NET Framework budete stále potrebovať aspoň Docker s príslušným runtime.

Výhody bezserverového prístupu

  • znižuje náklady na infraštruktúru;
  • znižuje náklady na dodanie riešenia;
  • automatická škálovateľnosť;
  • vývoj na hranici technologického pokroku.

Nevýhody, s konkrétnym príkladom

  • Distribuované sledovanie a protokolovanie – čiastočne vyriešené prostredníctvom AWS X-Ray a AWS CloudWatch;
  • nepohodlné ladenie;
  • Studený štart, keď nie je zaťaženie;
  • Používateľsky nepriateľské rozhranie AWS je univerzálny problém :)

Zdroj: hab.com

Pridať komentár