Arhitectura bazata pe microservicii: este aceasta abordarea potrivita pentru proiectele tale?

Acest articol a fost publicat in categoria Tehnologie in .

“Cu cat este mai complexa o solutie, cu atat mai dificila va fi dezvoltarea ei.”

Aceasta afirmatie suna cat de se poate de logic, nu este asa?

Abordarea bazata pe microservicii a fost creata tocmai ca sa demonteze acest mit. Ca rezultat al unei ample experiente de dezvoltare, aceasta abordare este considerata, in prezent, urmatorul pas pentru crearea de solutii complexe si flexibile.

Arhitectura de microservicii reprezinta o abordare modulara care permite fragmentarea unei solutii in mai multe elemente (servicii) de sine statatoare – elemente care functioneaza performant atat impreuna cat si separat.

Fiecare serviciu este dezvoltat separat, solutia finala fiind, practic, o suma a microserviciilor alocate. Pentru ca solutia sa ofere un mediu logic si fara blocaje, aceste servicii independente sunt gazduite si integrate pe un server si comunica intre ele folosind protocoale de limbaj agnostic.

Abordarea bazata pe microservicii este, de cele mai multe ori, prima optiune a dezvoltatorilor si clientilor (companiile care au nevoie de solutie), in egala masura, datorita beneficiilor pe care le ofera: actualizare facila a codului, scalabilitate pe fiecare serviciu, costuri reduse pentru dezvoltarea si implementarea aplicatiilor.

Pentru ce tipuri de proiecte este aceasta abordare potrivita?

Chiar daca abordarea bazata pe microservicii aduce o serie de avantaje, totusi ea nu este potrivita oricarui tip de business sau de proiecte.

Asadar, pentru ca aceasta abordare sa fie potrivita este esential sa:

  • vrei sa dezvolti solutii complexe (de exemplu, aplicatii monolitice extinse, solutii software complexe, migrarea si actualizarea unui sistem invechit);
  • lucrezi cu o echipa dedicata pentru a avea un proces de development dinamic si flexibil;
  • ai resursele necesare pentru o astfel de abordare si posibilitatea de a o manageria: poti implementa rapid aplicatii noi, poti sesiza rapid problemele si blocajele pe masura ce ele apar, folosesti cultura si practicile DevOps, ai echipe de testare si mentenanta performante, capabile sa mentina serviciile functionale (adaugarea de noi functionalitati, solutionarea erorilor din baza de date si a problemelor de conectare, etc).

Ai nevoie de suport pentru alegerea unei abordari potrivite in dezvoltarea proiectelor tale? Vorbeste cu expertii nostri!

Programeaza o sesiune de consultanta

Microservicii vs SOA?

Microserviciile si API-urile

Create ca porti de comunicare, API-urile le permit developerilor sa obtina accesul la datele unei aplicatii sau sa foloseasca functionalitatile unei aplicatii.

Practic, API-urile sunt framework-uri de comunicare ce faciliteaza interactiunea intre developeri si aplicatiile web si calea prin care un microserviciu poate fi distribuit catre utilizatori.

Microservicile se bazeaza pe API-uri private pentru a fi functionale (API-urile fiind responsabile atat pentru utilizarea cat si pentru expunerea serviciilor), acestea trimitand in mod obisnuit datele prin intermediul cererilor HTTP. Tipurile de design API includ REST, SOAP, GraphQL, gRPC, si cele mai multe folosesc formate de specificatii precum OpenAPI, RAML, sau AsyncAPI.

Sumarizand relatia dintre API-uri si microservicii, putem spune ca acestea sunt facute sa functioneze impreuna. Fiecare microserviciu are o natura descentralizata impunand comunicare bazata pe un framework specific.

Provocarile abordarii bazate pe microservicii

  • necesita capabilitati si resurse pentru managementul de produs (microserviciile sunt mai degraba produse decat proiecte);
  • fiind un model netraditional care se bazeaza pe elemente descentralizate, impune o atentie mai mare la management si sincronizari;
  • necesita automatizari pentru scalarea infrastructurii si evitarea erorilor si blocajelor;
  • fiecare microserviciu trebuie creat pentru o responsabilitate specifica, rezultand o crestere semnificativa a complexitatii;
  • fiind implementata in medii multi-cloud arhitectura bazata pe microservicii implica un risc mai mare la nivel de securitate;
  • testare complexa pentru aplicatiile bazate pe arhitectura de microservicii.

…si totusi, de ce abordarea bazata pe microservicii poate fi o alegere buna pentru dezvoltarea proiectului tau

  • ajuta companiile sa aiba o abordare agile;
  • le permite developerilor sa dezvolte aplicatii mult mai usor de scalat;
  • simplifica si accelereaza procesele de dezvoltare;
  • reduce timpul de dezvoltare;
  • microservicii – cod mai usor de inteles si preluat;
  • fiecare serviciu poate fi scalat independent;
  • nu exista limitari in alegerea limbajelor si framework-uri;
  • permite izolarea erorilor si blocajelor, ceea ce inseamna un impact redus asupra intregii solutii;
  • mentenanta facila.

Exemplu de proiect cu arhitectura de microservicii (dezvoltat de echipele noastre)

Am dezvoltat o solutie modulara pentru managementul deseurilor – SmartSanitation – folosind abordarea bazata pe microservicii. Aceasta solutie include:

  • o aplicatie mobila dedicata pentru colectorii de deseuri;
  • o aplicatie web cloud pentru management care integreaza mai multe module (CRM, Operatiuni, Financiar, etc.);
  • o aplicatie dedicata pentru clientul final.

