NÀpunÀited ja teabeallikad serverita rakenduste loomiseks

NÀpunÀited ja teabeallikad serverita rakenduste loomiseks
Kuigi serverita tehnoloogiad on viimastel aastatel kiiresti populaarsust kogunud, on nendega endiselt seotud palju vÀÀrarusaamu ja muresid. Tarnija sĂ”ltuvus, tööriistade komplekt, kulude juhtimine, kĂŒlm kĂ€ivitus, monitooring ja arenduse elutsĂŒkkel — need teemad on aktiivselt arutluse all serverita tehnoloogiate kontekstis. Selles artiklis kĂ€sitleme mĂ”ningaid mainitud teemasid ning jagame nĂ€punĂ€iteid ja viiteid kasulikele teabeallikatele, mis aitavad algajatel luua vĂ”imsaid, paindlikke ja kulutĂ”husaid serverita rakendusi.

Serverita tehnoloogiate vÀÀrarusaamad

Paljud arvavad, et serverituks tegemine ja serverivĂ€line andmetöötlus (Functions as a Service, FaaS) on peaaegu ĂŒks ja sama. See tĂ€hendab, et erinevus pole kuigi suur ja uuenduse kasutuselevĂ”tt on Ă”igustatud. Kuigi AWS Lambda on olnud ĂŒks serverita tehnoloogiate tĂ”usu "tĂ€hti" ja ĂŒks populaarsemaid komponente serverita arhitektuuris, representa see arhitektuur rohkem kui FaaS.

Serverita tehnoloogiate peamine pĂ”himĂ”te on see, et te ei pea muretsema infrastruktuuri haldamise ja skaleerimise pĂ€rast, maksate ainult selle eest, mida kasutate. Need kriteeriumid sobivad paljudele teenustele — AWS DynamoDB, S3, SNS vĂ”i SQS, Graphcool, Auth0, Now, Netlify, Firebase ja paljud teised. Üldiselt tĂ€hendab serveritus, et saate kasutada kĂ”iki pilvearvutuste vĂ”imalusi, ilma et peaksite haldama infrastruktuuri ja optimeerima seda skaleerimise nimel. Samuti tĂ€hendab see, et infrastruktuuri taseme turvalisus ei ole enam teie probleem, mis on suur eelis, arvestades turvastandardite jĂ€rgimise keerukust ja raskust. LĂ”puks ei pea te ostma teile kasutamiseks antud infrastruktuuri.

Serveritust saab pidada "meeleoluks": teatud mÔtteviisiks lahenduste projekteerimisel. VÀltige lÀhenemisi, mis nÔuavad igasuguse infrastruktuuri hooldust. Serverita lÀhenemise korral kulutame aega probleemide lahendamisele, mis mÔjutavad otse projekti ja toovad kasu meie kasutajatele: loome vastupidava Àriloogika, arendame kasutajaliideseid ning loome paindlikke ja usaldusvÀÀrseid API-sid.

NĂ€iteks, kui on vĂ”imalik vĂ€ltida vaba tekstiotsingu platvormi haldamist ja hooldamist, siis me just nii teeme. Selline lĂ€henemine rakenduste kogumisele vĂ”ib toote turule toomise aega oluliselt kiirendada, kuna teil ei ole enam vaja mĂ”elda keeruka infrastruktuuri haldamisele. Vabanege haldamise ja infrastruktuuri kulude kohustustest ning keskenduge rakenduste ja teenuste loomisele, mis on teie klientidele vajalikud. Patrick Debois nimetas sellist lĂ€henemist ‘servicefull’, see termin on aktsepteeritud serverita kogukonnas. Funktsioone tuleks kĂ€sitleda kui seoselemente teenustele, mida esitatakse looditava moodulina (selle asemel, et rakendada kogu raamatukogu vĂ”i veebirakendust). See tagab erakordse granulaarsuse rakenduse juurutamise ja muudatuste haldamisel. Kui te ei saa sel moel funktsioone juurutada, vĂ”ib see viidata sellele, et funktsioonid tĂ€idavad liiga palju ĂŒlesandeid ja neid tuleks refaktoreerida.

