Savjeti i resursi za izradu aplikacija bez poslužitelja

Savjeti i resursi za izradu aplikacija bez poslužitelja
Iako su tehnologije bez poslužitelja brzo stekle popularnost posljednjih godina, još uvijek postoje mnoge zablude i strahovi povezani s njima. Ovisnost o dobavljaču, alati, upravljanje troškovima, hladni početak, nadzor i životni ciklus razvoja vruće su teme kada je riječ o tehnologijama bez poslužitelja. U ovom ćemo članku istražiti neke od spomenutih tema, kao i podijeliti savjete i poveznice na korisne izvore informacija kako bismo pomogli početnicima u stvaranju snažnih, fleksibilnih i isplativih aplikacija bez poslužitelja.

Zablude o tehnologijama bez poslužitelja

Mnogi misle da obrada bez poslužitelja i bez poslužitelja (Funkcionira kao usluga, FaaS) su gotovo ista stvar. To znači da razlika nije prevelika i vrijedi uvesti novinu. Iako je AWS Lambda bila jedna od zvijezda vrhunca serverlessa i jedan od najpopularnijih elemenata serverless arhitekture, ova je arhitektura puno više od FaaS-a.

Osnovno načelo iza tehnologija bez poslužitelja je da ne morate brinuti o upravljanju i skaliranju svoje infrastrukture, plaćate samo ono što koristite. Mnogi servisi odgovaraju ovim kriterijima - AWS DynamoDB, S3, SNS ili SQS, Graphcool, Auth0, Now, Netlify, Firebase i mnogi drugi. Općenito, bez poslužitelja znači korištenje pune snage računalstva u oblaku bez potrebe za upravljanjem infrastrukturom i njezinim optimiziranjem za skaliranje. To također znači da sigurnost na razini infrastrukture više nije vaša briga, što je velika prednost s obzirom na poteškoće i složenost ispunjavanja sigurnosnih standarda. Konačno, ne morate kupiti infrastrukturu koja vam je pružena.

Bez poslužitelja može se smatrati "stanjem uma": određenim mentalitetom pri dizajniranju rješenja. Izbjegavajte pristupe koji zahtijevaju održavanje bilo kakve infrastrukture. S pristupom bez poslužitelja provodimo vrijeme rješavajući zadatke koji izravno utječu na projekt i donose koristi našim korisnicima: stvaramo održivu poslovnu logiku, razvijamo korisnička sučelja i razvijamo prilagodljive i pouzdane API-je.

Na primjer, ako je moguće izbjeći upravljanje i održavanje platforme za besplatno pretraživanje teksta, to je ono što ćemo učiniti. Ovaj pristup izradi aplikacija može uvelike ubrzati vrijeme izlaska na tržište jer više ne morate razmišljati o upravljanju složenom infrastrukturom. Uklonite odgovornosti i troškove upravljanja infrastrukturom i usredotočite se na izgradnju aplikacija i usluga koje vaši korisnici trebaju. Patrick Debois nazvao je ovaj pristup 'uslužno', termin je usvojen u zajednici bez poslužitelja. O funkcijama treba razmišljati kao o poveznici s uslugama kao modulima koji se mogu postaviti (umjesto postavljanja cijele biblioteke ili web aplikacije). Ovo pruža nevjerojatnu granularnost za upravljanje implementacijom i promjenama aplikacije. Ako ne možete implementirati funkcije na ovaj način, to može značiti da funkcije obavljaju previše zadataka i da ih je potrebno refaktorirati.

Neki su zbunjeni ovisnošću o dobavljaču pri razvoju aplikacija u oblaku. Isto vrijedi i za tehnologije bez poslužitelja, a to nije zabluda. Prema našem iskustvu, izgradnja aplikacija bez poslužitelja na AWS-u, u kombinaciji sa sposobnošću AWS Lambda da zajedno poveže druge AWS usluge, dio je snage arhitektura bez poslužitelja. Ovo je dobar primjer sinergije, kada je rezultat kombinacije više od pukog zbroja pojmova. Pokušaj izbjegavanja ovisnosti o dobavljaču može naići na još više problema. Kada radite sa spremnicima, lakše je upravljati vlastitim slojem apstrakcije između pružatelja usluga oblaka. Ali kada je riječ o rješenjima bez poslužitelja, trud se neće isplatiti, pogotovo ako se od samog početka uzme u obzir isplativost. Obavezno saznajte kako dobavljači pružaju usluge. Neke specijalizirane usluge oslanjaju se na integracijske točke s drugim dobavljačima i mogu ponuditi plug-and-play povezivost odmah nakon postavljanja. Lakše je pružiti Lambda poziv s krajnje točke API-ja pristupnika nego proslijediti zahtjev nekom spremniku ili EC2 instanci. Graphcool pruža jednostavnu konfiguraciju s Auth0, što je lakše od korištenja alata za provjeru autentičnosti treće strane.

