ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 148
Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 145
Abonament PDF

Microservicii serverless

Nimrod Foldvari
IT Consultant @ msg systems Romania



PROGRAMARE

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.

Diferențe între modelele serverless și microservicii

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.

Sinergii între serverless și microservicii

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:

  1. 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.

    • Scalare eficientă și costuri reduse: Funcțiile serverless scalează automat în funcție de utilizare, minimizându-se astfel costurile pe perioadele puțin solicitante și scalându-se ușor în perioadele cu volum ridicat, fără costuri adiționale.
  2. Volume de lucru impredictibile sau variabile:

    • Volume variabile de lucru: Aplicațiile ce au volume de lucru impredictibile sau variabile beneficiază de arhitecturi serverless. În loc să se provizioneze și să se facă mentenanță pentru capacități fixe, serverless permite scalarea la cerere în funcție de cât se folosește. Astfel, resursele sunt alocate eficient, cu costuri mici.
  3. 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.

    • Procesare în mod batch: Taskurile executate intermitent sau în mod batch, precum procesarea de date sau joburile periodice pot fi gestionate eficient de funcțiile serverless. Această abordare ne scutește de costuri mari și de mentenanța unui server dedicat sau a unui container pentru taskuri sporadice (Allen, 2023).

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.

Referințe

  1. Allen, C. (2023, September 1). MICROSERVICES VS SERVERLESS FUNCTIONS

  2. Familiar, B. (2015, January 1). What Is a Microservice?. , 9-19.

  3. Fan, C., Jindal, A., & Gerndt, M. (2020, January 1). Microservices vs Serverless: A Performance Comparison on a Cloud-native Web Application.

  4. Tozzi, C. (2021, March 18). Microservices and Serverless: A Guide to the Technologies and Their Relationship.

LANSAREA NUMĂRULUI 148

Agile Craftsmanship

joi, 24 Octombrie, ora 18:30

Colors in Projects (București)

Facebook Meetup StreamEvent YouTube

Agile Leadership &
Ways of Working

miercuri, 30 Octombrie, ora 18:00

ING Hubs Romania (Cluj)

Facebook Meetup StreamEvent YouTube

Conferință TSM

NUMĂRUL 147 - Automotive

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects