
Ma töötan outsourcena, kus peamine pĂ”himĂ”te on «mĂŒĂŒ palju, tee kiiresti». Mida kiiremini suudame teha, seda rohkem teenime. Ja soovitavalt peaks kĂ”ik toimima mitte kergelt, vaid vastuvĂ”tlikul kvaliteeditasemel. RÀÀgin oma kogemusest, mil tuli lĂŒhikese aja jooksul arendada promoteenus.
Antud: root-konto AWS-is, tehnolooge valides pole piiranguid, ĂŒks backend arendaja ja kuu arendamiseks.
Ălesanne: rakendada promoteenus, kus kasutajad saavad ĂŒles laadida ĂŒhe kuni neli videot, mille kestus on ĂŒhest nelja sekundini, mis seejĂ€rel integreeritakse originaalsesse videovoogu.
Lahendus
Oma teenuse kirjutamine selliste lĂŒhikeste tĂ€htaegadega â pole just parim plaan. Lisaks peab teenus taluma koormust ja kĂ”ik soovijad saama oma soovitud video, seetĂ”ttu on vajalik infrastruktuur. Soovitavalt mitte liiga kallis. SeetĂ”ttu keskendume kohe valmislahendusele minimaalse kohandamisega.
Standardne lahendus videoga töötamiseks on FFmpeg, platvormidevaheline konsoolirakendus, mis vĂ”imaldab argumentide kaudu nii lĂ”igata kui ka heli lisada. JÀÀb vaid kirjutada wrapper ja viia see ellu. Kirjutame prototĂŒĂŒbi, mis toob kokku kaks videot, ja... algab kĂ”ige huvitavam osa. Raamatukogu .NET Core 2, peab töötama igas virtuaalmasinas, seega vĂ”tame AWS EC2 instantsi ja kĂ”ik töötab.
Peidetud tekstei, see ei tööta.
.
FFmpeg, kuigi lihtsustab ĂŒlesannet, vajab tĂ”eliselt toimiva lahenduse jaoks EC2 instantsi loomist ja selle vĂ”rguinfrastruktuuri projekteerimist, sealhulgas koormuse jagajat. Lihtne ĂŒlesande juurutamine nullist on «veidi» keerulisem, ning infrastruktuur hakkab kohe nĂ”udma raha â iga tund eemaldatakse klientide kontolt summa jooksutamise eest.
Meie teenus ei eelda pikaajalisi protsesse, ei vaja suurt ja mahukat relatsioonilist andmebaasi ning mahub suurepĂ€raselt sĂŒndmuste arhitektuuri, kus on mikroteenuste kutsumise ahel. Lahendus tuleb iseenesest â saame loobuda EC2-st ja rakendada tĂ”eliselt serverivaba rakendust, sarnast standardset Image Resizer AWS Lambda baasil.
Muide, kuigi AWS arendajatel on selge antipaatia .NETi vastu, toetavad nad .NET Core 2.1 jooksutajana, mis annab kÔik arendamise vÔimalused.
Ja lĂ”petuseks â AWS pakub eraldi teenust videofailidega töötamiseks â AWS Elemental MediaConvert.
Töö olemus on uskumatult lihtne: vĂ”tame S3 lingi lĂ€htevideole, kirjutame AWS Console'i, .NET SDK-s vĂ”i lihtsalt JSON-is, mida soovime videoga teha, ja kutsume teenuse. See ise haldab sisendkĂŒsimuste töötlemiseks jĂ€rjekordi, laadib tulemuse automaatselt S3 ja, mis kĂ”ige tĂ€htsam, genereerib iga staatuse muutuse jaoks CloudWatch Event. See vĂ”imaldab meil rakendada lambdate trikke video töötlemise lĂ”petamiseks.

Nii nÀeb vÀlja lÔplik arhitektuuri variant.
Kogu backend on paigutatud kahte lambdasse. Veel ĂŒks on vertikaalsete videote pööramiseks, kuna sellist tööd ei saa teostada ĂŒhe kĂ€iguga.
Front-end SPA-rakenduse kujul, kirjutatud JS-is ja kompileeritud lĂ€bi pug, paneme avalikku S3 korvi. Videote ĂŒleslaadimiseks ei vaja me mingit serveripoolset koodi â piisab, kui avada S3 poolt pakutavad REST-lĂ”pp-punktid. Ainus punkt â Ă€rge unustage seadistada poliitikaid ja CORS-i.
Peidetud probleemid
- AWS MediaConvert, mingil tunmatu pÔhjusel, lisab heli ainult iga videolÔigu peale eraldi, kuigi vajalik on lÔbus laul, mis kÀivitub koos sissejuhatusega.
- Vertikaalid videod tuleb töödelda eraldi. AWS ei vÀrava mustade ribade ja paneb videod 90°.
Lihtne mure.
Hoolimata kogu Statelessi ilust, on vajalik jĂ€lgida, mida video tegemiseks teha: kas liita vĂ”i lisada heli juba valmis videopildile. Ănneks toetab MediaConvert metainformatsiooni edastamist oma Tööde kaudu, ja me saame alati rakendada lihtsa lipu, nĂ€iteks âisMasterSoundJobâ, need metainformatsioonid eristades igal etapil.
Serverless vĂ”imaldab suurepĂ€raselt töötada NoOps'i lĂ€henemisviisiga â meetod, mis vĂ€listab eraldi meeskonna vajaduse, kes vastutab projekti infrastruktuuri eest. Nii et asi oli kerge â juurutame lahenduse AWS-is ilma sĂŒsteemiadminnide osaluseta, kellel alati on muud toimetused.
Ja et seda kĂ”ike kiirendada, maksimaalselt automatiseerime juurutamise AWS CloudFormation'i skripti kaudu, vĂ”imaldades juurutamist ĂŒhe nupuvajutusega otse VS-st. LĂ”puks, 200 rea koodi fail vĂ”imaldab vĂ€lja anda valmis lahenduse, kuigi CloudFormation'i sĂŒntaks vĂ”ib harjumatus olukorras ĆĄokeerida.
Kokku
Serverless â ei ole paanitse. Kuid see lihtsustab elu olukordades, kus on kolm limiiti: «piiratud ressursid â lĂŒhike tĂ€htaeg â vĂ€he raha».
Rakenduste omadused, millele Serverless sobib.
- ilma Long-Running protsessidest. API Gateway'i karm piir on 29 sekundit, lambdade karm piir on 5 minutit;
- kirjeldatakse Event-Driven arhitektuuriga;
- jagatakse madala seotuse komponentideks, nagu SOA;
- ei nÔua suurt tööd oma olekuga;
- kirjutatud .NET Core'is. .NET Framework'i jaoks on endiselt vajalik vÀhemalt Docker koos vastava jooksukeskkonnaga.
Serverless lÀhenemise eelised
- vÀhendab infrastruktuuri kulusid;
- vÀhendab lahenduse tarnimise kulusid;
- automaatne skaaleerimine;
- arendus tehnoloogia tipptasemel.
Puudused, konkreetse nÀite pÔhjal
- Jaotatud jÀlgimine ja logimine - osaliselt lahendatav AWS X-Ray ja AWS CloudWatch kaudu;
- ebamugav silumine;
- Cold Start ilma koormuseta;
- Kasutajale ebasĂ”bralik AWS liides - universaalne probleem đ
Allikas: habr.com
