Vinerea aceasta o să aibă loc prima editie a festivalului de tehnologie #INGLovesIT, care are loc in Bucuresti si este organizat de ING Software Development Center, hub-ul de dezvoltare software al grupului ING. Si cum unul din subiectele hot ale momentului pe zona de dezvoltare software – microservices – va avea un loc de cinste, am zis că merită să încerc să aflu ceva mai multe de la unul dintre speakeri. I-am adresat câteva întrebări lui Andrei Rugina, IT Application Architect în cadrul ING Bank Romania, cel ce va susține prezentarea cu “Modularity by Microservices”.
De ce “Modularity by Microservices”?
”Prezentarea se concentrează asupra tehnicilor de modularizare în cadrul unei arhitecturi bazate pe microservicii, în special pe tehnicile care țin de Domain Driven Design (DDD). Dintre toate caracteristicile acestui tip de arhitectură, modularizarea aduce cele mai mari beneficii in condițiile în care complexitatea crește inevitabil în timp, iar abilitatea de a izola impactul modificărilor și de a concepe sistemul la un nivel superior de abstractizare (cel al modulelor) devine esențială. DDD-ul oferă tehnici ce pot ajuta în structurarea aplicației în jurul capabilităților business prin identificarea bounded contexts, prin design-ul agregatelor, comunicarea bazată pe evenimente ș.a.m.d. De multe ori discuțiile legate de microservicii pun accentul pe tehnologie (Spring Boot, Vert.x etc.), dar am vrut să ofer și perspectiva complementară a criteriilor după care o aplicație ar trebui descompusă în microservicii. De multe ori problema nu o reprezintă tehnologia, ci modul cum modularizăm aplicațiile. Iar acest lucru devine cu atât mai important în cazul microserviciilor pentru că efortul de refactorizare a unor module care comunică remote este mult mai complex decât refactorizarea unor module din aceiași aplicație.”
Cu toții folosim tehnologia pentru că știm că ne ajută, ne aduce beneficii. Numai că de la un anumit moment, chiar și cei care lucrează în domeniu nu mai stau să ”vadă” în interiorul aplicațiilor și serviciilor folosite, le iau ca atare. În era internetului și a unei viteze fantastice de dezvoltare și schimbare continuă, ideea de microservices înflorește, pavând drumul către soluții mai suple și mai scalabile. Privind din afară, e normal să îți pui o întrebare simplă: care este de fapt marele avantaj al unei astfel de arhitecturi într-o soluție de business?
”În mediul enterprise marele avantaj e dat de modularizare: module cu o interfață explicită, a căror implementare este izolată de cei care o apelează, care pot fi modificate independent de echipe (eventual diferite) și care pot fi instalate și actualizate de asemenea în mod independent. De ce este în trend? La modul general cred că evoluția rapidă a tool-urilor de deployment automat și a tehnologiilor de container-izare au influențat foarte mult popularitatea microserviciilor. La nivel enterprise a contat și complexitatea adusă în trecut de produsele de integrare și orchestrare în cadrul arhitecturilor de tip SOA (Service Oriented Architecture), care se simplifică însă atunci când sunt aplicate principiile microserviciilor.”
La nivel teoretic lucrurile par să fie simple. Dar dacă trecem de teorie și discutăm pe lucruri practice, palpabile, situația se schimbă și transpunerea în realitate a conceptului microservices ajunge să nu fie chiar un lucru simplu.
Pro și contra microservices?
”Avem un exemplu recent: la efectuarea tranzacțiilor cu carduri de credit utilizatorul primește un SMS la care, dacă răspunde tot prin SMS, în funcție de tipul tranzacției și campania de rate specifică comerciantului, poate opta pentru plata în rate. Această funcționalitate a fost dezvoltată într-un modul separat care subscrie la două tipuri de evenimente: evenimente de tip tranzacție (publicate de sistemul de carduri) și evenimente de tip SMS (publicate de gateway-ul de SMS-uri) pentru a putea seta planul de rate în timp (aproape) real. Acest modul este independent de sistemele cu care interacționează, poate fi dezvoltat și instalat separat, fără să afecteze procesarea tranzacțiilor sau receptarea SMS-urilor. Aceasta decuplare se datorează principiului DDD adoptat între bounded contexts unde comunicarea are loc în principal prin intermediul evenimentelor. În acest mod indisponibilitatea temporară a unui sistem sau microserviciu nu-l impactează pe celălalt. Această decuplare temporală se manifestă și prin faptul că microserviciile pot fi dimensionate separat astfel încât să suporte rate diferite de producere și consumare de evenimente. Dezavantajul este complexitatea crescută în monitorizarea modulului. În general, în cazul apelurilor sincrone de tip request/reply detectarea unei erori sau măsurarea timpilor de răspuns este mult mai directă decât în cazul procesării asincrone de evenimente. O altă problemă este efectuarea unor modificări tranzacționale. În microservicii întinderea unui tranzacții („scope”-ul ei) este limitată la un singur microserviciu. Mai departe ai nevoie de politici de retry, acțiuni de compensare și din nou monitorizare și alerte pentru cazuri de eroare.”
Pentru că odată cu microservices viitorul serviciilor stă în cloud, o asociere pare să fie un lucru normal. Cat de tare e legată de cloud ideea de microservices? Există implementări în ING/ING Software development center?
”ING Romania are propriile data center-uri, dar se află în desfășurare proiectul unui cloud privat ING la nivel de grup, unde vom rula aplicațiile la un moment dat. Însă deocamdată rulam aplicațiile local, în România, folosind servere de aplicații JEE. În măsura în care microserviciile se împachetează folosind tehnologii de container-izare (de exemplu, imagini de Docker) care își conțin și partea de runtime necesară, atunci ele se pretează în mod special la deployment în cloud. Revenind la principiile de DDD, faptul că descompunem aplicația în capabilități de business (subdomenii in limbaj DDD) înseamnă că le putem scala independent și putem folosi cât mai eficient resursele din cloud, ceea ce contează într-un model de tip pay-per-use. La fel, faptul că ne propunem să constrângem interacțiunile între agregate la publicarea de evenimente și restrângem scope-ul tranzacțiilor la seturi mici de date favorizează partiționarea datelor și distribuirea lor pe mai multe servere, ceea ce este din nou benefic în cloud în cazul unor volume mari.”
Povestea microservices e abia la început și care orice pasionat de IT (development) îmi place să citesc poveștile de succes și să învăț din experiența altora pe domeniile unde nu am expertiză. Asta este motivul principal pentru care mă duc la conferințe și evenimente de IT: să învăț de la alții chestii despre care nu am timp suficient să mă documentez singur. În cazul de față, prezentarea “Modularity by Microservices” e pe lista mea pentru #INGLovesIT.
Bănuiesc că și voi faceți același lucru, nu? Și sper să ne vedem acolo?
P.S.: dacă ajungeți la #ITLovesIT nu uitați că pe perioada evenimentului va avea loc un turneu Virtual Escape Room. Descărcați aplicația evenimentului și începeți să rezolvați primul puzzle – dacă reușiți asta până pe 7 aprilie, sunteti pregatiti sa luati startul la Virtual Escape Room de vineri. Și cred că nu doar nivelul de interactivitate și fun al jocului o să vă deschidă apetitul, sunt sigur că și premiul de 1000 euro pus în joc o să facă asta. Detaliile sunt aici.