Savjeti i resursi za izgradnju aplikacija bez servera

Savjeti i resursi za izgradnju aplikacija bez servera
Iako su tehnologije bez servera brzo stekle popularnost posljednjih godina, još uvijek postoje mnoge zablude i nedoumice koje su povezane s njima. Ovisnost o dobavljačima, alati, upravljanje troškovima, hladno pokretanje, praćenje i životni ciklus razvoja su teme o kojima se žestoko raspravlja kada su u pitanju tehnologije bez servera. U ovom članku ćemo istražiti neke od spomenutih tema, kao i podijeliti savjete i veze do korisnih resursa koji će pomoći početnicima da izgrade moćne, fleksibilne i isplative aplikacije bez servera.

Zablude o tehnologijama bez servera

Mnogi ljudi vjeruju da obrada podataka bez servera i servera (Funkcioniše kao usluga, FaaS) su skoro ista stvar. To znači da razlika nije prevelika i da je vrijedno uvesti novi proizvod. Iako je AWS Lambda bila jedna od zvijezda uspona tehnologije bez servera i jedan od najpopularnijih elemenata arhitekture bez servera, ova arhitektura ima više od FaaS-a.

Osnovni princip bez servera je da ne morate da brinete o upravljanju ili skaliranju vaše infrastrukture; plaćate samo ono što koristite. Mnogi servisi odgovaraju ovim kriterijumima - AWS DynamoDB, S3, SNS ili SQS, Graphcool, Auth0, Now, Netlify, Firebase i mnogi drugi. Općenito, bez servera znači korištenje svih mogućnosti računarstva u oblaku bez potrebe za upravljanjem i optimizacijom infrastrukture radi skaliranja. To također znači da sigurnost na nivou infrastrukture više nije vaš problem, što je velika prednost s obzirom na poteškoće i složenost ispunjavanja sigurnosnih standarda. Konačno, ne morate da kupujete infrastrukturu koja vam je data.

Bez servera se može smatrati „stanjem uma“: određenim mentalitetom prilikom dizajniranja rješenja. Izbjegavajte pristupe koji zahtijevaju održavanje bilo koje infrastrukture. Uz pristup bez servera, provodimo vrijeme rješavajući probleme koji direktno utiču na projekat i donose vrijednost našim korisnicima: kreirajući robusnu poslovnu logiku, razvijajući korisnička sučelja i razvijajući prilagodljive i pouzdane API-je.

Na primjer, ako je moguće izbjeći upravljanje i održavanje platforme za pretraživanje besplatnog teksta, onda ćemo to učiniti. Ovaj pristup izgradnji aplikacija može uvelike ubrzati vrijeme izlaska na tržište jer više ne morate razmišljati o upravljanju složenom infrastrukturom. Oslobodite se odgovornosti i troškova upravljanja infrastrukturom i fokusirajte se na izgradnju aplikacija i usluga koje su vašim klijentima potrebne. Patrick Debois je nazvao ovaj pristup 'uslužan', ovaj termin je prihvaćen u zajednici bez servera. Funkcije bi trebalo smatrati lepkom koji povezuje usluge zajedno kao module koji se mogu primeniti (umesto postavljanja cele biblioteke ili veb aplikacije). Ovo pruža nevjerovatnu granularnost za upravljanje implementacijama i promjenama u aplikaciji. Ako ne možete implementirati funkcije na ovaj način, to može značiti da funkcije rade previše stvari i da ih je potrebno refaktorirati.

Neki ljudi su zbunjeni ovisnošću o dobavljačima kada razvijaju aplikacije u oblaku. Isto je i sa tehnologijama bez servera, i malo je vjerovatno da će to biti rezultat zablude. Prema našem iskustvu, izgradnja aplikacija bez servera na AWS-u, zajedno sa sposobnošću AWS Lambda da agregira druge AWS usluge, dio je onoga što čini arhitekturu bez servera tako sjajnom. Ovo je dobar primjer sinergije, kada je rezultat kombinacije veći od pukog zbroja njenih dijelova. Pokušaj izbjegavanja zaključavanja dobavljača može dovesti do još više problema. Kada radite s kontejnerima, lakše je upravljati vlastitim slojem apstrakcije između dobavljača oblaka. Ali kada su u pitanju rješenja bez servera, trud se neće isplatiti, posebno ako uzmete u obzir isplativost od samog početka. Obavezno saznajte kako dobavljači pružaju usluge. Neke specijalizovane usluge se oslanjaju na tačke integracije sa drugim dobavljačima i mogu da obezbede „plug-and-play“ konekciju iz kutije. Lakše je obezbijediti Lambda poziv sa krajnje tačke API-ja gatewaya nego proxy zahtjev prema nekom kontejneru ili EC2 instanci. Graphcool omogućava jednostavnu konfiguraciju koristeći Auth0, što je lakše nego korištenje alata za autentifikaciju treće strane.