MĂ”ned inimesed tunnevad muret teenusepakkuja sĂ”ltuvuse ĂŒle pilve rakenduste arendamisel. Sama kehtib ka serverivaba tehnoloogia kohta ning see ei nĂ€i olema valearusaama tulemus. Meie kogemuse pĂ”hjal on AWS-is serverivabade rakenduste loomine koos AWS Lambda vĂ”imega siduda teisi AWS-teenuseid osaliselt need tĂ”endid, mis toetavad serverivaba arhitektuuri eeliseid. See on hea nĂ€ide sĂŒnergiast, kus tulemuse kogusumma ĂŒletab lihtsalt koostisosade summa. PĂŒĂŒdes vĂ€ltida teenusepakkuja sĂ”ltuvust, vĂ”ite kokku puutuda veelgi suuremate probleemidega. Konteinerite kasutamisel on kergem hallata oma abstraktsiooni taset erinevate pilveteenuse pakkujate vahel. Kuid kui jutt on serverivabadest lahendustest, siis ei tasu pingutused end Ă€ra, eriti kui arvestada algusest peale majanduslikku efektiivsust. Uurige kindlasti, kuidas teenusepakkujad teenuseid tarnivad. MĂ”ned spetsialiseeritud teenused sĂ”ltuvad teiste teenusepakkujate integratsioonipunktidest ja vĂ”ivad pakuda plug-and-play ĂŒhenduvust kohe vĂ€lja pakkuda. Lambda kutsumise tagamine API gateway lĂ”pupunktist on lihtsam kui pĂ€ringu edastamine mĂ”nes konteineris vĂ”i EC2 instantsis. Graphcool pakub lihtsat seadistamist Auth0 kaudu, mis on lihtsam kui kolmandate osapoolte autentimisvahendite kasutamine.

Õige teenusepakkuja valimine teie serverivaba rakenduse jaoks on arhitektuuritase otsus. Rakendust luues ei looda te, et ĂŒhel pĂ€eval naasete serverite haldamise juurde. Pilveteenuse pakkuja valik ei erine konteinerite, andmebaaside vĂ”i isegi programmeerimiskeele valikust.

MĂ”elge jĂ€rgnevatele kĂŒsimustele:

  • Milliseid teenuseid te vajate ja miks.
  • Milliseid teenuseid pakuvad pilveteenuse pakkujad ja kuidas saate neid kombineerida valitud FaaS-lahendusega.
  • Milliseid programmeerimiskeeli toetatakse (dĂŒnaamilise vĂ”i staatilise tĂŒĂŒbiga, kompileeritud vĂ”i tĂ”lgitud, millised on bench-markid, milline on jĂ”udlus kĂŒlma kĂ€ivitamise korral, milline on avatud lĂ€htekoodiga ökosĂŒsteem jne).
  • Millised on teie turvanĂ”uded (SLA, 2FA, OAuth, HTTPS, SSL jne).
  • Kuidas hallata CI/CD ja tarkvaraarenduse tsĂŒkleid.
  • Milliseid infrastruktuuri kui koodi lahenduste eeliseid saate kasutada.

Kui laiendate olemasolevat rakendust ja lisate jĂ€rk-jĂ€rgult serverivabu funktsioone, vĂ”ib see veidi piirata saadaval olevate vĂ”imaluste arvu. Siiski pakuvad peaaegu kĂ”ik serverivabad tehnoloogiad mingisuguseid API-sid (kas REST vĂ”i sĂ”numijĂ€rjekordade kaudu), mis vĂ”imaldavad luua laiendusi sĂ”ltumatult rakenduse tuumast ja lihtsa integreerimisega. Otsige teenuseid, millel on selged API-d, hea dokumentatsioon ja tugev kogukond, ning te ei eksi. Integreerimise lihtsus vĂ”ib sageli olla vĂ”tme mÔÔdik, ja see on tĂ”enĂ€oliselt ĂŒks peamisi pĂ”hjuseid, miks AWS on alates 2015. aastast Lambda turule tulnud.

