Qasje pa server për zhvillimin e shpejtë të një shërbimi video pune

Qasje pa server për zhvillimin e shpejtë të një shërbimi video pune

Unë punoj në kontraktimin e jashtëm, ku parimi kryesor mund të përshkruhet me shprehjen "shit shumë, bëje shpejt". Sa më shpejt ta bëjmë atë, aq më shumë do të fitojmë. Dhe, është e dëshirueshme që gjithçka të funksionojë jo në paterica dhe snot, por me një nivel të pranueshëm cilësie. Unë do t'ju tregoj për përvojën time kur ishte e nevojshme të zhvillohej një shërbim promovues në një periudhë të shkurtër kohore.

duke pasur parasysh: llogaria rrënjësore në AWS, nuk ka kufizime në zgjedhjen e grumbullit të teknologjisë, një backend dhe një muaj për zhvillim.

Një detyrë: zbatoni një shërbim promovues ku përdoruesit ngarkojnë nga një deri në katër video që zgjasin nga një deri në katër sekonda, të cilat më pas futen në serinë origjinale të videove.

vendim

Shkrimi i shërbimit tuaj të biçikletave në një kohë kaq të shkurtër nuk është një ide e mirë. Përveç kësaj, që shërbimi të përballojë ngarkesën dhe që të gjithë të marrin videon e lakmuar, do të kërkohet infrastruktura. Dhe mundësisht jo me çmimin nga avioni. Prandaj, ne fokusohemi menjëherë në zgjidhjet e gatshme me përshtatje minimale.

Zgjidhja standarde për të punuar me video është FFmpeg, një mjet i konsolës ndër-platformë që, përmes argumenteve, ju lejon të shkurtoni dhe mbiduboni audion. Gjithçka që mbetet për të bërë është të shkruani një mbështjellës dhe ta lëshoni atë në jetë. Ne shkruajmë një prototip që bashkon dy video së bashku dhe... argëtimi fillon. Biblioteka bazohet në .NET Core 2, duhet të funksionojë në çdo makinë virtuale, kështu që ne marrim një shembull AWS EC2 dhe gjithçka do të funksionojë

Teksti i fshehurjo, nuk do të funksionojë
.
Megjithëse FFmpeg thjeshton detyrën, për një zgjidhje vërtet funksionale ju duhet të krijoni një shembull EC2 dhe të dizajnoni një infrastrukturë rrjeti për të, duke përfshirë një balancues të ngarkesës. Detyra e thjeshtë e vendosjes nga e para bëhet "pak" më e ndërlikuar dhe infrastruktura fillon të kërkojë para menjëherë - çdo orë shuma për kohën e ekzekutimit tërhiqet nga llogaria e klientit.

Shërbimi ynë nuk përfshin procese afatgjata, nuk kërkon një bazë të dhënash të madhe dhe të trashë relacionale dhe përshtatet në mënyrë të përkryer në një arkitekturë të bazuar në ngjarje me një zinxhir thirrjesh mikroshërbimesh. Zgjidhja sugjeron vetveten - ne mund të braktisim EC2 dhe të zbatojmë një aplikacion të vërtetë pa server, si Resizer standard i imazhit bazuar në AWS Lambda.

Nga rruga, pavarësisht nga mospëlqimi i dukshëm i zhvilluesve AWS për .NET, ata mbështesin .NET Core 2.1 si kohëzgjatjeje, e cila ofron një gamë të plotë mundësish zhvillimi.

Dhe qershia në tortë - AWS ofron një shërbim të veçantë për të punuar me skedarë video - AWS Elemental MediaConvert.

Thelbi i punës është tepër i thjeshtë: marrim një lidhje S3 në videon dalëse, shkruajmë përmes AWS Console, .NET SDK ose thjesht JSON atë që duam të bëjmë me videon dhe telefonojmë shërbimin. Ai vetë zbaton radhë për përpunimin e kërkesave hyrëse, ngarkon rezultatin në vetë S3 dhe, më e rëndësishmja, gjeneron një Ngjarje CloudWatch për çdo ndryshim statusi. Kjo na lejon të zbatojmë nxitësit lambda për të përfunduar përpunimin e videos.