Odabir pravog dobavljača za vašu aplikaciju bez servera je odluka na arhitektonskom nivou. Kada kreirate aplikaciju, ne očekujete da ćete se jednog dana vratiti na upravljanje serverima. Odabir dobavljača u oblaku ne razlikuje se od odabira korištenja kontejnera ili baze podataka, ili čak programskog jezika.

Uzmite u obzir:

  • Koje usluge su vam potrebne i zašto.
  • Koje usluge pružaju provajderi u oblaku i kako ih možete kombinirati koristeći odabrano FaaS rješenje.
  • Koji su programski jezici podržani (dinamički ili statički otkucani, kompajlirani ili interpretirani, koji su standardi, koje su performanse hladnog starta, koji je ekosistem otvorenog koda, itd.).
  • Koji su vaši sigurnosni zahtjevi (SLA, 2FA, OAuth, HTTPS, SSL, itd.).
  • Kako upravljati svojim CI/CD i ciklusima razvoja softvera.
  • Koja rješenja infrastrukture kao koda možete iskoristiti?

Ako proširujete postojeću aplikaciju i postepeno dodajete funkcije bez servera, to može donekle ograničiti dostupne mogućnosti. Međutim, skoro sve tehnologije bez servera pružaju neku vrstu API-ja (preko REST-a ili čekanja poruka) koji vam omogućava da kreirate ekstenzije nezavisno od jezgre aplikacije i uz laku integraciju. Potražite usluge sa jasnim API-jima, dobrom dokumentacijom i jakom zajednicom i nećete pogriješiti. Lakoća integracije često može biti ključna metrika i vjerovatno je jedan od glavnih razloga zašto je AWS bio uspješan otkako je Lambda izašao 2015. godine.

Kada je korisno bez servera?

Tehnologije bez servera mogu se koristiti gotovo svuda. Međutim, njihove prednosti nisu ograničene samo na metode primjene. Barijera za ulazak u cloud computing danas je tako niska upravo zbog tehnologija bez servera. Ako programeri imaju ideju, ali ne znaju kako upravljati infrastrukturom oblaka i optimizirati troškove, onda ne moraju tražiti nekog inženjera da to uradi. Ako startup želi izgraditi platformu, ali je zabrinut da bi troškovi mogli izmaći kontroli, lako se može okrenuti rješenjima bez servera.

Zahvaljujući uštedi troškova i jednostavnosti skaliranja, rješenja bez servera su podjednako primjenjiva i na interne i na eksterne sisteme, sve do web aplikacije sa višemilionskom publikom. Računi se mjere u centima, a ne u evrima. Iznajmljivanje najjednostavnije AWS EC2 instance (t1.micro) na mjesec će koštati 15 €, čak i ako ništa ne uradite s njom (ko je zaboravio da je isključi?!). Za poređenje, da biste postigli ovaj nivo potrošnje u istom vremenskom periodu, trebalo bi da pokrenete Lambda od 512 MB za 1 sekundu otprilike 3 miliona puta. A ako ne koristite ovu funkciju, ne plaćate ništa.

Pošto je server bez servera prvenstveno vođen događajima, prilično je lako dodati infrastrukturu bez servera u stare sisteme. Na primjer, koristeći AWS S3, Lambda i Kinesis, možete kreirati uslugu analitike za naslijeđeni maloprodajni sistem koji može primati podatke preko API-ja.

Većina platformi bez servera podržava više jezika. Najčešće su to Python, JavaScript, C#, Java i Go. Obično svi jezici nemaju ograničenja u korištenju biblioteka, tako da možete koristiti svoje omiljene biblioteke otvorenog koda. Međutim, preporučljivo je ne prekomjerno koristiti ovisnosti kako bi vaše funkcije radile optimalno i ne bi poništile prednosti ogromne skalabilnosti vaših aplikacija bez servera. Što više paketa treba ubaciti u kontejner, to će duže trajati hladni start.

Hladni početak je kada prvo trebate inicijalizirati spremnik, vrijeme izvođenja i rukovalac greškama prije nego ih koristite. Zbog toga kašnjenje u izvršavanju funkcija može biti i do 3 sekunde, a to nije najbolja opcija za nestrpljive korisnike. Međutim, hladni startovi se javljaju pri prvom pozivu nakon nekoliko minuta neaktivne funkcije. Mnogi ovo smatraju manjom neugodnošću koja se može riješiti redovnim pingovanjem funkcije kako bi se održala u mirovanju. Ili u potpunosti ignorišu ovaj aspekt.

