Pristup bez poslužitelja za brz razvoj video usluge koja radi

Pristup bez poslužitelja za brz razvoj video usluge koja radi

Radim u outsourcingu, gdje se glavno načelo može opisati frazom "prodaj puno, učini to brzo". Što brže to učinimo, više ćemo zaraditi. I, poželjno je da sve radi ne na štakama i balavcima, već s prihvatljivom razinom kvalitete. Ispričat ću vam svoje iskustvo kada je bilo potrebno u kratkom roku razviti promotivnu uslugu.

dati: root račun na AWS-u, bez ograničenja u izboru tehnološkog skupa, jedan backend i jedan mjesec za razvoj.

cilj: implementirati promotivnu uslugu gdje korisnici postavljaju od jednog do četiri videa u trajanju od jedne do četiri sekunde, koji se zatim ugrađuju u originalnu video seriju.

odluka

Pisanje vlastitog servisa za bicikle u tako kratkom vremenu nije dobra ideja. Osim toga, kako bi se usluga nosila s opterećenjem i kako bi svi dobili željeni video, bit će potrebna infrastruktura. I po mogućnosti ne s cjenikom iz aviona. Stoga se odmah usmjeravamo na gotova rješenja uz minimalnu prilagodbu.

Standardno rješenje za rad s videom je FFmpeg, konzolni uslužni program za više platformi koji vam putem argumenata omogućuje rezanje i presnimavanje zvuka. Sve što preostaje je napisati omot i pustiti ga u život. Napišemo prototip koji spaja dva videa i... zabava počinje. Biblioteka se temelji na .NET Core 2, trebala bi raditi na bilo kojem virtualnom računalu, stoga uzmemo AWS EC2 instancu i sve će raditi

Skriveni tekstne, neće uspjeti
.
Iako FFmpeg pojednostavljuje zadatak, za stvarno radno rješenje morate stvoriti EC2 instancu i dizajnirati mrežnu infrastrukturu za nju, uključujući Load Balancer. Jednostavan zadatak implementacije od nule postaje "malo" kompliciraniji, a infrastruktura odmah počinje zahtijevati novac - svakih sat vremena iznos za runtime povlači se s računa klijenta.

Naša usluga ne uključuje Dugotrajne procese, ne zahtijeva veliku i debelu relacijsku bazu podataka i savršeno se uklapa u arhitekturu temeljenu na događajima s lancem poziva mikroservisa. Rješenje se nameće samo po sebi - možemo napustiti EC2 i implementirati istinsku aplikaciju bez poslužitelja, poput standardnog Image Resizer-a temeljenog na AWS Lambda.

Usput, unatoč očitoj nesklonosti programera AWS-a prema .NET-u, oni podržavaju .NET Core 2.1 kao runtime, što pruža cijeli niz razvojnih mogućnosti.

I trešnja na torti - AWS nudi zasebnu uslugu za rad s video datotekama - AWS Elemental MediaConvert.

Bit rada je nevjerojatno jednostavna: uzmemo S3 vezu na odlazni video, napišemo kroz AWS konzolu, .NET SDK ili jednostavno JSON što želimo učiniti s videom i pozovemo uslugu. Sam implementira redove za obradu dolaznih zahtjeva, sam učitava rezultat na S3 i, što je najvažnije, generira CloudWatch Event za svaku promjenu statusa. To nam omogućuje implementaciju lambda okidača za dovršetak obrade videa.

Pristup bez poslužitelja za brz razvoj video usluge koja radi
Ovako izgleda konačna arhitektura:

Cijeli backend je smješten u dvije lambde. Drugi je za rotiranje okomitih videa, budući da se takav posao ne može obaviti u jednom prolazu.

Postavit ćemo prednju stranu u obliku SPA aplikacije napisane u JS-u i kompajlirane putem pug-a u javnu S3 kantu. Za preuzimanje samih videozapisa ne trebamo nikakav kôd poslužitelja - samo trebamo otvoriti REST krajnje točke koje nam pruža S3. Jedina stvar je ne zaboravite konfigurirati pravila i CORS.

Zamke

  • AWS MediaConvert, iz nepoznatog razloga, primjenjuje samo zvuk na svaki video fragment zasebno, ali trebamo veselu pjesmu iz cijelog screensavera.
  • Okomite videozapise potrebno je zasebno obraditi. AWS ne voli crne trake i postavlja valjke na 90°.

Jednostavno klizalište

Unatoč svoj ljepoti Statelessa, morate pratiti što treba učiniti s videozapisom: zalijepiti ili dodati audio u gotov video niz. Srećom, MediaConvert podržava prosljeđivanje metapodataka kroz svoje poslove i uvijek možemo koristiti jednostavnu zastavicu u obliku "isMasterSoundJob", analizirajući ove metapodatke u bilo kojoj fazi.

Serverless savršeno omogućuje rad s NoOps - pristupom koji pretpostavlja nepotrebnost zasebnog tima odgovornog za infrastrukturu projekta. Stoga je bila mala stvar - implementiramo rješenje na AWS bez sudjelovanja administratora sustava, koji ionako uvijek imaju nešto za raditi.
A kako bismo sve ovo ubrzali, automatiziramo skriptu za implementaciju što je više moguće na AWS CloudFormation, što vam omogućuje implementaciju jednim gumbom izravno iz VS-a. Kao rezultat toga, datoteka od 200 redaka koda omogućuje vam da izbacite gotovo rješenje, iako CloudFormation sintaksa može biti šokantna ako niste navikli na nju.

Ukupno

Bez poslužitelja nije lijek za sve. Ali to će znatno olakšati život u situacijama s tri ograničenja: "ograničeni resursi - kratkoročno - malo novca."

Karakteristike aplikacija prikladnih za serverless

  • bez dugotrajnih procesa. API Gateway tvrdo ograničenje je 29 sekundi, lambda tvrdo ograničenje je 5 minuta;
  • opisano arhitekturom vođenom događajima;
  • raspada se na labavo povezane komponente poput SOA;
  • ne zahtijeva puno rada s vašim stanjem;
  • napisano u .NET Core. Za rad s .NET Frameworkom i dalje ćete trebati barem Docker s odgovarajućim runtimeom.

Prednosti pristupa bez poslužitelja

  • smanjuje troškove infrastrukture;
  • smanjuje troškove isporuke rješenja;
  • automatska skalabilnost;
  • razvoj na vrhuncu tehnološkog napretka.

Nedostaci, s konkretnim primjerom

  • Distribuirano praćenje i zapisivanje - djelomično riješeno putem AWS X-Ray i AWS CloudWatch;
  • neugodno uklanjanje pogrešaka;
  • Hladni start kada nema opterećenja;
  • AWS korisničko sučelje je univerzalni problem :)

Izvor: www.habr.com

Dodajte komentar