Kuidas serverivabadus on kasulik

Serverivabu tehnoloogiaid saab rakendada praktiliselt igal pool. Siiski ei piirdu nende eelised vaid rakendamisviisidega. TĂ€na on pilvcomputing’u sisenemiskĂŒnnis nii madal just tĂ€nu serverivabadele tehnoloogiatele. Kui arendajatel on idee, kuid nad ei tea, kuidas juhtida pilvinfra ja optimeerida kulusid, ei pea nad otsima inseneri. Kui idufirma soovib luua platvormi, kuid kardab, et kulud vĂ”ivad uncontrolled‘iks minna, saavad nad hĂ”lpsasti kasutada serverivabu lahendusi.

Kuna kulude kokkuhoid ja skaleeritavuse lihtsus, on serverivabad lahendused vĂ”rdselt rakendatavad nii sise- kui vĂ€lissĂŒsteemides, sealhulgas veebirakendustes, millel on miljoneid kasutajaid. Arved mÔÔdetakse pigem euros, mitte sendina. Lihtsaim AWS EC2 (t1.micro) hinna rent kuus on €15, isegi kui te ei tee sellega midagi (kes pole kunagi unustanud sellest vĂ€lja lĂŒlitada?!). VĂ”rdluseks, et sama kulu tasemele jĂ”uda sama aja jooksul, peate kutsuma Lambda 512 MB ulatuses 1 sekundiks umbes 3 miljonit korda. Ja kui te ei kasuta seda funktsiooni, siis teile ei tule midagi maksma.

Kuna serverivaba tehnoloogia sĂ”ltub peamiselt sĂŒndmustest, on vanadesse sĂŒsteemidesse serverivaba infrastruktuuri ĂŒsna lihtne lisada. NĂ€iteks AWS S3, Lambda ja Kinesis abil saate luua analĂŒĂŒsiteenuse vanale jae sĂŒsteemile, mis suudab saada andmeid API kaudu.

Enamik serverivabu platvorme toetab erinevaid programmeerimiskeeli. Sageli on need Python, JavaScript, C#, Java ja Go. Üldiselt ei ole kĂ”igis keeltes raamatukogude kasutamise osas mingeid piiranguid, seega vĂ”ite kasutada oma lemmikuid avatud lĂ€htekoodiga raamatukogusid. Siiski on soovitatav mitte kuritarvitada sĂ”ltuvusi, et teie funktsioonid töötaksid optimaalselt ja ei hĂ€vitaks teie serverivabade rakenduste suurt skaleeritavuse eelist. Mida rohkem pakette tuleb konteinerisse laadida, seda kauem kulub kĂŒlma kĂ€ivitamise teostamiseks.

KĂŒlm kĂ€ivitamine tĂ€hendab, et konteiner, tĂ€itmisvĂ”ime ja veahaldur tuleb kĂ”igepealt algatada, enne kui neid kasutama hakatakse. Selle tĂ”ttu vĂ”ib funktsioonide teostamise viivitus ulatuda 3 sekundini, mis ei ole parim variant kannatamatutele kasutajatele. Kuid kĂŒlmad kĂ€ivitamised esinevad esmakordsel pĂ€ringul pĂ€rast mĂ”ne minuti pikkust seisaku lĂ”ppu. SeetĂ”ttu peetakse seda paljude arvates tĂŒhiseks ebamugavuseks, mida saab vĂ€ltida funktsiooni regulaarsel pingil hoidmisega, et seda tĂŒhikĂ€igul hoida. VĂ”i jĂ€etakse see aspekt sootuks tĂ€helepanuta.