Iako je AWS objavljen SQL baza podataka bez servera Aurora bez serveraMeđutim, SQL baze podataka nisu idealne za ovu vrstu upotrebe jer se oslanjaju na veze za obavljanje transakcija, što može brzo postati usko grlo kada postoji veliki promet na AWS Lambda. Da, programeri stalno poboljšavaju Serverless Auroru, i trebali biste eksperimentirati s njom, ali danas NoSQL rješenja poput DynamoDB. Međutim, nema sumnje da će se ova situacija vrlo brzo promijeniti.

Komplet alata također nameće mnoga ograničenja, posebno u području lokalnog testiranja. Iako postoje rješenja poput Docker-Lambda, DynamoDB Local i LocalStack, ona zahtijevaju mukotrpan rad i značajnu količinu konfiguracije. Međutim, svi ovi projekti se aktivno razvijaju, tako da je samo pitanje vremena kada će alati dostići nivo koji nam je potreban.

Uticaj tehnologija bez servera na razvojni ciklus

Budući da je vaša infrastruktura jednostavno konfigurirana, možete definirati i implementirati kod pomoću skripti, kao što su shell skripte. Ili možete pribjeći rješenjima klase konfiguracija kao kod kao što je AWS CloudFormation. Iako ova usluga ne pruža konfiguraciju za sva područja, ona vam omogućava da definirate specifične resurse za korištenje kao Lambda funkcije. To jest, tamo gdje vas CloudFormation iznevjeri, možete napisati svoj vlastiti resurs (Lambda funkcija) koji će zatvoriti ovu prazninu. Na ovaj način možete učiniti bilo šta, čak i konfigurirati ovisnosti izvan vašeg AWS okruženja.

Budući da je sve samo konfiguracija, možete parametrirati svoje skripte za implementaciju za određena okruženja, regije i korisnike, posebno ako koristite rješenja infrastrukture kao koda kao što je CloudFormation. Na primjer, možete postaviti kopiju infrastrukture za svaku granu u spremištu tako da ih možete testirati potpuno izolovano tokom razvoja. Ovo radikalno ubrzava vrijeme kada programeri dobijaju povratne informacije kada žele razumjeti da li njihov kod radi adekvatno u živom okruženju. Menadžeri ne moraju da brinu o troškovima implementacije više okruženja jer plaćaju samo za stvarnu upotrebu.

DevOps imaju manje brige jer samo trebaju osigurati da programeri imaju ispravnu konfiguraciju. Nema više upravljanja instancama, balansera ili sigurnosnih grupa. Stoga se sve više koristi termin NoOps, iako je još uvijek važno moći konfigurirati infrastrukturu, posebno kada je u pitanju IAM konfiguracija i optimizacija cloud resursa.

Postoje vrlo moćni alati za praćenje i vidljivost kao što su Epsagon, Thundra, Dashbird i IOPipe. Omogućuju vam praćenje trenutnog stanja aplikacija bez servera, obezbjeđuju evidencije i tragove, bilježite metriku performansi i arhitektonska uska grla, obavljate analizu i predviđanje troškova i još mnogo toga. Ne samo da daju DevOps inženjerima, programerima i arhitektima sveobuhvatan uvid u performanse aplikacija, već i omogućavaju menadžerima da steknu uvid u trošenje resursa iz sekunde u sekundu u realnom vremenu i predviđanje troškova. Mnogo je teže ovo organizovati sa upravljanom infrastrukturom.

Dizajniranje aplikacija bez servera je mnogo lakše jer ne morate da postavljate web servere, upravljate virtuelnim mašinama ili kontejnerima, serverima za zakrpe, operativnim sistemima, Internet pristupnicima, itd. Apstrahovanje svih ovih odgovornosti omogućava arhitekturi bez servera da se fokusira na ono što je najvažnije: rešenje poslovne i potrebe kupaca.

Iako bi alat mogao biti bolji (poboljšava se svakim danom), programeri se mogu fokusirati na implementaciju poslovne logike i kako najbolje distribuirati složenost aplikacije na različite usluge unutar arhitekture. Upravljanje aplikacijama bez servera je zasnovano na događajima i apstrahuje ga dobavljač oblaka (na primjer, SQS, S3 događaji ili DynamoDB tokovi). Stoga programeri samo trebaju napisati poslovnu logiku kako bi reagirali na određene događaje i ne moraju brinuti o tome kako najbolje implementirati baze podataka i redove poruka ili kako optimalno raditi s podacima u određenim hardverskim skladištima.

Kod se može izvršavati i otklanjati greške lokalno, kao i kod bilo kojeg razvojnog procesa. Jedinično testiranje ostaje isto. Mogućnost implementacije cijele aplikacijske infrastrukture korištenjem prilagođene konfiguracije steka omogućava programerima da brzo dobiju važne povratne informacije bez brige o troškovima testiranja ili utjecaju na skupa upravljana okruženja.

