13:30, 13.03.2023. | Arhitektura i orkestracija kubernetnih mikroservisa NIŠ

Arhitektura i orkestracija kubernetnih mikroservisa

izvor: PMF Žurnal

autori: Vuk Marković

U današnje vreme, tehnologija je ključni faktor koji utiče na uspeh poslovanja. Jedna od najznačajnijih tehnoloških inovacija poslednjih godina su mikroservisi. Ovaj koncept predstavlja način organizovanja softverskih aplikacija kroz mnogo manje, samostalne delove koji rade zajedno kao jedan sistem. Osim što pružaju skalabilnost i fleksibilnost u razvoju, mikroservisi omogućavaju organizacijama da brže i efikasnije isporuče softverske proizvode. Ova tehnologija je već promenila način na koji poslovni svet razmišlja o razvoju i implementaciji softvera, a njen uticaj i dalje raste. U ovom članku, istražićemo šta su mikroservisi, kako funkcionišu i zašto su važni za savremene organizacije.

Mikroservisi su arhitektonski koncept koji se koristi u razvoju softvera, a podrazumeva organizovanje aplikacije u manje, samostalne servise koji rade zajedno kao jedan sistem. Svaki mikroservis se fokusira na jednu funkciju ili delimičnu funkciju aplikacije i koristi laganu komunikaciju sa drugim servisima kako bi se postigao krajnji cilj. Ovi servisi su nezavisni jedni od drugih, mogu se skalirati nezavisno i mogu se ažurirati bez uticaja na ostatak aplikacije. Ovakav pristup razvoju softvera omogućava organizacijama da brže isporuče nove funkcionalnosti i lakše se prilagode promenama u zahtevima tržišta.

Slika 1.0 – Primer jednostavnije mikroservisne arhitekture u biomedicinskom inženjerstvu

 

Postali su popularni u poslednjih nekoliko godina, posebno u agilnom razvoju softvera, a mnoge poznate kompanije, kao što su Netflix, Uber i Amazon, koriste ovaj koncept u svojim aplikacijama.

Postoji mnogo tehnologija koje se mogu koristiti u realizaciji mikroservisne arhitekture. Jedna od popularnih tehnologija za izradu mikroservisa su funkcije kao usluga (FaaS), kao što su AWS Lambda i Azure Functions. Ove platforme omogućavaju programerima da pišu kod koji se izvršava samo kada se poziva, što smanjuje troškove i poboljšava skalabilnost aplikacije.

Pored toga, postoje i platforme kao usluga (PaaS), kao što je Google Kubernetes Engine, koja pruža potrebne resurse za izradu, održavanje i upravljanje mikroservisima.

Slika 1.1 – Primer jednostavnog servisa u Node.JS runtime-u, na AWS Lambdi.

 

U Node.js, AWS Lambda funkcija je napisana kao funkcija koja obrađuje ulazne događaje i vraća izlaz. Lambda funkcija se izvršava samo kada se dogodi određeni događaj, kao što je poziv HTTP zahteva, a AWS automatski upravlja skaliranjem i infrastrukturom koja je potrebna za izvršavanje funkcije. To omogućava programerima da fokusiraju svoju pažnju na kod, umesto na održavanje infrastrukture.

Komunikacija između mikroservisa može se vršiti na različite načine. HTTP je najčešće korišćeni protokol za komunikaciju u mikroservisnim arhitekturama, jer je jednostavan i dobro podržan od strane mnogih alata. Queue-ovi, poput RabbitMQ i Amazon SQS, mogu se koristiti za asinhronu komunikaciju između mikroservisa i pomažu u povećanju otpornosti sistema.

Slika 1.2 – Primer jednostavnog servisa u Python runtime-u, na AWS Lambdi.

 

Docker i Kubernetes su dve tehnologije koje često koriste zajedno u kontekstu mikroservisne arhitekture. Docker omogućava programerima da izoluju aplikaciju i njene zavisnosti u kontejnere, što olakšava njeno razvijanje, testiranje i distribuciju. Sa druge strane, Kubernetes je orkestracioni sistem za upravljanje kontejnerima koji omogućava automatsko raspoređivanje, skaliranje i upravljanje kontejnerima. Kubernetes se može koristiti za upravljanje bilo kojom aplikacijom koja je zapakovana u Docker kontejnere.

