Aircash - Zašto su developeri ključni dio jednog fintech tima?*

Kada čujete riječ fintech, sigurno pomislite na hrpu algoritama i veliku kompleksnost. Pa, dijelom ste u pravu. Takav sustav je domaća tvrtka Aircash, a njezin razvojni backend tim opisuje nam što se događa "iza kulisa". Aircashevi developeri Slaven Robić (Senior Software Engineer), Ivan Ćorković (.NET developer) i Marko Muhek (.NET developer), provest će vas kroz razvojni ciklus uspješnog fintecha

Promo utorak, 20. prosinca 2022. u 06:00

2017. godina – Live smo, Aircash je u produkciji! Prvi korisnici su registrirani, a naša monolitna backend aplikacija veselo odgovara na upite naše mobilne aplikacije. Pozadinski tech-stack je Microsoftov – C# i SQL Server, uz dodatak Javascripta.

Pet godina poslije (2022. godina) – Aircash ima preko pola milijuna korisnika. Mikroservisi veselo međusobno razgovaraju i odgovaraju na upite naše mobilne aplikacije. Pozadinski tech-stack malo je narastao, a tu su sada i Python, Angular, i još štošta. No, o tome malo kasnije.

 

Svaki početak je težak

Više ili manje, slična je priča svih uspješnih startupa. Svaki početak je težak, resursi su ograničeni, a vrijeme za puštanje proizvoda u produkciju (pre)kratko.

Aircash brzo raste i kao tvrtka i kao proizvod, aplikacija vremenom u pozadini postaje sve kompleksnija, broj korisnika se povećava velikom brzinom, a time, naravno, i količina podataka kojima upravljamo. Ako imamo dobre mehanizme isporuke, moći ćemo brže i lakše izložiti korisniku funkcionalnosti koje razvijamo. S tehničke strane, želimo da naša backend aplikacija i dalje ima visoke performanse, da se jednostavno može pustiti nova verzija (deploy) i da minimiziramo međuovisnost između pojedinih komponenti sustava.

Istodobno želimo zadržati jednostavnost proizvoda, čime optimizacija i skalabilnost postaju svakodnevni izazov. Stoga se prirodno pojavila potreba za promjenom dotadašnjeg načina rada.

Ostaje sve zanimljivije

Došlo je vrijeme da se monolit počne zamjenjivati mikroservisima.

Vjerojatno ste već čuli za .NET/C# i MS SQL, uz Azure Service Bus, CI/CD, Elastic i Angular. Jeste? Odlično, onda nećemo previše mudrovati, nego opisati od čega se sastoji Aircash platforma.

Je li zaista potrebno koristiti tzv. buzzword tehnologije, kako bismo ostatku svijeta pokazali da je upravo tako nešto nužno za jedan fintech? Dobra vijest! Ne, nije potrebno! Kao što ste pročitali, Aircash se bazira na tehnologijama koje zapravo koriste mnogi, pa čak i neke manje tvrtke i projekti. Zašto baš mikroservisi? Odlučili smo se pretežno za Microsoftov tech-stack, kako bismo sve imali na jednom mjestu, i kako bismo pojednostavili integraciju sa svim njihovim alatima. Sigurno ste primijetili da spominjemo i Angular, koji je zapravo Googleov, no s obzirom na to da je još rano za Microsoftov Blazor, odlučili smo se koristiti Angular za in-house alate. Jedan od tih alata je i backoffice admin, koji uvelike pomaže u svakodnevnom nadzoru rada cijelog sustava, rješavanju problema i izmjeni postavki. To je jedan od bitnih dijelova sustava koji olakšava svakodnevni rad zaposlenicima unutar tvrtke i podrška je poslovanju.

Monolitno ili mikroservisno

Kako ne bismo s previše detalja ulazili u povijest mikroservisa kao arhitekture (na Internetu je dovoljno materijala o tome), vrlo pojednostavljeno navest ćemo razlike između ideja mikroservisne i monolitne arhitekture.

Monolitna arhitektura – tipičan primjer je korisničko sučelje, poslovna logika i komunikacija s bazom podataka, a sam je kôd samodovoljan (self-contained). Tako, primjerice, jedan .NET assembly sadrži sve komponente koje smo gore naveli. Te komponente ne moraju nužno biti u istom assemblyju, ali su uvijek usko povezane i ovisne jedna o drugoj (tight coupling) te rade zajedno kao jedan proces.

