
Kuigi serverita tehnoloogiad on viimastel aastatel kiiresti populaarsust kogunud, on nendega seotud endiselt palju mĂŒĂŒte ja muresid. Muidugi rÀÀgitakse serverivabadest tehnoloogiatest, kui teemad nagu sĂ”ltuvus tarnijast, tööriistakast, kuluhaldus, kĂŒlm kĂ€ivitus, jĂ€lgimine ja arendusprotsessi elutsĂŒkkel. Selles artiklis kĂ€sitleme mĂ”ningaid selliseid teemasid ning jagame nĂ€punĂ€iteid ja linke kasulikele allikatele, mis aitavad algajatel luua vĂ”imsaid, paindlikke ja kulutĂ”husaid serverita rakendusi.
MĂŒĂŒdid serverita tehnoloogiate kohta
Paljud arvavad, et serveritus ja serverivĂ€line andmetöötlus (, FaaS) on peaaegu sama asi. Tundub, et erinevus ei ole liiga suur ja see tasub end Ă€ra. Kuigi AWS Lambda on olnud ĂŒks serverita tehnoloogiate tĂ”usu 'tĂ€htedest' ja ĂŒks populaarsemaid komponente serverita arhitektuuris, esindab see arhitektuur siiski midagi enamat kui FaaS.
Serverita tehnoloogiate pĂ”himĂ”te seisneb selles, et te ei pea muretsema infrastruktuuri haldamise ja skaleerimise pĂ€rast, maksate vaid selle eest, mida kasutate. Sellistele kriteeriumidele vastab palju teenuseid - AWS DynamoDB, S3, SNS vĂ”i SQS, Graphcool, Auth0, Now, Netlify, Firebase ja paljud teised. Ăldiselt tĂ€hendab serveritus kĂ”ikide pilvandmetöötluse vĂ”imaluste kasutamist ilma infrastruktuuri haldamise ja selle optimeerimise vajaduseta skaleerimise nimel. See tĂ€hendab ka, et infrastruktuuri tasemel turvalisus ei ole enam teie probleem, mis on tohutu eelis, arvestades turvastandardite jĂ€rgimise raskusi ja keerukust. LĂ”puks ei pea te ostma teile kasutamiseks pakutavat infrastruktuuri.
Serveritust vĂ”ib pidada 'meeleoluks': teatud mĂ”tteviisiks lahenduste kavandamisel. VĂ€ltige lĂ€henemisviise, mis nĂ”uavad infrastruktuuri hooldamist. Serverita lĂ€henemisviisi puhul investeerime aega ĂŒlesannete lahendamisse, mis mĂ”jutavad otseselt projekti ja toovad kasu meie kasutajatele: loome jĂ€tkusuutlikku Ă€ri loogikat, arendame kasutajaliidesi ja töötame vĂ€lja kohandatavaid ning usaldusvÀÀrseid API-sid.
NĂ€iteks, kui on vĂ”imalik vĂ€ltida avatud tekstipĂ”hise otsinguplatvormi haldamist ja hooldamist, siis just nii me tegutseme. Selline rakenduste kokkupanemise lĂ€henemine vĂ”ib oluliselt kiirendada toote turule toomist, kuna te ei pea enam muretsema keeruka infrastruktuuri haldamise pĂ€rast. Vabanege infrastruktuuri haldamise kohustustest ja kuludest ning keskenduge rakenduste ja teenuste loomisele, mis on teie klientide jaoks vajalikud. Patrick Debua nimetas sellist lĂ€henemist , see termin on aktsepteeritud serverita kogukonnas. Funktsioone tuleks kĂ€sitleda kui siduvaid elemente teenuste, mis on disainitud kui juurutatavad moodulid (mitte kogu teegi vĂ”i veebirakenduse juurutamine). See tagab hĂ€mmastava juurutamise ja muudatuste haldamise granulaarsuse. Kui te ei saa funktsioone selliselt juurutada, vĂ”ib see viidata sellele, et funktsioonid teevad liiga palju ĂŒlesandeid ja need tuleks refaktoreerida.
MĂ”ned inimesed on segaduses tarnijast sĂ”ltuvuse pĂ€rast pilvandmetöötluse rakenduste arendamisel. Sama kehtib serverita tehnoloogiate kohta, ja see ei tundu olevat mĂŒĂŒt. Meie kogemuse kohaselt on serverita rakenduste loomine AWS-is koos AWS Lambda vĂ”imekusega ĂŒhendada teisi AWS teenuseid - kĂ”ik see osalt loob serverita arhitektuuride voorused. See on hea nĂ€ide sĂŒnergiast, kus tulemuse kogusumma on suurem kui lihtsalt komponentide summa. Kui ĂŒritate vĂ€ltida sĂ”ltuvust tarnijast, vĂ”ite silmitsi seista veelgi suuremate probleemidega. Mahutitega töötades on lihtsam hallata oma abstraktsioonitaset pilvandmeteenuste pakkujate vahel. Kuid serverita lahenduste puhul ei tasu pingutused end Ă€ra, eriti kui arvestada majanduslikku efektiivsust algusest peale. Uurige kindlasti, kuidas tarnijad teenuseid osutavad. mĂ”ned spetsialiseerunud teenused sĂ”ltuvad integratsioonipunktidest teiste tarnijatega ja vĂ”ivad vaikimisi pakkuda plug-and-play stiilis ĂŒhendamise vĂ”imalust. Lambda kutsumise tagamine API vĂ€rava lĂ”pp-punktist on lihtsam kui mĂ”ne konteineri vĂ”i EC2 instantsi kaudu pĂ€ringu suunamine. Graphcool pakub lihtsat konfigureerimist koos Auth0-ga, mis on lihtsam kui kasutada kolmandate osapoolte autentimisvahendeid.
Ăige teenusepakkuja valimine teie serverivaba rakenduse jaoks on arhitektuuri taseme otsus. Rakendust luues ei arvestata, et kunagi naased hallatavatele serveritele. Pilveteenuse pakkuja valimine ei erine konteinerite vĂ”i andmebaaside kasutamise valimisest ega ka programmeerimiskeele valimisest.
MÔelge:
- Milliseid teenuseid vajate ja miks.
- Milliseid teenuseid pakuvad pilveteenuse pakkujad ja kuidas saate neid kombineerida valitud FaaS-lahendusega.
- Milliseid programmeerimiskeeli toetatakse (kas dĂŒnaamilise vĂ”i staatilise tĂŒĂŒbistamisega, kompileeritavad vĂ”i tĂ”lgitavad, millised on jĂ”udluse piirangud, mis on kĂŒlma kĂ€ivituse puhul, milline on avatud lĂ€htekoodiga ökosĂŒsteem jne).
- Millised on teie turvanÔuded (SLA, 2FA, OAuth, HTTPS, SSL jne).
- Kuidas hallata teie CI/CD ja tarkvaraarenduse tsĂŒkleid.
- Milliseid infrastruktuuri kui koodi lahendusi saate kasutada.
Kui laiendate olemasolevat rakendust ja lisate jĂ€rk-jĂ€rgult serverivabu funktsioone, vĂ”ivad need piirata saadaolevaid vĂ”imalusi. Siiski pakuvad peaaegu kĂ”ik serverivabad tehnoloogiad mingeid API-sid (RESTi vĂ”i sĂ”numijĂ”u kaudu), mis vĂ”imaldavad laiendusi luua rakenduse tuumast sĂ”ltumatult ja kergesti integreerida. Otsige teenuseid, millel on selged API-d, hea dokumentatsioon ja tugev kogukond, ja te ei eksi. Integreerimise lihtsus vĂ”ib olla sageli vĂ”tme mÔÔdik, ja see on tĂ”enĂ€oliselt ĂŒks peamisi pĂ”hjusi, miks AWS on alates 2015. aastast Lambda turule tulnud.
Kuna serverivabadus on kasulik
Serverivabasid tehnoloogiaid saab rakendada praktiliselt igas valdkonnas. Kuid nende eelised ei piirdu vaid rakendusaladega. TĂ€napĂ€eval on pilvandmetöötluse sisenemiskĂŒnnis nii madal just serverivabade tehnoloogiate tĂ”ttu. Kui arendajatel on idee, kuid nad ei tea, kuidas pilveinfrastruktuuri hallata ja kulusid optimeerida, ei pea nad selleks inseneri otsima. Kui idufirma soovib luua platvormi, kuid kardab, et kulud vĂ”ivad minna kontrolli alt vĂ€lja, saavad nad hĂ”lpsasti kasutada serverivabu lahendusi.
Kulude kokkuhoiu ja lihtsa skaleeritavuse tĂ”ttu on serverivabad lahendused vĂ”rdselt rakendatavad nii sise- kui ka vĂ€listesĂŒsteemides, sealhulgas veebirakendustes, millel on miljoneid kasutajaid. Arved ei mÔÔdeta pigem eurodes, vaid sentides. KĂ”ige lihtsama AWS EC2 (t1.micro) instantsi rentimise hind kuu jooksul on âŹ15, isegi kui te seda ei kasuta (kes pole kunagi unustanud seda vĂ€lja lĂŒlitada?!). VĂ”rdluseks, et saavutada sellisel tasemel kulusid sama aja jooksul, peate kĂ€ivitama Lambda suurusega 512 MB umbes 3 miljonit korda ĂŒhe sekundi jooksul. Ja kui te seda funktsiooni ei kasuta, siis te ei maksa midagi.
Kuna serverivabad tehnoloogiad sĂ”ltuvad peamiselt sĂŒndmustest, saab serverivaba infrastruktuuri suhteliselt hĂ”lpsasti vanadesse sĂŒsteemidesse lisada. NĂ€iteks saate AWS S3, Lambda ja Kinesis abil luua analĂŒĂŒtikateenuse vanale jaemĂŒĂŒgisĂŒsteemile, mis suudab andmeid API kaudu hankida.
Enamik serverivabu platvorme toetab erinevaid programmeerimiskeeli. KĂ”ige sagedamini on need Python, JavaScript, C#, Java ja Go. Ăldiselt ei ole kĂ”ikide keelte puhul mingeid piiranguid teekide kasutamiseks, seega vĂ”ite kasutada oma lemmikuid avatud lĂ€htekoodiga teeke. Kuid on soovitatav mitte liialdada sĂ”ltuvustega, et teie funktsioonid töötaksid optimaalselt ja ei kaotaks teie serverivabade rakenduste hiiglasliku skaleeritavuse eeliseid. Mida rohkem pakette on vaja konteinerisse laadida, seda kauem kulub kĂŒlma kĂ€ivituse ajaks.
KĂŒlm kĂ€ivitamine on siis, kui tuleb kĂ”igepealt initsialiseerida konteiner, tĂ€itmisvahemik ja vigade töötleja enne nende kasutamist. SeetĂ”ttu vĂ”ib funktsioonide töökatkestus kesta kuni 3 sekundit, mis pole parim variant kĂ€rsitutele kasutajatele. KĂŒlmad kĂ€ivitamised toimuvad sageli esmakordsel taotlemisel pĂ€rast mĂ”nda minutist pausifunktsiooni. Nii et paljud inimesed peavad seda tĂŒhiseks ebamugavuseks, mida saab vĂ€ltida regulaarsete funktsioonide pinge kaudu, et hoida neid nagu mootori tĂŒhikĂ€igul. VĂ”i ignoreerivad nad seda aspekti tĂ€iesti.
Kuigi AWS on vĂ€lja andnud, kuid SQL-andmebaasid ei sobi selliseks kasutamiseks hĂ€sti, kuna tehingute tegemine sĂ”ltub ĂŒhendustest, mis vĂ”ivad suure liikluse korral AWS Lambdal kiiresti kitsaskohaks muutuda. Jah, arendajad parendavad pidevalt Serverless Aurora't, ja tasub seda proovida, kuid tĂ€na sobivad serverivabad sĂŒsteemid palju paremini NoSQL-lahendustele nagu. Siiski on selge, et see olukord muutub peagi.
Tööriistade osas on samuti mitmeid piiranguid, eriti kohaliku testimise vallas. Kuigi on olemas lahendusi nagu Docker-Lambda, DynamoDB Local ja LocalStack, nĂ”uavad need siiski palju tööd ja mĂ€rkimisvÀÀrset seadistamist. Kuid kĂ”ik need projektid arenevad aktiivselt, seega on lihtsalt ajakĂŒsimus, millal tööriistade tase ulatub vajalikule tasemele.
Serverivabade tehnoloogiate mÔju arendusprotsessile
Kuna teie infrastruktuur on lihtsalt konfiguratsioon, on vĂ”imalik koodi seadistada ja kĂ€itada skriptide, nĂ€iteks shell-skriptide abil. VĂ”i vĂ”ite kasutada konfiguratsioonina koodi lahendusi nagu . Kuigi see teenus ei paku konfiguratsiooni kĂ”igis valdkondades, vĂ”imaldab see siiski mÀÀrata konkreetsed ressursid, mida kasutada Lambda-funktsioonidena. See tĂ€hendab, et seal, kus CloudFormation teid petab, saate kirjutada oma ressursi (Lambda-funktsiooni), mis katab selle puudujÀÀgi. Seega saate teha peaaegu kĂ”ike, sealhulgas konfigureerida sĂ”ltuvusi vĂ€ljaspool oma AWS-ĂŒmbrust.
Kuna see on kĂ”ik lihtsalt konfiguratsioon, saate parametriseerida oma juurutusskriptid konkreetsete keskkondade, piirkondade ja kasutajate jĂ€rgi, eriti kui kasutate infrastruktuuridena koodi lahendusi nagu CloudFormation. NĂ€iteks saate juurutada iga haru jaoks, et tĂ€ielikult isoleeritud need arenduse kĂ€igus testida. See kiirendab radikaalselt tagasiside saamist arendajatelt, kui nad soovivad mĂ”ista, kas nende kood töötab elukeskkonnas adekvaatselt. Juhtidel ei pea olema muret selle ĂŒle, kui palju erinevate keskkondade juurutamine maksab, kuna tasustatakse ainult tegelikku kasutamist.
DevOps-il on vĂ€hem muresid, kuna nad peavad vaid veenduma, et arendajatel on Ă”ige konfiguratsioon. Enam ei pea haldama instantsse, tasakaalustajaid vĂ”i turbegruppe. SeetĂ”ttu kasutatakse ĂŒha sagedamini mĂ”istet NoOps, kuigi on endiselt oluline osata konfigureerida infrastruktuuri, eriti kui on juttu IAM-konfiguratsioonist ja pilveteenuste optimeerimisest.
On vĂ€ga vĂ”imsaid tööriistu jĂ€lgimiseks ja visualiseerimiseks, nagu Epsagon, Thundra, Dashbird ja IOPipe. Need vĂ”imaldavad jĂ€lgida serverivabade rakenduste hetkeseisu, pakuvad logisid ja jĂ€lgimist, registreerivad jĂ”udlusnĂ€itajaid ja arhitektuuri kitsaskohti, teevad kulude analĂŒĂŒsi ja prognoositavust ning palju muud. Need mitte ainult ei anna DevOps-inseneridele, arendajatele ja arhitektidele pĂ”hjalikku ĂŒlevaadet rakenduste tööst, vaid vĂ”imaldavad ka juhtidel jĂ€lgida olukorda reaalajas, sekundisi kulude ressursside ja kulude prognoosimisega. Sellise sĂŒsteemi haldamine on hallatavast infrastruktuurist oluliselt keerulisem.
Serverivabade rakenduste projekteerimine on oluliselt lihtsam, kuna teil ei ole vaja juurutada veebiservereid, hallata virtuaalmasinaid vĂ”i konteinerite, patcheerida servereid, operatsioonisĂŒsteeme, interneti vĂ€ravaid jne. KĂ”igist neist kohustustest abstraheerimine vĂ”imaldab serverivabal arhitektuuril keskenduda peamisele â ettevĂ”tte ja klientide vajaduste rahuldamisele.
Kuigi tööriistad vĂ”ivad olla paremad (need paranevad iga pĂ€ev), saavad arendajad keskenduda Ă€ri loogika rakendamisele ja rakenduse keerukuse optimaalsetele jaotustele erinevate teenuste vahel kogu arhitektuuri ulatuses. Serverivabade rakenduste haldamine pĂ”hineb sĂŒndmustel ja on pilveteenuse pakkuja poolt abstraktne (nt SQS, S3 sĂŒndmused vĂ”i DynamoDB vood). Seega peavad arendajad lihtsalt kirjutama Ă€ri loogika kindlatele sĂŒndmustele reageerimiseks ja nad ei pea muretsema selle ĂŒle, kuidas parimal viisil andmebaase ja sĂ”numijĂ€rjekordi teostada, ega selle ĂŒle, kuidas korraldada optimaalset andmetöötlust konkreetsetes riistvarahoidlates.
Koodi saab kohapeal kÀivitada ja siluda, nagu iga arendusprotsessi puhul. Moodulitestimine jÀÀb samaks. Rakenduse infrastruktuuri tÀieliku juurutamise vÔimalus konfigureeritava tehnoloogia abil vÔimaldab arendajatel kiiresti olulist tagasisidet saada, mÔtlemata testimise kuludele vÔi kallite haldusalade mÔjule.
Bessarveliste rakenduste koostamise tööriistad ja meetodid
Bessarveliste rakenduste koostamiseks ei ole kindlat meetodit. Nagu ka teenuste kogumit selle ĂŒlesande jaoks. TĂ€na on AWS juhtiv jĂ”ud tugevate bessarveliste lahenduste seas, kuid tasub tĂ€hele panna ka , ja . Kui kasutate AWS-i, siis vĂ”ib rakenduste koostamiseks soovitada (SAM), eriti C#-iga, kuna Visual Studio pakub suurepĂ€raseid tööriistu. SAM CLI suudab teha kĂ”ike seda, mida ka Visual Studio, seega ei kaota te midagi, kui lĂ€hete teise IDE vĂ”i tekstiredaktori juurde. Loomulikult töötab SAM ka teiste keeltest.
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-failide abil. Samuti toetab Serverless Framework erinevaid pilveteenuseid, seega soovitame seda neile, kes otsivad mitme pilve lahendust. Sellel on suur kogukond, kes on loonud palju pluginaid igasuguste vajaduste jaoks.
Kohapealseks testimiseks sobivad suurepĂ€raselt avatud lĂ€htekoodiga tööriistad nagu Docker-Lambda, Serverless Local, DynamoDB Local ja LocalStack. Bessarvelised tehnoloogiad on endiselt arengu algstaadiumis, nagu ka nendele mĂ”eldud tööriistade komplekt, seega vĂ”ib keeruliste testimistsenaariumide seadistamine olla vĂ€ljakutse. Kuid steki juurutamine keskkonnas ja seal testimine osutub uskumatult odavaks. Ja te ei vaja tĂ€pset kohapealset koopiat pilvesĂŒsteemidest.
Juhtige arendatud pakettide suurust ja kiirendage laadimist, kasutades AWS Lambda Layers.
Kasutage konkreetsete ĂŒlesannete jaoks Ă”igeid programmeerimiskeeli. Erinevatel keeladel on omad eelised ja puudused. Palju on benchamrke, kuid JavaScript, Python ja C# (.NET Core 2.1+) on AWS Lambda jĂ”udluse osas liidrid. Hiljuti ilmus AWS Lambda-s Runtime API, mis vĂ”imaldab mÀÀrata soovitud keele ja keskkonna, seega katsetage.
Hoia juurutamiseks paketid vĂ€iksed. Mida vĂ€iksemad nad on, seda kiiremini laaditakse. VĂ€ltige suurte teekide kasutamist, eriti kui kasutate neist ainult mĂ”nda funktsiooni. Kui programmeerite JavaScriptis, siis kasutage koostamisvahendeid nagu Webpack, et optimeerida koostamist ja lisada ainult seda, mis tĂ”eliselt vajalik on. .NET Core 3.0-l on QuickJit ja Tiered Compilation, mis parendavad jĂ”udlust ja aitavad vĂ€ga hĂ€sti kĂŒlmade kĂ€ivituste korral.
Bessarveliste funktsioonide sĂ”ltuvus sĂŒndmustest vĂ”ib alguses keerukaks muuta Ă€riloogika koordineerimist. SeetĂ”ttu vĂ”ivad sĂ”numijĂ€rjekorrad ja lĂ”ppautomaatide sĂŒsteemid olla ÀÀrmiselt kasulikud. Lambda funktsioonid saavad ĂŒksteist kutsuda, kuid tehke seda ainult juhul, kui te ei oota vastust ("laskisid ja unustasid") â ei tasu maksta selle eest, et oodata teise funktsiooni lĂ”ppu. SĂ”numijĂ€rjekorrad on kasulikud Ă€riloogika osade isoleerimiseks, rakenduse kitsaste kohtade haldamiseks ja tehingute töötlemiseks (FIFO jĂ€rjekordade kaudu). AWS Lambda funktsioonid vĂ”ivad olla seotud SQS jĂ€rjekordadega kui "seiskunud" sĂ”numite jĂ€rjekordadega, mis jĂ€lgivad ebaĂ”nnestunud sĂ”numeid edasise analĂŒĂŒsi jaoks. AWS Step Functions (lĂ”ppautomaatide sĂŒsteemid) on vĂ€ga kasulikud keeruliste protsesside haldamiseks, mis vajavad funktsioonide ketide loomist. Selle asemel, et Lambda funktsioon kutsuks teise funktsiooni, saavad Step-funktsioonid koordineerida olekute ĂŒleminekuid, edastada andmeid funktsioonide vahel ja juhtida funktsioonide globaalset olekut. See vĂ”imaldab mÀÀrata ĂŒmberkatsete tingimusi vĂ”i mida teha, kui esineb konkreetne viga â teatud tingimustes on see vĂ€ga vĂ”imas tööriist.
KokkuvÔte
Viimastel aastatel on bessarvelised tehnoloogiad arenenud enneolematult kiiresti. Sellise paradigmapöördega on seotud teatud vÀÀrarusaamad. TÀnu infrastruktuuri ja skaleerimise haldamise abstraktsioonile pakuvad bessarvelised lahendused mÀrkimisvÀÀrseid eeliseid: alates arendamise ja DevOpsi protsesside lihtsustamisest kuni suuremate opereerimiskulude vÀhendamiseni.
Kuigi serveriteta lÀhenemisel on puudusi, on olemas usaldusvÀÀrsed disainimustrid, millega saab luua vastupidavaid serveriteta rakendusi vÔi integreerida serveriteta komponente olemasolevatesse arhitektuuridesse.
Allikas: habr.com
