Data publicării: 03.10.2018
Autor articol: Sabin Buraga

Preambul

Așa cum am văzut în articolul precedent, arhitecturile software reprezentative utilizate la dezvoltarea de aplicații Web complexe sunt următoarele, conform (Richards, 2015):

  • Aplicațiile stratificate (layered);
  • Conduse de evenimente (event-driven);
  • Extensibile (microkernel + plug-in);
  • Folosind microservicii (microservices);
  • “În nori” (space-based, cloud).

Acest articol realizează o trecere în revistă a problematicilor vizând adoptarea microserviciilor Web în conceperea de aplicații Web de anvergură, în contextul cloud computing.

Următoarea secțiune va prezenta principalele caracteristici ale microserviciilor Web. Materialul va continua cu discuții privind exploatarea microserviciilor “în nori”.

Aplicații recurgând la microservicii

În acest caz, din punct de vedere arhitectural, funcționalitățile sunt oferite via componente separate, distribuite, de sine-stătătoare (separately deployed units) care actualmente sunt implementate ca microservicii.

Un microserviciu implementează o funcționalitate specifică, oferită la nivel de unic proces, și reprezintă o componentă executată la nivel de server (backend) dezvoltată cu scopul de a fi înlocuită, nu de a fi reutilizată. O caracterizare a microserviciilor se regăsește în articolul (Lewis & Fowler, 2014).

Principalele beneficii aduse de microservicii sunt:

  • Asigurarea izolării – fiecare microserviciu rulează fără a cauza efecte colaterale.
  • Autonomie – microserviciile sunt independente și scalabile.
  • Reziliența aplicației – un microserviciu care manifestă comportamente eronate, necorespunzătoare, poate fi ușor înlocuit.
  • Suport pentru experimentare și oferirea de feedback rapid.
  • Flexibilitate.
  • Viteză mai mare de execuție – concentrându-se asupra oferirii unei unice funcționalități, codul microserviciilor este mai redus față de serviciile Web tradiționale care pun la dispoziție operații multiple.
  • Existența unui ecosistem – uzual, microserviciile evoluează în cadrul unui ecosistem compus din instrumente de dezvoltare și de exploatare, disponibile grație tehnologiilor cloud computing.

Microserviciile sunt fie funcționale (functional services), fie legate de control – i.e. infrastructură (infrastructure services):

  • Microserviciile funcționale implementează operații specifice, fiind expuse consumatorului de servicii și nu sunt partajabile uzual. Evident, sunt independente, fără a cauza efecte colaterale (side effects).
  • Prin contrast, microserviciile de tip control sunt responsabile cu activitățile non-funcționale – autentificare, autorizare, jurnalizare, monitorizare etc. – de care o aplicație Web poate beneficia. Ele pot fi partajate la nivel de aplicație ori servicii interne, nefiind expuse în exterior.

O comparație dintre abordarea tradițională orientată spre servicii (SOA – Service Oriented Architecture) și una axată pe microservicii este expusă în figura de mai jos.

Diverse strategii de migrare de la o arhitectură monolitică la una adoptând microservicii este discutată și exemplificată de (Dehghani, 2018).

Aplicații exploatate “în nori”

Această categorie de aplicații consideră și rezolvă problemele vizând scalabilitatea și concurența unui volum impredictibil de mare de cereri – a se studia prelegerile disciplinei “Programare concurentă și distribuită” (Alboaie, 2018).

Frecvent, acest tip de arhitecturi se bazează un strat middleware virtualizat ce include componente controlând sincronizarea datelor, procesarea cererilor, accesul la platforma de execuție (deployment) și altele. Unitatea de procesare e reprezentată de un (micro-)serviciu Web sau de o componentă software tradițională disponibilă la nivel de backend.

Conform celor expuse în cadrul materiei “Dezvoltarea aplicațiilor Web” predată la studii de master oferite de Facultatea de Informatică a Universității “Alexandru Ioan Cuza” din Iași, aplicațiile Web pot expune funcționalități implementate și gestionate local, “în propria ogradă” (on-premises), sau de un furnizor de (micro)servicii disponibile “în nori” – vezi figura de mai jos.

În acest context, trebuie să menționăm și situația în care aplicația Web depinde semnificativ de componente externe, disponibile “în nori”, implementate de (micro)servicii Web. Un scenariu tipic este figurat în diagrama de mai jos, conform (Roberts, 2018), în care BaaS semnifică microservicii de tip infrastructură – (Mobile) Backend As A Service –, iar acronimul FaaS specifică microserviciile funcționale – Functions As A Service.

Pentru diverse exemple concrete, a se explora soluțiile software specifice ariei cloud computing expuse de situl Cloud Native Landscape.

Concluzii

Articolul de față a trecut în revistă folosirea microserviciilor pentru proiectarea și dezvoltarea sistemelor Web complexe destinate a fi exploatate distribuit, “în nori”.

De asemenea, au fost furnizate exemple aliniate actualelor direcții privind ingineria și dezvoltarea de aplicații Web de anvergură.

Referințe bibliografice