Kuigi AWS on vĂ€lja andnud serverivaba SQL-andmebaasi Serverless Aurora, ei ole SQL-andmebaasid sellise kasutuse jaoks ideaalsed, kuna tehingute teostamisel sĂ”ltuvad nad ĂŒhendustest, mis vĂ”ivad kiiresti saada kitsaskohaks suure liikluse korral AWS Lambdas. Jah, arendajad parendavad pidevalt Serverless Aurorat ja teil tasub sellega eksperimenteerida, kuid tĂ€na sobivad serverivabade sĂŒsteemide jaoks palju paremini NoSQL-lahendused nagu DynamoDB. Siiski on selge, et see olukord muutub peagi.

Tööriist komplekt kehtestab samuti palju piiranguid, eriti kohaliku testimise valdkonnas. Kuigi olemas on lahendused nagu Docker-Lambda, DynamoDB Local ja LocalStack, nĂ”uavad need siiski pĂ”hjalikku tööd ja mĂ€rkimisvÀÀrset konfigureerimist. Siiski arendavad kĂ”ik need projektid aktiivselt, seega on see vaid ajakĂŒsimus, kuni tööriistade komplekt saavutab vajaliku taseme.

Serverivabade tehnoloogiate mÔju arendusprotsessile

Kuna teie infrastruktuur on lihtsalt konfiguratsioon, saab koodi seadistada ja juurutada skriptide abil, nĂ€iteks shell-skriptide kaudu. VĂ”i saab kasutada konfiguratsiooni kui koodi lahendusi nagu AWS CloudFormation. Kuigi see teenus ei paku konfiguratsiooni kĂ”igile valdkondadele, vĂ”imaldab see siiski mÀÀratleda spetsiifilised ressursid, mida kasutada Lambda-funktsioonidena. See tĂ€hendab, et seal, kus CloudFormation ei suuda, saate kirjutada oma ressursi (Lambda-funktsiooni), mis katab selle puudujÀÀgi. Nii saate teha mida iganes, isegi konfigureerida sĂ”ltuvusi vĂ€ljaspool teie AWS-ĂŒmbrust.

Kuna kĂ”ik need on lihtsalt konfiguratsioonid, saate parametriseerida oma juurutusskripte spetsiifiliste keskkondade, piirkondade ja kasutajate jaoks, eriti kui kasutate infrastruktuuri klastri lahendusi nagu CloudFormation. NĂ€iteks vĂ”ite juurutada iga haru jaoks oma infrastruktuuri koopia, et neid tĂ€ielikult eraldatult arendamise kĂ€igus testida. See kiirendab radikaalselt tagasiside saamist arendajatel, kui nad soovivad mĂ”ista, kas nende kood töötab Ă”igesti reaalajas keskkonnas. Juhtidel ei pea muretsema mitmete keskkondade juurutamise kulude ĂŒle, sest makstakse ainult tegeliku kasutamise eest.

DevOps'il on vĂ€hem muresid, kuna nad peavad vaid kinnitama, et arendajatel on Ă”ige konfiguratsioon. Ei pea enam haldama instantside, koormuse tasakaalustajate vĂ”i turvagruppide haldust. SeetĂ”ttu kasutatakse ĂŒha sagedamini terminit NoOps, kuigi on endiselt oluline osata infrastruktuuri konfigureerida, eriti IAM-konfiguratsiooni ja pilveressursside optimeerimise osas.

On vĂ€ga vĂ”imsaid tööriistu jĂ€lgimiseks ja visuaalse esituse tegemiseks, nagu Epsagon, Thundra, Dashbird ja IOPipe. Need vĂ”imaldavad jĂ€lgida serverita rakenduste hetkeseisundit, pakkuda logisid ja jĂ€lgida, registreerida jĂ”udluse mÔÔdikuid ja arhitektuuri kitsaskohti, teostada kulude analĂŒĂŒsi ja prognoosimist ning palju muud. Need mitte ainult ei anna DevOps-inseneridele, arendajatele ja arhitektidele pĂ”hjalikku ĂŒlevaadet rakenduste toimimisest, vaid vĂ”imaldavad ka juhtidel jĂ€lgida olukorda reaalajas, sekundi tĂ€psusega kuludest ressursside ja prognoositud kuludega. Sellise korraldamine hallatava infrastruktuuri puhul on palju keerulisem.

