Evoluția constantă a arhitecturii software aduce în prim plan abordări inovatoare de a dezvolta, instala și de a gestiona aplicații. În acest context, se remarcă două paradigme extrem de populare: serverless computing și arhitectura bazată pe microservicii. Serverless computing se caracterizează prin abstracția procesului de gestiune a serverelor și prin scalabilitate la cerere, dând programatorilor oportunitatea de a se axa pe cod, fără a fi preocupați de problemele de infrastructură. Arhitectura bazată pe microservicii, pe de altă parte, pune accentul pe realizarea de aplicații înțelese ca o colecție de servicii mici, slab cuplate și implementate independent unele de altele.
Având în vedere principiile și beneficiile lor, se impun întrebările: Putem folosi și componenta serverless, și microserviciile? Sunt total diferite sau sunt complementare? Articolul de față răspunde acestor întrebări, explorând sinergiile ce combină serverless computing cu arhitectura bazată pe microservicii. Examinând interacțiunea dintre aceste două abordări, vom analiza beneficii precum scalabilitatea crescută, flexibilitatea și problemele operaționale reduse, toate fiind aspecte moderne ale dezvoltării software.
Serverless computing și microserviciile reprezintă două abordări moderne în dezvoltarea software, fiecare având beneficii și modele operaționale distincte. Înțelegerea diferențelor dintre serverless computing și microservicii este crucială pentru integrarea eficientă și alegerea uneia dintre aceste abordări în arhitecturile aplicațiilor moderne. Tabelul 1 oferă o comparație între serverless computing și arhitectura bazată pe microservicii în ceea ce privește instalarea, scalabilitatea, complexitatea, studiile de caz și modelele de execuție. Înțelegerea acestor aspecte ne ajută să luăm decizia de a folosi una din abordări sau o combinație, pe baza cerințelor speciale și a nevoilor operaționale ale aplicațiilor.
Criteriu | Serverless | Microservicii |
---|---|---|
Infrastructură | Furnizorul cloud gestionează | Programatorii gestionează mașinile |
infrastructura; serverele nu sunt | virtuale, containerele sau procesele de | |
gestionate local. | orchestrare. | |
Instalare | Funcționalitățile sunt instalate | Serviciile sunt instalate independent, |
individual, la cerere. | majoritar pe bază de containere. | |
Scalare | Scalarea se efectuează granular, la | Scalarea se efectuează în principal la |
nivel de funcție/funcționalitate, la | nivel de serviciu gestionat independent. | |
cerere. | ||
Utilizarea resurselor | Resursele sunt utilizate eficient prin | Control discret asupra alocării |
intermediul scalării automate. | resurselor, prin intermediul | |
containerelor. | ||
Complexitate de dezvoltare | Dezvoltare simplificată; concentrare pe | Complexitate crescută datorată |
scrierea de cod. | gestionării de servicii multiple. | |
Complexitate operațională | Complexitate operațională redusă; | Complexitate crescută în gestionarea de |
infrastructură abstractizată. | instalări și de servicii. | |
Studii de caz | Aplicații bazate pe evenimente, sarcini | Aplicații la scară largă ce necesită |
de lucru intermitente. | modularitate și independență. | |
Model de execuție | Funcții lipsite de stare, efemere, | Execuție continuă, gestionare internă a |
declanșate de evenimente. | stării. | |
Gestionarea stării | Stocarea externă a stării; funcții | Gestionarea internă a stării; serviciile |
lipsite de stare. | pot păstra starea. | |
Model de scalabilitate | Scalare automată la cerere. | Scalare manuală sau automată la nivel de |
serviciu | ||
Facturare | Plată-per-utilizare; costuri | Cost fix sau preț calculat per resursă. |
eficientizate pentru volum mare de | ||
interogări. |
În ceea ce privește gestionarea proceselor de instalare și a infrastructurii, serverless computing simplifică semnificativ procesul de gestionare a infrastructurii care devine responsabilitatea furnizorului de cloud. Acest model de lucru elimină necesitatea ca programatorii să gestioneze mașini virtuale, containere sau alte componente inferioare de infrastructură. Spre deosebire, microserviciile necesită o gestionare mai directă a infrastructurii, de multe ori folosindu-se tehnologii de containerizare precum Docker sau instrumente de orchestrare precum Kubernetes. Fiecare microserviciu este rulat/instalat independent, echipele de programatori sau devops ocupându-se de provizionarea, scalarea și mentenanța acestor servicii. Figura 1a. ilustrează un sistem instalat, folosindu-se instanțe containerizate și Amazon Elastic Container Service (ECS) pentru a orchestra toate aceste instanțe ale containerelor. Amazon ECS este un serviciu potent de orchestrare a containerelor care facilitează rularea și scalarea aplicațiilor bazate pe Docker, în AWS. Se integrează cu Amazon Elastic Container Registry, aducând automat ultimele imagini de pe container. Pentru a gestiona traficul intens, clusterul ECS se integrează cu o aplicație load balancer care distribuie solicitările de intrare în containere. Pe de altă parte, Figura 1b. ilustrează o arhitectură serverless unde funcțiile individuale sunt rulate/instalate și executate la cerere, fără a fi nevoie de gestionarea serverelor. AWS API Gateway reprezintă punctul de acces al solicitărilor de intrare, care sunt redirecționate către cea mai potrivită funcție AWS Lambda. Aceste funcții Lambda execută apoi logica customizată de business, procesând cererea și extrăgând informația din bazele de date necesare. Cu precădere, acest model de instalare serverless elimină nevoia de a asigna porturi specifice, sistemul fiind construit în jurul unor căi și resurse desemnate. Mai mult, funcțiile AWS Lambda au capacitatea de auto-scalare, ceea ce le permite să scaleze sus/jos dinamic ca răspuns la volum (Allen, 2023).
Figura 1(a) - Privire de ansamblu asupra unui sistem cu microservicii, AWS Application Load Balancer și Elastic Container Services. Figura 1(b) - Privire de ansamblu asupra unui sistem ce folosește strategia serverless cu AWS API gateway și funcții Lambda.
Scalabilitatea și utilizarea resurselor diferă de la un model la altul. Aplicațiile serverless beneficiază de scalare automată la cerere, gestionată de un furnizor cloud la nivel granular, de funcție. De aici, rezultă gestionarea eficientă a volumelor variabile și un model de facturare ce se bazează pe utilizare propriu-zisă, reducând costurile aplicațiilor ce au vârfuri de solicitări. Microserviciile, deși pot scala independent, pot face acest lucru la nivel de serviciu, nu la nivel de funcție. Utilizarea resurselor se realizează prin orchestrarea bazată pe containere, aspect ce poate fi complex, dar care oferă control granular asupra performanței și a alocării de resurse (Fan et al., 2020).
Complexitatea operațională și cea de programare a acestor modele variază de asemenea. Serverless computing simplifică dezvoltarea, abstractizând gestionarea infrastructurii, ceea ce le permite programatorilor să se axeze pe cod. Totuși, această diminuare a complexității operaționale aduce cu sine provocări precum inițializări (cold starts), durată de execuție limitată și gestionarea stării. Pe de altă parte, microserviciile introduc semnificativ de multă complexitate operațională și de dezvoltare datorită necesității de a gestiona servicii multiple, inclusiv comunicarea între serivcii, uniformitatea datelor și fluxurile de instalare (deployment pieplines). Practicile DevOps reduse sunt esențiale pentru a gestiona integrarea continuă, procesul de instalare și monitorizarea acestor servicii (Tozzi, 2021).
Aplicabilitatea și studiile de caz asociate modelelor serverless și microserviciile scot în evidență diferențele lor și mai mult. Serverless computing este ideal pentru aplicații bazate pe evenimente, precum cele care răspund interogărilor HTTP, care procesează fluxuri de date sau care gestionează taskuri periodice. Scalarea automată și modelul de facturare în care se plătește în funcție de consum sunt foarte avantajoase pentru aplicații ce au volume de muncă impredictibile cu vârfuri de consum/cerere. Tot astfel, microserviciile sunt potrivite pentru aplicații complexe, la scară largă, unde modularitatea și instalarea independentă a serviciilor sunt benefice. Acest model este adesea utilizat în scenarii unde diferite părți ale aplicației au cerințe de scalare diferite, trebuie dezvoltate sau instalate independent de către echipe diferite (Allen, 2023).
În ultimul rând, modelele de execuție ale arhitecturilor serverless și ale celor bazate pe microservicii diferă semnificativ. Funcțiile serverless sunt lipsite de stare și efemere, fiecare invocare rulând într-un nou mediu. Acest lucru necesită soluții externe de stocare pentru păstrarea stării, iar execuția acestor funcții este declanșată de evenimente care există doar atâta timp cât evenimentele sunt procesate. Spre deosebire, microserviciile pot menține starea intern și pot rula continuu, facilitând gestionarea proceselor de lungă durată și a interacțiunilor complexe. Modelul de execuție, când vorbim de microservicii, este mai tradițional, serviciile comunicând prin API și gestionându-și propria stare, adesea folosind soluții de stocare persistente (Familiar, 2015).
În timp ce serverless computing și arhitectura bazată pe microservicii au în comun obiectivul de a îmbunătăți scalabilitatea, flexibilitatea și eficiența în cadrul instalărilor, acestea diferă semnificativ în modul în care este abordată gestiunea infrastructurii, scalabilitatea, complexitatea proceselor de programare, studiile de caz și modelele de execuție. A înțelege aceste diferențe permite organizațiilor să aleagă modelul corect sau o combinație de modele pentru a răspunde nevoilor specifice și a optimiza atât procesul de dezvoltare software, cât și strategiile operaționale.
Serverless și microserviciile sunt două tehnologii diferite. În timp ce microserviciile se referă la un stil arhitectural pentru crearea de aplicații sub formă de colecții de servicii slab cuplate, serverless se referă la o metodă de a rula aplicațiile cu ajutorul furnizorului de cloud ce gestionează infrastructura. Astfel, microserviciile sunt o modalitate de a realiza o aplicație, în timp de serverless este o modalitate de a rula o aplicație (Tozzi, 2021).
În ciuda diferențelor, serverless și microserviciile sunt strâns relaționate. Ambele sunt prevalente în mediile cloud, iar funcțiile serverless pot fi folosite pentru a găzdui microservicii. Tradițional, rularea microserviciilor necesită gestionarea de mașini virtuale sau containere. Spre deosebire, serverless computing elimină nevoia unei astfel de gestiuni de infrastructură, ceea ce le permite programatorilor să pună accent pe scrierea de cod.
În practică, se poate crea un "microserviciu serverless", dezvoltându-se un microserviciu și instalându-l/implementându-l printr-o funcție serverless. Acest model este avantajos pentru microservicii bazate pe evenimente sau microservicii ce au volume de lucru impredictibile sau variabile, infrastructura serverless optimizând utilizarea resurselor și simplificând complexitățile operaționale.
Să ne gândim la serverless ca la niște cartofi prăjiți, iar la microservicii precum la ketchup. Acestea sunt complementare, dar nu dependente unele de altele. Tot așa cum putem savura cartofii pai cu muștar sau un hamburger cu ketchup, microserviciile pot fi implementate fără serverless, iar serverless poate rula funcții ce se bazează pe non-microservicii (Tozzi, 2021).
Serverless este o metodă de a găzdui microservicii, dar nu este singura metodă. Nu instalăm și nu gestionăm microserviciile similar cu modul în care tratăm funcțiile serverless. Ambele tehnologii oferă avantaje importante pentru cloud-native computing, dar se rezolvă altfel de probleme.
Microserviciile serverless devin din ce în ce mai populare în rândul programatorilor ce doresc instalare rapidă și costuri reduse. Această arhitectură este potrivită în special pentru aplicațiile web moderne și pentru aplicațiile mobile ce necesită scalare rapidă, fiabilă.
Împreună, microserviciile și tehnologiile serverless le permit programatorilor să construiască aplicații rapid, să le scaleze eficient și să optimizeze utilizarea resurselor. Această combinație se bazează pe punctele forte ale designului modular și ale funcționalităților predefinite, ceea ce o face ideală pentru aplicațiile moderne, dezvoltate într-un mediu Agile, în mediile cloud.
Microserviciile serverless au avantaje în câteva scenarii cheie:
Eficientizarea costurilor pentru start-upuri și afaceri mici:
Constrângeri de buget: Start-upurile și afacerile mici au adesea resurse financiare limitate. Microserviciile serverless le permit să plătească doar resursele computaționale utilizate în timpul execuției funcțiilor, în loc să plătească pentru mentenanța și utilizarea continuă a unor instanțe EC2 sau a unor mașini virtuale.
Volume de lucru impredictibile sau variabile:
Taskuri de scurtă durată și taskuri bazate pe evenimente:
Procesare bazată pe evenimente: Funcțiile serverless excelează în gestionarea taskurilor bazate pe evenimente, precum procesarea datelor încărcate pentru stocare, răspunsul trimis în urma interogărilor HTTP sau executarea de joburi programate. Tipic, aceste taskuri nu necesită un server persistent sau un container care să ruleze continuu.
Organizațiile pot adopta arhitecturi hibride, folosind atât platforme serverless, cât și containere tradiționale sau mașini virtuale pentru microservicii diferite. Această abordare optimizează costurile și îmbunătățește performanța prin alocarea de resurse în funcție de nevoile specifice ale aplicației. Mai mult, microserviciile destinate inițial arhitecturilor serverless pot fi migrate în containere cu modificări minimale. Ușurința cu care se poate face migrarea permite adaptarea practicilor Agile la cerințele în continuă evoluție ale aplicațiilor și la volumele de lucru ce evoluează și ele, ceea ce facilitează operațiuni eficiente și scalabile în medii diferite (Fan et al., 2020).
În concluzie, microserviciile serverless sunt ideale pentru eficientizarea costurilor, scalabilitate și flexibilitate. Acestea permit start-upurilor și afacerilor cu bugete limitate să folosească capabilitățile cloud computing fără investiții în infrastructură. Mai mult, sunt potrivite pentru gestionarea volumelor de lucru variabile și a taskurilor bazate pe evenimente, ceea ce permite o utilizare eficientă a resurselor și simplitate operațională. Capacitatea de a tranziționa ușor de la serverless la microservicii containerizate le face pe acestea din urmă și mai dezirabile de organizații ce caută să își optimizeze arhitectura cloud.
Allen, C. (2023, September 1). MICROSERVICES VS SERVERLESS FUNCTIONS
Familiar, B. (2015, January 1). What Is a Microservice?. , 9-19.
Fan, C., Jindal, A., & Gerndt, M. (2020, January 1). Microservices vs Serverless: A Performance Comparison on a Cloud-native Web Application.
de Mihai Darie
de Vlad Petrean