U današnjem dinamičnom IT okruženju, gde kompanije moraju brzo reagovati na izazove i promene, cloud native pristup razvoju aplikacija omogućava efikasnije rešavanje novih zahteva. Ovaj pristup omogućava organizacijama da budu agilnije i da brže implementiraju rešenja koja podržavaju njihove poslovne potrebe.
Zašto cloud native i šta je to? Cloud native pristup predstavlja modernu metodologiju razvoja softverskih aplikacija, optimizovanu za cloud okruženja. Korišćenjem mikroservisne arhitekture za podelu aplikacija na manje, nezavisne komponente, koje se mogu razvijati, testirati i skalirati samostalno, ispunjavamo dobre prakse cloud native aplikacija. Kontejnerizacija, putem alata kakav je Docker, pruža konzistentno okruženje za aplikacije, što olakšava njihovo implementiranje i upravljanje u različitim cloud okruženjima. Orkestracija kontejnera pomoću Kubernetesa omogućava automatsko upravljanje resursima, visoku dostupnost i skalabilnost aplikacija.
Cloud native vs. tradicionalne aplikacije
Cloud native aplikacije razlikuju se od tradicionalnih po nekoliko ključnih karakteristika. Tradicionalne aplikacije često koriste monolitnu arhitekturu, gde se čitava aplikacija sastoji od jedne velike komponente koja se izvršava na fizičkim ili virtuelnim serverima. Ovo često rezultira sporijim ciklusima razvoja, teškoćama u skaliranju i održavanju, kao i manjkom agilnosti u reagovanju na promene.
S druge strane, cloud native aplika- cije koriste mikroservisnu arhitekturu, gde se aplikacije izvršavaju kao manji, nezavisni servisi. Mikroservisi se mogu razvijati i testirati nezavisno jedan od drugog, što omogućava brže iteracije, lakše otklanjanje grešaka i efikasnije korišćenje resursa. Kontejnerizacija je takođe ključna u cloud native pristupu, gde se aplikacije pakuju u kontejnere koji obezbeđuju konzistentno okruženje za rad aplikacija, nezavi- sno od infrastrukture na kojoj se izvršavaju.
Orkestracija kontejnera uz pomoć Kubernetesa omogućava automatsko upravljanje, skaliranje i kontrolu resursa na nivou konkretne aplikacije, odnosno kontejnera. CI/ CD prakse (Continuous Integration / Continuous Deployment) u cloud native svetu omogućavaju automatsku integraciju novih promena i bržu isporuku novih verzija aplikacija, dok tradicionalne aplikacije često zahtevaju duge i kompleksne procedure za implementaciju novih funkcionalnosti.
Ukratko, cloud native aplikacije nude organizacijama veću agilnost, skalabilnost, otpornost na greške i efikasnost u poređenju sa tradicionalnim aplikacijama, čineći ih idealnim za moderno, dinamično poslovno okruženje, koje zahteva brze inovacije i prilagođavanje promenama na tržištu.
Prelazak monolitne aplikacije na cloud native
Šta je potrebno za prelazak monolitne aplikacije na cloud native i šta treba imati na umu prilikom razvoja novih aplikacija? Za prelazak sa monolitnih aplikacija na cloud native ključno je detaljno razumevanje postojeće arhitekture aplikacije. Identifikacija komponenata koje se mogu transformisati u mikroservise je osnovni korak ka podeli aplikacije na manje celine. Zatim, aplikacije treba kontejnerizovati, što podrazumeva pakovanje svake komponente u kontejnere korišćenjem alata poput Dockera. Uvođenje platforme za orkestraciju kontejnera, kao što je Kubernetes, ključno je za automatizaciju upravljanja, skaliranje i visoku dostupnost aplikacija. Paralelno, implementacija CI/CD praksi omogućava automatsku integraciju novih promena u kodu i bržu isporuku novih verzija aplikacija.
Prilikom razvoja novih aplikacija, mikroservisna arhitektura se nameće kao preferirani pristup. Dizajniranjem aplikacija kao skup nezavisnih mikroservisa omogućava se lakše upravljanje, održavanje, skaliranje, čime se dobija veća stabilnost celokupnog sistema. Kontejnerizacija novih aplikacija omogućava bržu adaptaciju na cloud native okruženja i olakšava migraciju između različitih cloud provajdera. Razvojni i DevOps timovi treba da budu obučeni za efikasno korišćenje orkestracionih alata poput Kubernetesa i implementaciju automatskih procesa upravljanja i skaliranja aplikacija. Potrebno je ostvariti dobru saradnju između razvojnih i DevOps timova kroz sve faze razvoja i održavanja aplikacija, kako bi se dobili očekivani rezultati.
DMS: primer transformacije
Transformaciju monolitne aplikacije na cloud native demonstriraćemo na primeru DMS aplikacije, koja je razvijena u okviru kompanije COMING. Proces transformacije opisaćemo sekvencijalno, po koracima primenjenog procesa transformacije.
Da bismo započeli transformaciju potreban nam je plan migracije, koji po- drazumeva popisivanje svih funkcionalnih komponenata trenutne monolitne aplikacije. DMS poseduje niz modula koji mu omogućavaju da funkcioniše kao nezavisna aplikacija: sistem za logovanje i upravljanje korisnicima, upravljanje organizacijama, e-fakture, arhiviranje dokumenata, logovanje grešaka. S obzirom da je aplikacija razvijena u .Net MVC tehnologiji, DMS sadrži korisnički interfejs razvijen u Razor stranicama i JavaScriptu.
Prvi korak je razdvajanje dela koji se odnosi na korisnički interfejs (UI) od dela koji vrši obradu podataka i upis u bazu (API). Kompletna logika prikaza stranica i dešavanja na klijentu treba biti prepisana u neku od tehnologija koje se bave klijentskom stranom, kao što su React ili Angular.js. U našem slučaju, odlučili smo se za React.
Nakon toga, potrebno je identifikovati funkcionalne celine koje ćemo razvijati kao posebne servise. U prvom prolazu, odlučili smo da to budu delovi koji se tiču DMS-a, e-faktura, e-arhive i deo koji se odnosi na upravljanje organizacijama i korisnicima unutar tih organizacija (OM.Api). UI je sada zasebna React aplikacija, što nam omogućava fleksibilnost da jedna UI aplikacija koristi više API-ja za pružanje potrebnih funkcionalnosti. Takođe, moguće je podeliti sistem na više UI aplikacija, gde bi svaka obavljala deo posla koji se od nje očekuje.
Rezultat transformacije su tri UI aplikacije: DMS korisnički interfejs, posebna UI aplikacija za arhiviranje dokumenata i još jedna koja administratorima sistema omogućava upravljanje organizacijama i korisnicima OM.UI. Da bismo korisnicima omogućili neometan rad u okviru više UI aplikacija koje koriste različite API-je potrebno je uvesti Single Sign-On (SSO) u celokupan sistem. Za ovu svrhu odabran je Keycloak, koji omogućava korisnicima da se na jednom mestu loguju na celokupan sistem i nakon logovanja koriste sve servise za koje imaju odgovarajuće privilegije.
OM u sprezi sa Keycloakom vrši administraciju organizacija i korisnika koji će kasnije pristupati servisima. Kako bismo adekvatno pratili celokupan rad sistema, potrebno je imati dobro logovanje grešaka svih servisa. Logovanje grešaka vrši se preko Elasticsearcha, što nam omogućava uvid u rad celokupnog sistema.
Na sledećoj slici prikazana je tran- sformacija monolitne DMS aplikacije u cloud native DMS aplikaciju.
Kao što se na slici može videti, baza podataka, koja je nekada bila jedinstvena, sada je kreirana za svaki servis, što poštuje dobru praksu koju mikroservisna arhitektura nalaže.
Nakon transformacije, rezultat je sistem sa jasnom podelom odgovornosti po servisima. Takođe, sada možemo da odvojimo razvoj aplikacija na posebne timove, što nam omogućava bolju paralelizaciju posla. Celokupan sistem je sada moguće horizontalno skalirati i dobiti bolje performanse. Centralizovano logovanje nam daje bolji uvid u rad sistema, samim tim i bolje praćenje rada celokupnog sistema, što na kraju rezultira boljim korisničkim iskustvom.