Alati i tehnike za izgradnju aplikacija bez servera

Ne postoji poseban način za pravljenje aplikacija bez servera. Kao i set usluga za ovaj zadatak. Lider među moćnim rešenjima bez servera danas je AWS, ali obratite pažnju na to Google Cloud, vrijeme и Firebase. Ako koristite AWS, onda možemo preporučiti kao pristup prikupljanju aplikacija Model aplikacije bez servera (SAM), posebno kada se koristi C#, jer Visual Studio ima odlične alate. SAM CLI može učiniti sve što Visual Studio može, tako da nećete izgubiti ništa ako se prebacite na drugi IDE ili uređivač teksta. Naravno, SAM radi i sa drugim jezicima.

Ako pišete na drugim jezicima, Serverless Framework je odličan alat otvorenog koda koji vam omogućava da konfigurišete bilo šta koristeći veoma moćne YAML konfiguracione datoteke. Serverless Framework također podržava razne usluge u oblaku, pa ga preporučujemo onima koji traže multi-cloud rješenje. Ima ogromnu zajednicu koja je stvorila gomilu dodataka za sve potrebe.

Za lokalno testiranje, alati otvorenog koda Docker-Lambda, Serverless Local, DynamoDB Local i LocalStack su dobro prikladni. Tehnologije bez servera su još uvijek u ranoj fazi razvoja, kao i alati za njih, tako da ćete morati naporno raditi pri postavljanju složenih scenarija testiranja. Međutim, ispostavilo se da je jednostavno postavljanje steka u okruženje i testiranje tamo nevjerovatno jeftino. I ne morate praviti tačnu lokalnu kopiju okruženja u oblaku.

Koristite AWS Lambda slojeve da smanjite veličinu paketa i ubrzate vrijeme učitavanja.

Koristite prave programske jezike za određene zadatke. Različiti jezici imaju svoje prednosti i nedostatke. Postoji mnogo mjerila, ali JavaScript, Python i C# (.NET Core 2.1+) su lideri u pogledu AWS Lambda performansi. AWS Lambda je nedavno predstavio Runtime API koji vam omogućava da odredite željeni jezik i okruženje za izvršavanje, pa eksperimentirajte.

Održavajte male veličine paketa za implementaciju. Što su manje, to se brže učitavaju. Izbjegavajte korištenje velikih biblioteka, posebno ako koristite nekoliko funkcija iz njih. Ako programirate u JavaScript-u, koristite alate za izradu kao što je Webpack da biste optimizirali svoju verziju i uključili samo ono što vam je zaista potrebno. .NET Core 3.0 uključuje QuickJit i Tiered Compilation, koji poboljšavaju performanse i uvelike pomažu kod hladnih pokretanja.

Ovisnost funkcija bez servera o događajima može u početku otežati koordinaciju poslovne logike. Redovi poruka i državni strojevi mogu biti nevjerovatno korisni u tom pogledu. Lambda funkcije mogu pozvati jedna drugu, ali to rade samo ako ne očekujete odgovor ("otpali i zaboravi") - ne želite da vam se naplaćuje čekanje da se druga funkcija završi. Redovi poruka su korisni za izolovanje delova poslovne logike, upravljanje uskim grlima aplikacija i obradu transakcija (koristeći FIFO redove). AWS Lambda funkcije se mogu dodijeliti SQS redovima kao zaglavljenim redovima poruka koji prate neuspjele poruke za kasniju analizu. AWS Step Funkcije (mašine stanja) su vrlo korisne za upravljanje složenim procesima koji zahtijevaju ulančavanje funkcija. Umjesto da Lambda funkcija poziva drugu funkciju, funkcije Step mogu koordinirati prelaze stanja, prosljeđivati ​​podatke između funkcija i upravljati globalnim stanjem funkcija. Ovo vam omogućava da definišete uslove ponovnog pokušaja ili šta da radite kada se desi određena greška - veoma moćan alat pod određenim uslovima.

zaključak

Poslednjih godina tehnologije bez servera razvijaju se neviđenim tempom. Postoje određene zablude povezane s ovom promjenom paradigme. Apstraktom infrastrukture i upravljanjem skalabilnosti, rješenja bez servera nude značajne prednosti, od pojednostavljenog razvoja i DevOps procesa do velikog smanjenja operativnih troškova.
Iako pristup bez servera nije bez svojih nedostataka, postoje pouzdani obrasci dizajna koji se mogu koristiti za kreiranje robusnih aplikacija bez servera ili za integraciju elemenata bez servera u postojeće arhitekture.

izvor: www.habr.com

Dodajte komentar