Konkretno, Kubernetes omogućava programerima da definišu kako će aplikacija biti raspoređena u kontejnerima, koliko će ih biti i kako će se skalirati u određenim situacijama. Kubernetes nudi i automatizovano upravljanje resursima, što znači da može pratiti potrošnju resursa za svaki kontejner i prilagoditi ga prema potrebama aplikacije. U kombinaciji sa Docker kontejnerima, Kubernetes omogućava programerima da jednostavno i brzo upravljaju aplikacijama sa velikim brojem mikroservisa, što je često ključno za efikasnu i agilnu razvoj softvera.

Slika 1.3 – Primer YAML instrukcione skripte za Kubernetes.

 

Pametno orkestriranje mikroservisa u Kubernetes-u uključuje nekoliko ključnih koraka.
  • Potrebno je definisati kako će aplikacija biti raspoređena u kontejnerima i kako će se skalirati u određenim situacijama. Ovo se može uraditi putem YAML datoteka, koje definišu specifikaciju aplikacije i resursa koje će biti potrebni za njeno izvršavanje.
  • Potrebno je pratiti resurse koji se koriste u mikroservisima kako bi se osiguralo da aplikacija radi efikasno i bez prekida. Kubernetes nudi mogućnost automatskog skaliranja resursa na osnovu opterećenja, što omogućava da se brzo i fleksibilno reaguje na promene u zahtevima za resursima.
  • Pametno orkestriranje uključuje praćenje i upravljanje statusom aplikacije i kontejnera. Kubernetes omogućava programerima da definišu pravila za automatsko ponovno pokretanje kontejnera u slučaju da dođe do kvara, što može osigurati da aplikacija uvek bude dostupna i funkcionalna.
Šire gledano, iz perspektive softverskog arhitekte, postoje neki ključni faktori na koje treba obratiti pažnju:
  • Granulacija mikroservisa: Svaki mikroservis bi trebalo da bude dovoljno mali da bi mogao efikasno da se razvija, održava i skalira. Međutim, previše sitni mikroservisi mogu dovesti do kompleksnosti u razvoju i upravljanju.
  • Komunikacija među mikroservisima: Mikroservisi moraju biti dizajnirani tako da mogu da komuniciraju jedni sa drugima bez preterane kompleksnosti. To se može postići korišćenjem standardnih protokola komunikacije i korišćenjem dobrih praksi u dizajnu interfejsa.
  • Upravljanje greškama: Budući da mikroservisi komuniciraju preko mreže, treba razmotriti kako se greške obrađuju i rešavaju u celom sistemu. Potrebno je razviti odgovarajuću strategiju za praćenje i dijagnostikovanje problema u celom sistemu.
  • Bezbednost: Mikroservisi često eksponiraju javne API-je, što može predstavljati rizik od sigurnosnih problema. Potrebno je razviti odgovarajuće mere bezbednosti, kao što su autentifikacija i autorizacija, enkripcija i ograničavanje pristupa, kako bi se osigurala sigurnost celog sistema.
  • Skaliranje: Jedan od glavnih razloga za korišćenje mikroservisne arhitekture je mogućnost efikasnog skaliranja. Potrebno je razviti strategiju skaliranja koja omogućava dinamičko dodavanje i uklanjanje mikroservisa u sistemu, kako bi se zadovoljili zahtevi rasta i promenljivosti opterećenja.
Konačno, pametno orkestriranje uključuje i implementaciju dodatnih alata i procesa za praćenje, dijagnostikovanje i rešavanje problema u aplikaciji. Kubernetes nudi širok spektar integrisanih alata i resursa koji olakšavaju ovaj proces, uključujući mogućnost automatskog generisanja izveštaja o stanju aplikacije, kao i mogućnost praćenja logova i dijagnostikovanja problema u realnom vremenu. Ukupno gledano, pametno orkestriranje mikroservisa u Kubernetes-u zahteva detaljno planiranje i implementaciju procesa, alata i pravila za upravljanje resursima i statusom aplikacije. Međutim, kada se pravilno implementira, ova tehnologija može značajno poboljšati agilnost, efikasnost i dostupnost aplikacija sa velikim brojem mikroservisa.