Qasje pa server për zhvillimin e shpejtë të një shërbimi video pune
Kështu duket arkitektura përfundimtare:

E gjithë pjesa e pasme është e vendosur në dy lambda. Një tjetër është për rrotullimin e videove vertikale, pasi një punë e tillë nuk mund të bëhet me një kalim.

Ne do ta vendosim pjesën e përparme në formën e një aplikacioni SPA të shkruar në JS dhe të përpiluar përmes pug në një kovë publike S3. Për të shkarkuar vetë videot, nuk kemi nevojë për ndonjë kod serveri - thjesht duhet të hapim pikat fundore REST që na ofron S3. E vetmja gjë është të mos harroni të konfiguroni politikat dhe CORS.

Grackë

  • AWS MediaConvert, për ndonjë arsye të panjohur, aplikon tingullin vetëm për çdo fragment video veç e veç, por na duhet një këngë gazmore nga i gjithë mbrojtësi i ekranit.
  • Videot vertikale duhet të përpunohen veçmas. AWS nuk i pëlqen shiritat e zinj dhe i vendos rrotullat në 90°.

Shesh patinazhi i lehtë

Pavarësisht gjithë bukurisë së Pashtetësisë, duhet të mbani gjurmët e asaj që duhet bërë me videon: ngjitni ose shtoni audio në sekuencën e përfunduar të videos. Për fat të mirë, MediaConvert mbështet kalimin e meta të dhënave përmes Punëve të tij dhe ne gjithmonë mund të përdorim një flamur të thjeshtë të formës "isMasterSoundJob", duke i analizuar këto meta të dhëna në çdo fazë.

Pa server në mënyrë të përkryer lejon punën me NoOps - një qasje që supozon panevojshmërinë e një ekipi të veçantë përgjegjës për infrastrukturën e projektit. Prandaj, ishte një çështje e vogël - ne vendosim zgjidhjen në AWS pa pjesëmarrjen e administratorëve të sistemit, të cilët gjithsesi kanë gjithmonë diçka për të bërë.
Dhe për të përshpejtuar të gjitha këto, ne automatizojmë skriptin e vendosjes sa më shumë që të jetë e mundur në AWS CloudFormation, i cili ju lejon të vendosni me një buton direkt nga VS. Si rezultat, një skedar me 200 rreshta kodi ju lejon të hapni një zgjidhje të gatshme, megjithëse sintaksa CloudFormation mund të jetë tronditëse nëse nuk jeni mësuar me të.

Në total

Pa server nuk është një ilaç. Por do ta bëjë jetën shumë më të lehtë në situata me tre kufij: "burime të kufizuara - afatshkurtër - pak para".

Karakteristikat e aplikacioneve të përshtatshme për server pa server

  • pa procese afatgjata. Kufiri i vështirë i API Gateway është 29 sekonda, kufiri i fortë lambda është 5 minuta;
  • përshkruar nga arkitektura e drejtuar nga ngjarjet;
  • zbërthehet në komponentë të lidhur lirshëm si SOA;
  • nuk kërkon shumë punë me gjendjen tuaj;
  • shkruar në .NET Core. Për të punuar me .NET Framework, do t'ju duhet ende të paktën Docker me kohën e duhur të funksionimit.

Përfitimet e qasjes pa server

  • zvogëlon kostot e infrastrukturës;
  • zvogëlon koston e ofrimit të zgjidhjes;
  • shkallëzueshmëria automatike;
  • zhvillimi në avantazhin e përparimit teknologjik.

Disavantazhet, me një shembull specifik

  • Gjurmimi dhe regjistrimi i shpërndarë - i zgjidhur pjesërisht përmes AWS X-Ray dhe AWS CloudWatch;
  • korrigjimi i papërshtatshëm;
  • Fillimi i Ftohtë kur nuk ka ngarkesë;
  • Ndërfaqja armiqësore e përdoruesit AWS është një problem universal :)

Burimi: www.habr.com

Shto një koment