Trecerea de la arhitectura de tip monolit la microservicii | Cum a influentat aceasta decizie transformarea digitala a clientului nostru (nGage – UK)

Acest articol a fost publicat in categoria Dezvoltare aplicatii business, Dezvoltare aplicatii mobile, Modele Outsourcing, Tendinte in piata, Transformare digitala 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.

Ca sa ducem argumentarea intr-un plan concret, venim cu o exemplificare dintr-un studiu de caz publicat recent in portofoliul Roweb: clientul nostru, o companie de resurse umane cu sediul in UK, a ales migrarea catre o solutie bazata pe arhitectura de tip microservicii, optand pentru o aplicatie Mobile-first.

Principalul motiv pentru care nGAGE a ales aceasta tranzitie a fost faptul ca isi dorea o aplicatie mereu la indemana, usor de gestionat de catre toate tipurile de utilizatori si care permite dezvoltarea rapida de functionalitati care sa usureze procesele care au legatura cu activitatea zilnica.

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.

Ce a insemnat trecerea de la arhitectura monolit la microservicii pentru nGAGE

nGAGE este o companie de recrutare si resurse umane din Marea Britanie, orientata spre mentinerea avantajului competitiv si spre dezvoltarea continua a serviciilor oferite. De-a lungul timpului, activitatea sa a fost recompensata prin obtinerea de diverse certificari si premii, ceea ce a accentuat nevoia clientului de a mentine standardul inalt de calitate.

Colaborarea cu nGAGE a inceput in 2014, prin crearea unei platforme care sa simplifice functionalitatile, sa automatizeze procesele si sa permita optimizari constante in procesele de HR.

Insa, de-a lungul timpului, succesul nGAGE a determinat cresterea bazei de date si aparitia unor nevoi si mai acute in ceea ce priveste fluizidarea proceselor.

Drept urmare, de curand, impreuna cu echipa nGAGE am decis sa dezvoltam noua versiune a aplicatiei, dedicata dispozitivelor mobile si gazduita in cloud. Aceasta solutie a fost gandita ca una usor de accesat si de folosit de catre toate tipurile de utilizatori ai companiei: echipa nGaGE, furnizori, candidati si angajatori. Mai precis, este vorba de versiunea a patra a proiectului VMS 365 – care acum poarta denumirea de Bridge – si care reprezinta (asa cum indica si denumirea) o punte catre utilizatori.

Cum a ajutat migrarea de la arhitectura de tip monolit la microservicii

Pentru a automatiza procesele, am dezvoltat pentru nGAGE o solutie care ruleaza intr-o singura pagina, adaptata pentru dispozibile Mobile si al carei principal trigger a fost nevoia utilizatorilor de a avea acces instant la produsele nGAGE, direct de pe smarphone-uri.

Odata, cu versiunea a patra a aplicatiei utilizatorii au putut beneficia de avantaje precum:

  • posibilitatea de a obtine rapoarte si statistici, usor de accesat, dintr-un singur tablou de bord,
  • acces rapid la informatii realizat prin platformele iOS si Android,
  • notificari instant privind activitatea din platforma (si posibilitatea de a le accesa eficient),
  • gestionarea si arhivarea documentelor, folosind aplicatia,
  • monitorizarea datelor despre activitati, candidati si companie,
  • programarea intalnirilor de recrutare.

Noua aplicatie permite, totodata, adaptarea la cerintele pietei.

Datorita faptului ca s-a realizat trecerea de la arhitectura de tip monolit la cea bazata pe microservicii, procesul de dezvoltare al noilor functionalitati a fost considerabil simplificat, fara a exista limitari in acest sens.

Odata cu acest lucru, au fost realizate si update-uri de design, care aduc performanta superioara aplicatiei.

Un alt aspect care a adus un real beneficiu companiei nGAGE a fost faptul ca datorita migrarilor, noile dezvoltari se pot realiza intr-un timp mai scurt, ceea ce corespunde cu nevoile companiei de a tine pasul cu transformarea digitala.

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?

Arhitectura bazata pe microservicii

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.
Arhitectura bazata pe microservicii

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


Exemple de proiecte


Spotlight

Magento / CSS3 / HTML5 / Ajax / Webservices


Mr Crispy

Magento / CSS3 / HTML5 / Ajax / Webservices