Slika 1.4 – Primer Kubernetes Dashboard-a (izvor: https://kubernetes.io/)

 

Kada se koristi mikroservisna arhitektura, aplikacija se obično sastoji od više mikroservisa koji se izvršavaju na različitim serverima. Međutim, kako bi korisnici mogli da pristupe ovim servisima kroz jedan URL, potrebno je koristiti neki oblik ruteiranja. Jedan od načina ruteiranja u mikroservisnoj arhitekturi je korišćenje API Gateway-a. Ova komponenta se nalazi između klijenta i mikroservisa i omogućava upravljanje pristupom mikroservisima kroz jedan URL. API Gateway ima sposobnost da ruti klijentske zahteve na odgovarajući mikroservis, pri čemu može izvršiti i različite oblike autorizacije i autentifikacije.
  • Kada se koristi mikroservisna arhitektura sa API Gateway-om, svaki mikroservis se izvršava kao nezavisna aplikacija, sa svojim sopstvenim URL-om i endpointima.
  • API Gateway zatim objedinjuje ove endpointe u jedan URL i ruti klijentske zahteve na odgovarajući mikroservis.
  • Kombinovanjem mikroservisne arhitekture i API Gateway-a, više web aplikacija može raditi odjednom i biti iza jednog URL-a, omogućavajući bolje skaliranje, fleksibilnost i efikasnost u razvoju i održavanju aplikacije.
Nginx Ingress je popularan pristup ovom problemu, koji se često koristi u mikroservisnoj arhitekturi. Nginx Ingress je specifičan po tome što radi na nivou Kubernetes cluster-a, što znači da se može integrisati sa Kubernetima kako bi se omogućilo upravljanje rutingom zahteva ka mikroservisima. Da bi se koristio Nginx Ingress, prvo se mora instalirati u Kubernetes cluster. Nakon što se instalacija završi, Ingress kontroler će automatski otkriti i obrađivati nove Ingress objekte koji se kreiraju u klasteru. Ingress objekti su Kubernetes resursi koji se koriste za konfigurisanje pravila rutinga u klasteru.

Slika 1.5 – Primer YAML instrukcione skripte za Kubernetes Nginx Ingress.

U ovom primeru, Ingress objekat se sastoji od dva pravila rutinga, jedan za putanju “/api” i drugi za putanju “/web”. Za svaku putanju je određen odgovarajući mikroservis koji će obrađivati zahteve.

Kada se Ingress objekat kreira, Nginx Ingress kontroler će automatski preuzeti konfiguraciju i početi da ruti zahteve ka odgovarajućim mikroservisima. Ingress objekat se može ažurirati kako bi se promenili ruting pravila, a Nginx Ingress kontroler će automatski primeniti promene i prilagoditi ruting na osnovu nove konfiguracije.

Korišćenje API Gateway-a poput Nginx Ingress omogućava upravljanje pristupom mikroservisima kroz jedan URL i obezbeđuje bolju skalabilnost i efikasnost u razvoju i održavanju mikroservisne arhitekture.

Za početak učenja o Kubernetes-u postoje brojne literature i resursi koji su dostupni online. Ovo uključuje besplatne tutorijale, video lekcije i knjige koje pokrivaju osnovne koncepte i praktične primere korišćenja ove tehnologije.
Jedan od najboljih načina za početak učenja o Kubernetes-u je korišćenje zvanične dokumentacije koja se može naći na Kubernetes.io sajtu. Tu su dostupni različiti tutoriali, uputstva i resursi koji će pomoći početnicima da se upoznaju sa osnovnim konceptima Kubernetes-a i da počnu sa razvijanjem aplikacija.

Postoji veliki broj online kurseva i video lekcija koji se mogu pronaći na platformama kao što su Coursera, edX i Udemy. Ovi kursevi pokrivaju širok spektar tema vezanih za Kubernetes, uključujući osnove, arhitekturu, implementaciju i upravljanje mikroservisima.

Pored ovih resursa, postoje i brojne knjige koje se fokusiraju na Kubernetes i koje se mogu pronaći na Amazonu i drugim online knjižarama. Ove knjige pokrivaju različite aspekte korišćenja Kubernetes-a, od osnova do naprednih tema kao što su upravljanje skaliranjem i otklanjanje grešaka.

Konačno, postoji veliki broj online zajednica i foruma na kojima se može naći pomoć i podrška od drugih korisnika Kubernetes-a. Ovi resursi su odlični za pronalaženje odgovora na pitanja i za povezivanje sa drugim ljudima koji koriste ovu tehnologiju.