Serverless rakenduste kujundamine on palju lihtsam, kuna te ei pea juurutama veebiservereid, haldama virtuaalmasinaid ega konteinerite, plaasima servereid, töötlussĂŒsteeme, Interneti-lĂŒlsse jne. KĂ”igist neist kohustustest vabastamine vĂ”imaldab serverless arhitektuuril keskenduda peamisele — Ă€riliste ja klientide vajaduste rahuldamisele.

Kuigi tööriistade arsenal vĂ”iks olla parem (see paraneb iga pĂ€ev), saavad arendajad keskenduda ettevĂ”tte loogika rakendamisele ja rakenduse keerukuse parimale jaotamisele erinevate teenuste vahel arhitektuuri piires. Serverless rakenduste haldamine toimub sĂŒndmuste pĂ”hjal ja on abstrakteeritud pilveteenuse pakkuja poolt (nt SQS, S3 sĂŒndmused vĂ”i DynamoDB vood). SeetĂ”ttu piisab arendajatelt ainult Ă€riloogika mÀÀramisest teatud sĂŒndmustele reageerimiseks, ilma et muretseks optimaalse andmebaasi ning sĂ”numijĂ€rjekordade rakendamise vĂ”i andmete tĂ”hususe kohta konkreetsetes riistvaralao ĂŒlesseadetes.

Koodi saab kĂ€itada ja siluda kohapeal, nagu iga arenduse puhul. Moodulite testimine jÀÀb endiseks. Rakenduse kogu infrastruktuuri juurutamise vĂ”imalus konfigureeritava steki abil vĂ”imaldab arendajatel kiiresti olulisi tagasiside saada, muretsemata testimise kulude vĂ”i kulukate hallatavate keskkondade mĂ”ju ĂŒle.

Serverless rakenduste koostamise tööriistad ja meetodid

Ei ole ĂŒhtegi kindlat viisi serverless rakenduste koostamiseks. Samuti ei ole kindlat teenuste komplekti selle ĂŒlesande tĂ€itmiseks. TĂ€na on AWS juhtiv jĂ”ud vĂ”imsates serverless lahendustes, kuid tasub tĂ€helepanu pöörata ka Google Cloud, Zeit ja Firebase. Kui kasutate AWS-i, siis rakenduste koostamise lĂ€henemisviisina vĂ”ib soovitada Serverless Application Model (SAM), eriti C# kasutamisel, kuna Visual Studio pakub suurepĂ€rast tööriistade komplekti. SAM CLI suudab teha kĂ”ike seda, mida ka Visual Studio, seega ei kaota te midagi, kui liigute teise IDE vĂ”i tekstiredaktori juurde. Loomulikult töötab SAM ka teiste keeltega.

Kui kirjutate teistes keeltes, siis Serverless Framework on suurepÀrane avatud lÀhtekoodiga tööriist, mis vÔimaldab konfigureerida kÔike vÀga vÔimsate YAML konfiguratsioonifailide abil. Serverless Framework toetab ka erinevaid pilveteenuseid, seetÔttu soovitame seda neile, kes otsivad mitme pilve lahendust. Sellel on suur kogukond, mis on loonud hulga pluginaid igasuguste vajaduste jaoks.

Kohalikuks testimiseks sobivad hĂ€sti avatud lĂ€htekoodiga tööriistad nagu Docker-Lambda, Serverless Local, DynamoDB Local ja LocalStack. Serverless tehnoloogiad on endiselt arengu algusjĂ€rgus, nagu ka nende tööriistakomplekt, nii et keeruliste testimisstsenaariumide seadistamine vĂ”ib olla vĂ€ljakutsuv. Siiski on steigi kĂ€ivitamine ja seal testimine uskumatult odav. Ja teil ei ole vaja teha tĂ€pset kohaliku versiooni koopia pilvesĂŒsteemidest.