Odabir pravog dobavljača za vašu aplikaciju bez poslužitelja arhitektonska je odluka. Kada izradite aplikaciju, ne očekujete da ćete se jednog dana vratiti upravljanju poslužiteljima. Odabir dobavljača oblaka ne razlikuje se od odabira korištenja spremnika ili baze podataka ili čak programskog jezika.

Smatrati:

  • Koje usluge trebate i zašto.
  • Koje usluge pružaju davatelji usluga u oblaku i kako ih možete kombinirati s odabranim FaaS rješenjem.
  • Koji su programski jezici podržani (s dinamičkim ili statičkim tipkanjem, kompilirani ili interpretirani, koja su mjerila, kakva je izvedba pri hladnom pokretanju, kakav je ekosustav 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širite postojeću aplikaciju i postupno dodate funkcionalnost bez poslužitelja, to može donekle ograničiti dostupne mogućnosti. Međutim, gotovo sve tehnologije bez poslužitelja pružaju neku vrstu API-ja (putem REST-a ili redova poruka) koji vam omogućuje stvaranje proširenja neovisno o jezgri aplikacije i uz jednostavnu integraciju. Potražite usluge s jasnim API-jima, dobrom dokumentacijom i snažnom zajednicom i nećete pogriješiti. Lakoća integracije često može biti ključna metrika i vjerojatno je jedan od glavnih razloga zašto je AWS tako uspješan otkako je Lambda objavljena 2015. godine.

Kada je dobro bez poslužitelja

Tehnologije bez poslužitelja mogu se primijeniti gotovo posvuda. No, njihove prednosti nisu ograničene samo na jedan način primjene. Barijera za ulazak u računalstvo u oblaku danas je tako niska zahvaljujući tehnologijama bez poslužitelja. Ako programeri imaju ideju, ali ne znaju kako upravljati cloud infrastrukturom i optimizirati troškove, onda ne moraju tražiti nekakvog inženjera da to napravi. Ako startup želi izgraditi platformu, ali se boji da bi troškovi mogli izmaći kontroli, lako se može okrenuti rješenjima bez poslužitelja.

Zbog uštede troškova i jednostavnosti skaliranja, rješenja bez poslužitelja jednako su primjenjiva za unutarnje i vanjske sustave, sve do web aplikacije s višemilijunskom publikom. Računi se mjere ne u eurima, već u centima. Najam najjednostavnije instance AWS EC2 (t1.micro) na mjesec dana koštat će 15€, čak i ako ne radite ništa s njom (tko ju nikad nije zaboravio isključiti?!). Za usporedbu, da biste dosegli ovu razinu potrošnje u istom vremenskom razdoblju, trebali biste pokrenuti Lambdu od 512 MB na 1 sekundu oko 3 milijuna puta. A ako ne koristite ovu značajku, onda ne plaćate ništa.

Budući da je sustav bez poslužitelja prvenstveno vođen događajima, prilično je lako dodati infrastrukturu bez poslužitelja na starije sustave. Na primjer, koristeći AWS S3, Lambda i Kinesis, možete stvoriti analitičku uslugu za stari maloprodajni sustav koji može primati podatke putem API-ja.

Većina platformi bez poslužitelja podržava više jezika. Najčešće je to Python, JavaScript, C#, Java i Go. Obično nema ograničenja za korištenje knjižnica na svim jezicima, tako da možete koristiti svoje omiljene knjižnice otvorenog koda. Međutim, preporučljivo je ne zlorabiti ovisnosti kako bi vaše funkcije radile optimalno i ne poništile prednosti ogromne skalabilnosti vaših aplikacija bez poslužitelja. Što više paketa treba ubaciti u spremnik, to će duže trajati hladni start.

Hladni početak je kada prvo trebate inicijalizirati spremnik, vrijeme izvođenja i rukovatelj greškama prije njihove upotrebe. 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, hladno pokretanje događa se pri prvom pozivu nakon nekoliko minuta mirovanja. Stoga mnogi ovo smatraju manjom smetnjom koja se može riješiti redovitim pinganjem funkcije kako bi ostala u stanju mirovanja. Ili u potpunosti zanemaruju ovaj aspekt.

Iako je AWS objavio SQL baza podataka bez poslužitelja Aurora bez poslužiteljaMeđutim, SQL baze podataka nisu idealne za ovu aplikaciju, jer ovise o vezama za izvođenje transakcija, što može brzo postati usko grlo s velikim prometom na AWS Lambda. Da, razvojni programeri neprestano poboljšavaju Auroru bez poslužitelja i trebali biste s njom eksperimentirati, ali danas NoSQL rješenja poput DynamoDB. No, nema sumnje da će se ova situacija vrlo brzo promijeniti.

Alati također nameću mnoga ograničenja, posebno u području lokalnog testiranja. Iako postoje rješenja poput Docker-Lambda, DynamoDB Local i LocalStack, ona zahtijevaju naporan rad i značajnu količinu konfiguracije. Međutim, svi se ti projekti aktivno razvijaju, pa je samo pitanje vremena kada će alat dosegnuti razinu koja nam je potrebna.

Utjecaj tehnologija bez poslužitelja na razvojni ciklus

Budući da je vaša infrastruktura samo konfiguracija, možete definirati i implementirati kod pomoću skripti, kao što su skripte ljuske. Ili možete pribjeći rješenjima klase konfiguracije kao koda kao što je Formiranje AWS oblaka. Iako ova usluga ne nudi konfiguraciju za sva područja, ona vam omogućuje definiranje specifičnih resursa za korištenje kao Lambda funkcije. Odnosno, tamo gdje vam CloudFormation ne uspijeva, možete napisati vlastiti resurs (Lambda funkcija) koji će zatvoriti ovaj jaz. Na ovaj način možete učiniti bilo što, čak i konfigurirati ovisnosti izvan vašeg AWS okruženja.

Budući da je sve samo konfiguracija, možete prilagoditi 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 implementirati kopiju infrastrukture za svaku granu u repozitoriju tako da ih možete testirati potpuno izolirano tijekom razvoja. Ovo drastično ubrzava povratne informacije za programere kada žele razumjeti radi li njihov kod adekvatno u živom okruženju. Upravitelji ne moraju brinuti o troškovima postavljanja višestrukih okruženja, budući da plaćaju samo stvarnu upotrebu.

DevOps imaju manje briga jer samo trebaju osigurati da programeri imaju ispravnu konfiguraciju. Više ne morate upravljati instancama, balanserima ili sigurnosnim grupama. Stoga se sve više koristi pojam NoOps, iako je još uvijek važno imati mogućnost konfiguriranja infrastrukture, posebice kada je u pitanju IAM konfiguracija i optimizacija resursa u oblaku.

Postoje vrlo moćni alati za praćenje i vizualizaciju kao što su Epsagon, Thundra, Dashbird i IOPipe. Omogućuju vam praćenje trenutnog stanja vaših aplikacija bez poslužitelja, omogućavaju bilježenje i praćenje, bilježe metriku performansi i uska grla u arhitekturi, vrše analizu troškova i predviđanje i još mnogo toga. Oni ne samo da DevOps inženjerima, programerima i arhitektima daju sveobuhvatan pogled na izvedbu aplikacije, već također omogućuju menadžerima da prate situaciju u stvarnom vremenu, s troškovima resursa po sekundi i predviđanjem troškova. Mnogo je teže to organizirati s upravljanom infrastrukturom.

Dizajniranje aplikacija bez poslužitelja puno je lakše jer ne morate postavljati web poslužitelje, upravljati virtualnim strojevima ili spremnicima, krpati poslužitelje, operativne sustave, internetske pristupnike itd. Apstrahiranjem svih ovih odgovornosti, arhitektura bez poslužitelja može se usredotočiti na jezgru - rješenje, poslovne i potrebe kupaca.

Iako bi skup alata mogao biti bolji (svakog dana postaje bolji), programeri se mogu usredotočiti na implementaciju poslovne logike i najbolju distribuciju složenosti aplikacije na različite usluge unutar arhitekture. Upravljanje aplikacijama bez poslužitelja temelji se na događajima i apstrahira pružatelj usluga oblaka (npr. SQS, S3 događaji ili DynamoDB tokovi). Stoga programeri samo trebaju napisati poslovnu logiku kako bi odgovorili na određene događaje i ne moraju brinuti o tome kako najbolje implementirati baze podataka i redove poruka ili kako organizirati optimalan rad s podacima u određenim hardverskim pohranama.

Kod se može pokretati i ispravljati pogreške lokalno, kao i kod bilo kojeg drugog procesa razvoja. Jedinično testiranje ostaje isto. Sposobnost postavljanja cijele aplikacijske infrastrukture s prilagođenom konfiguracijom snopa omogućuje programerima brzo dobivanje važnih povratnih informacija bez razmišljanja o cijeni testiranja ili utjecaju na skupa upravljana okruženja.

Alati i tehnike za izgradnju aplikacija bez poslužitelja

Ne postoji poseban način za izradu aplikacija bez poslužitelja. Kao i skup usluga za ovaj zadatak. AWS je vodeći među moćnim rješenjima bez poslužitelja danas, ali pogledajte također Google Cloud, vrijeme и Firebase. Ako koristite AWS, preporučeni pristup za prikupljanje prijava je Model aplikacije bez poslužitelja (SAM), posebno kada koristite C#, jer Visual Studio ima sjajan alat. SAM CLI može učiniti sve što može i Visual Studio, tako da nećete ništa izgubiti ako se prebacite na drugi IDE ili uređivač teksta. Naravno, SAM radi i s drugim jezicima.

Ako pišete na drugim jezicima, Serverless Framework izvrstan je alat otvorenog koda koji vam omogućuje da konfigurirate bilo što s vrlo moćnim YAML konfiguracijskim datotekama. Serverless Framework također podržava različite cloud usluge, pa ga preporučujemo onima koji traže multi-cloud rješenje. Ima ogromnu zajednicu koja je stvorila hrpu dodataka za sve potrebe.

Za lokalno testiranje dobro su prikladni alati otvorenog koda Docker-Lambda, Serverless Local, DynamoDB Local i LocalStack. Tehnologije bez poslužitelja još su u ranoj fazi razvoja, kao i alati za njih, tako da ćete se morati potruditi prilikom postavljanja za složene testne scenarije. Međutim, jednostavno postavljanje hrpe u okruženju i testiranje tamo nevjerojatno je jeftino. I ne morate napraviti točnu lokalnu kopiju okruženja u oblaku.

Upotrijebite AWS Lambda slojeve kako biste smanjili veličinu implementiranih paketa i ubrzali preuzimanja.

Koristite prave programske jezike za određene zadatke. Različiti jezici imaju svoje prednosti i nedostatke. Postoje mnoga mjerila, ali JavaScript, Python i C# (.NET Core 2.1+) vodeći su u pogledu izvedbe AWS Lambda. AWS Lambda nedavno je predstavio Runtime API, koji vam omogućuje da odredite željeni jezik i okruženje za vrijeme izvođenja, pa eksperimentirajte.

Neka veličine paketa budu male za implementaciju. Što su manji, to se brže učitavaju. Izbjegavajte korištenje velikih biblioteka, osobito ako koristite nekoliko značajki iz njih. Ako programirate u JavaScriptu, upotrijebite alat za izradu kao što je Webpack kako biste optimizirali svoju izgradnju i uključili samo ono što stvarno trebate. .NET Core 3.0 ima QuickJit i Tiered Compilation koji poboljšavaju performanse i puno pomažu pri hladnom pokretanju.

Oslanjanje funkcija bez poslužitelja na događaje može isprva otežati koordinaciju poslovne logike. U tom smislu, redovi poruka i automati stanja mogu biti nevjerojatno korisni. Lambda funkcije mogu pozivati ​​jedna drugu, ali to čine samo ako ne očekujete odgovor ("ispali i zaboravi") - ne želite da vam se naplati čekanje da druga funkcija završi. Redovi poruka korisni su za izolaciju dijelova poslovne logike, upravljanje uskim grlima aplikacija i obradu transakcija (koristeći FIFO redove). Funkcije AWS Lambda mogu se dodijeliti SQS redovima kao zaglavljenim redovima poruka koji prate neuspjele poruke za kasniju analizu. AWS Step Functions (strojevi stanja) vrlo su korisni za upravljanje složenim procesima koji zahtijevaju lančano povezivanje funkcija. Umjesto da Lambda funkcija poziva drugu funkciju, funkcije koraka mogu koordinirati prijelaze stanja, prosljeđivati ​​podatke između funkcija i upravljati globalnim stanjem funkcija. To vam omogućuje da definirate uvjete ponovnog pokušaja ili što učiniti kada se dogodi određena pogreška - vrlo moćan alat u određenim uvjetima.

Zaključak

Posljednjih godina tehnologije bez poslužitelja razvijaju se neviđenom brzinom. Postoje određene zablude povezane s ovom promjenom paradigme. Apstrahiranjem infrastrukture i upravljanja skaliranjem, rješenja bez poslužitelja nude značajne prednosti, od pojednostavljenog razvoja i DevOps procesa do golemog smanjenja operativnih troškova.
Iako pristup bez poslužitelja nije bez svojih nedostataka, postoje robusni obrasci dizajna koji se mogu koristiti za izgradnju robusnih aplikacija bez poslužitelja ili integraciju elemenata bez poslužitelja u postojeće arhitekture.

Izvor: www.habr.com

Dodajte komentar