Mikroservisna arhitektura – način je razvoja aplikacije koja se sastoji od skupa manjih servisa. Neovisni su jedan o drugome i rade u vlastitim procesima. Važna prednost je to što se mogu samostalno razvijati i implementirati. Drugim riječima, možemo reći da mikroservisi služe za odvajanje naše poslovne logike, kako bi ona postala neovisna u kontekstu dizajna, razvoja, implementacije i nadogradnje. Svaki takav mikroservis ima svoju bazu podataka, a može biti razvijen u bilo kojem programskom jeziku.

 

Zašto mikroservisi?

Ako želimo postići skalabilnost, visoku dostupnost i međusobnu neovisnost komponenti, onda su mikroservisi bolji izbor. Podijelimo li jedan veći sustav na puno manjih, dobivamo precizniji uvid u svaku komponentu koju možemo kontrolirati. Također, dobivamo mogućnost odvojenih postavki i planiranja resursa za svaki od njih. Primjerice, jedan je sustav preopterećen ili odrađuje neke kompliciranije zadatke, pa mu treba više energije. Tada mu dodijelimo više resursa, ili mu povećamo broj instanci te smo time riješili problem. Nema potrebe za dodatnim velikim instancama, kao što bi to bilo u slučaju monolitnog sustava.

Također, druga, no ne i manje važna stvar je trošak održavanja. Kada bismo dizali novu instancu cjelokupnog sustava (monolit) samo zbog jednog kritičnijeg dijela koji u jednom vremenu odrađuje velik broj operacija, trošak bi skočio za popriličan iznos, a to, naravno, želimo izbjeći. Želimo kontrolirati sve dijelove sustava kao pojedinačne cjeline koje možemo zasebno optimizirati, i prema potrebi dorađivati.

Kako jedan takav mikroservisni sustav komunicira međusobno? Vrlo jednostavno. Tu nam treba Azure Service Bus, koji je zadužen za prijenos poruka među sustavima. Ako je jedan ili više njih u vrijeme kada bi trebali dobiti tu poruku nedostupan, poruka ostaje u tzv. queueu. Čim sustav(i) postanu dostupni, primaju neobrađene poruke i postupaju u skladu s predviđenom logikom.

Iza sve te infrastrukture ustvari je jako puno poslovne logike i algoritama napisanih u .NET-u, odnosno C# programskom jeziku, koji s poboljšanjima tijekom godina dobiva sve veći značaj u developerskom svijetu. Ne želimo "izmišljati toplu vodu" i miješati razne tehnologije; zato koristimo već ustaljenu praksu koja je svima dobro poznata. Isti dijelovi kôda koji se koriste u mikroservisima, stavljeni su kao zasebni paket (nuget package) kako bi se izbjeglo nepotrebno pisanje iste logike više puta, i samim time otežalo održavanje.

Aplikacija je tu, ali razvoj nije završen

Aircash je dinamičan sustav i javlja se potreba za jednostavnošću izgradnje nove verzije aplikacije koja može sadržavati nadogradnju ili ispravak bugova. Tu dolazimo do automatskog deploya, to jest CI/CD (Continuous Integration / Continuous Deployment). S obzirom na to da se radi o mikroservisima, bilo bi nemoguće ručno deployati i pratiti izmjene na svakom od tih sustava. Niti tu nismo komplicirali, naime, koristimo Azure DevOps alate.

Elastic – nismo ga zaboravili, bez brige. Kako se on uklapa u Aircash? Uklapa se za metriku, pretraživanje i analizu podataka, kao i za generiranje izvještaja, koji su za jedan fintech krucijalan dio sustava.

 

"Izaberi posao koji voliš, i nećeš morati raditi nijedan dan u životu"

Nadamo se da Vam nije bilo dosadno čitajući o našem razvojnom ciklusu. Nastojali smo malo pobliže prikazati što se događa u jednom fintech developerskom timu i pokazati da nam je zaista zanimljivo i zabavno raditi to što radimo. Ako smo Vas imalo zainteresirali, ako Vam se svidjelo kako radimo te shvaćate da fintech nije bauk, slobodno nam se javite, jer možda ste baš Vi osoba koja bi se uklopila u naš tim!

Mreza 1 / 2023 siječanj 2023.