Bazandu-se pe MSA (Microservices Architecture), SmartSanitation integreaza o serie de microservicii:

  • Prezentare – este un SPA (Single Page Application) care foloseste Angular si Typescript pentru a implementa facil modelele de domeniu si logica de business care sunt compatibile cu elementele similare din microservicii. Fiind un microserviciu, Presentation este scris, de asemenea, folosind principiile SOLID pentru a fi reactiv la evenimentele care folosesc RabbitMq, stoca datele proprii folosind baze de date separate, interactiona cu alte microservicii prin HTTP folosind Consul pentru obtinerea IP-ului si port pentru utilizarea DNS, evita erorile folosind Polly, segrega logica de business implementand pattern-ul Command pattern prin utilizarea MediatR.
  • CRMService – are rolul de a manageria utilizatorii, configura compania de administrare si stoca datele in PostgreSQL. CRMService contine urmatoarele tehnologii: C#, Asp.Net 5, PostgreSQL, EntityFramework Core ca ORM, OpenAPI, Steeltoe ca si client pentru Consul, MediatR pentru segregarea logicii de business.
  • TmService – integreaza contracte, produse, servicii cu optiuni management si stocare a fluxurilor de activitati. TmService receptioneaza evenimentele prin RabbitMq pentru a marca produsele cand se emit facturile automat (stocheaza datele in PostgreSQL). TmService utilizeaza urmatoarele tehnologii: C#, Asp.Net 5, PostgreSQL, MassTransit for RabbitMq client si implementari pub/sub pattern, EntityFramework Core ca ORM, OpenAPI, Steeltoe ca si client pentru Consul, MediatR pentru segregarea logicii de business.
  • FinancialService – este un microserviciu care urmareste toate facturile si tranzactiile si care permite crearea automata sau manuala de facturi. FinancialService interactioneaza cu PdfService, CrmService, TmService si ApiOrchestrator direct prin HTTP si trimite evenimente catre TmService prin RabbitMq. Stocheaza, de asemenea, datele in PostgreSQL. FinancialService utilizeaza urmatoarele tehnologii: C#, Asp.Net 5; PostgreSQL, MassTransit for RabbitMq client si implementari pub/sub pattern, EntityFramework Core ca ORM, OpenAPI, Polly pentru circuit breaker, Hangfire pentru programarea de job-uri, Refit pentru facilitarea comunicarii cu alte microservicii prin HTTP, Steeltoe ca si client pentru Consul, MediatR pentru segregarea logicii de business.
  • PdfService – este un serviciu agnostic ce comunica prin server-ul FTP cu posibilitatea de a stoca, citi si genera pdf-uri. PdfService utilizeaza urmatoarele tehnologii: C#, Asp.Net 5, IronPdf library pentru a genera pdf-uri din template-urile .cshtml, OpenAPI, Steeltoe ca si client Consul, MediatR pentru segregarea logicii de business.
  • EmailService – este un microserviciu agnostic care trimite email-uri catre conturi specifice folosind Sendgrid client. EmailService foloseste urmatoarele tehnologii: C#, Asp.Net 5, OpenAPI, MassTransit for RabbitMq client si implementari pub/sub pattern, SendGrid client, MediatR pentru segregarea logicii de business.
  • Autentificare – este un microserviciu ce creeaza conturi, genereaza toke-uri si pastreaza logica pentru autentificari. Stocheaza, de asemenea, datele in PostgreSQL. Integreaza urmatoarele tehnologii: C#, Asp.Net 5, PostgreSQL, OpenAPI, MediatR pentru segregarea logicii de business, MailKit pentru implementare custom smtp logic, Steeltoe ca si client pentru Consul, JWT pentru autorizare.
  • ApiGateway – este un serviciu de tip gateway ce are rolul de a expune puncte finale pentru microservicii si logica de autorizare. Este singurul serviciu care comunica direct cu aplicatiile clientului. ApiGateway integreaza urmatoarele tehnologii: C#, Asp.Net 5, Ocelot library pentru implementarea API Gateway folosind microserviciile DNS stocate in Consul, JWT pentru autorizare.
  • ApiOrchestrator – implementeaza logica de business personalizata prin agregarea datelor pe mobil si in facturi. ApiOrchestrator integreaza urmatoarele tehnologii: C#, Asp.Net 5, MediatR pentru segregarea logicii de business, OpenAPI, Polly pentru circuit breaker.
  • Proiecte comune (ApiKernel, DataAccessKernel, ErpCommons) – sunt folosite pentru implementarea principiului DRY (Do not Repeat Yourself), aducand un plus de stabilitate solutiei prin faptul ca foloseste o zona comuna de stocare DTOs (Data Transfer Objects) si prin abstractizarea generica a logicii.

Fiecare microserviciu este dezvoltat pe pricipiile SOLID pentru a fi reactiv la evenimentele care folosesc RabbitMq, stoca datele proprii folosind baze de date separate, interactiona cu alte microservicii prin HTTP folosind Consul pentru obtinerea IP-ului si port pentru utilizarea DNS, pentru a evita erorile folosind Polly, segrega logica de business implementand pattern-ul Command pattern prin utilizarea MediatR, si pentru se expune la rulare la Consul. Independent de aceste microservicii, solutia foloseste procese separate in acelasi context, putand automatiza fluxurile folosind BackgroundServices si Hangfire.

Intreaga solutie este containerizata folosind Docker, pastrand fiecare imagine de serviciu pe Docker Hub si implementand totul pe device-ul de hosting folosind docker compose.

Vrei sa dezvolti o solutie bazata pe microservicii pentru compania ta/clientii tai?

Obtine o estimare gratuita pentru proiect