Pakettide suuruse vÀhendamiseks ja laadimise kiirusestamiseks kasutage AWS Lambda kihte.

Kasutage konkreetsete ĂŒlesannete jaoks Ă”igeid programmeerimiskeeli. Erinevatel keeltele on omad eelised ja puudused. Palju on benchmarke, kuid JavaScript, Python ja C# (.NET Core 2.1+) on AWS Lambda jĂ”udluse osas liidrid. Hiljuti lisandus AWS Lambda-sse Runtime API, mis vĂ”imaldab mÀÀrata soovitud keele ja tĂ€itmisplatvormi, nii et katsetage.

Hoidke pakettide suurus vĂ”imalikult vĂ€ike. Mida vĂ€iksemad nad on, seda kiiremini nad laaditakse. VĂ€ltige suurte raamatukogude kasutamist, eriti kui kasutasite neist vaid paari funktsiooni. Kui programmeerite JavaScriptis, siis kasutage selliseid kogumise tööriistu nagu Webpack, et optimeerida kogumist ja lisada ainult seda, mis teil tĂ”eliselt vajalik on. .NET Core 3.0-s on QuickJit ja Tiered Compilation, mis parandavad jĂ”udlust ja aitavad oluliselt kĂŒlmade kĂ€ivituste korral.

Serverless funktsioonide sĂ”ltuvus sĂŒndmustest vĂ”ib alguses keeruliseks muuta Ă€riloogika koordineerimise. SeetĂ”ttu vĂ”ivad sĂ”numijĂ€rjekorrad ja lĂ”pmĂ”isted olla ÀÀrmiselt kasulikud. Lambda-funktsioonid saavad ĂŒksteist kutsuda, kuid tehke seda vaid siis, kui te ei oota vastust („tulistasin ja unustasin”) — te ei taha ju saada arvet ootamise eest, kuni teine funktsioon lĂ”pule jĂ”uab. SĂ”numijĂ€rjekorrad on kasulikud Ă€riloogika osade eraldamiseks, rakenduste kitsaskohtade juhtimiseks ja tehingute töötlemiseks (kasutades FIFO jĂ€rjekordi). AWS Lambda funktsioone saab siduda SQS jĂ€rjekordadega kui „kinni jÀÀnud” sĂ”numite jĂ€rjekordadeks, mis jĂ€lgivad ebaĂ”nnestunud sĂ”numeid edasiseks analĂŒĂŒsiks. AWS Step Functionsi funktsioonid (lĂ”pmĂ”isted) on vĂ€ga kasulikud keerukate protsesside juhtimisel, mis vajavad funktsioonide kettide loomist. Selle asemel, et Lambda funktsioon kutsuks ĂŒlesse teise funktsiooni, saavad Step-funktsioonid koordineerida olekute ĂŒleminekuid, edastada andmeid funktsioonide vahel ja hallata funktsioonide globaalset olekut. See vĂ”imaldab mÀÀrata tingimused korduste jaoks vĂ”i mida teha konkreetse vea ilmnemisel — teatud tingimustes ÀÀrmiselt vĂ”imas tööriist.

KokkuvÔte

Viimastel aastatel on serverless tehnoloogiad arenenud erakordse kiirusel. Selle paradigma muutusega on seotud teatud vÀÀrarusaamad. TÀnu infrastruktuuri ja skaleerimise haldamise abstraktimisele pakuvad serverless lahendused mÀrkimisvÀÀrseid eeliseid: alates arendamise ja DevOps-protsesside lihtsustamisest kuni operaatorite kulude mÀrgise vÀhenemiseni.
Ja kuigi serverless lÀhenemisel ei ole puudusi, on olemas usaldusvÀÀrsed tehnikad ja disainimustrid, mis vÔimaldavad luua stabiilseid serverless rakendusi vÔi integreerida serverless koostisosad olemasolevatesse arhitektuuridesse.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster