Professional Documents
Culture Documents
21 Mikroservisni Obrasci
21 Mikroservisni Obrasci
APLIKACIJA NA MIKROSERVISNOJ
ARHITEKTURI - 3
• Problem - Kako klijent nekog servisa (API gateway ili neka druga servisna
komponenta koja nastupa u ulozi klijenta) može otkriti lokaciju servisne
instance servisa koji joj je potreban?
• Faktori koji utiču na izbor:
• Svaka instanca servisa ima javno dostupana API preko neke pristupne tačke
(HTTP/REST ili neki drugi protkol) na određenoj lokaciji (host i port)
• Broj instanci određenog servisa i njihova lokacija se menjaju tokom vremena
• VM i kontejneri po pravilu dobijaju dinamički dodaljene adrese.
slika preuzeta sa: https://microservices.io/patterns/server-side-discovery.html
REGISTAR SERVISA
• Kontekst u kome se koriste - Klijent koristi mehanizam otkrivanja servisa (klijentski
ili serverski) kako bi pronašao lokaciju servisne instance servisa koji mu treba.
• Problem - Kako klijent(u slučaju pronalaženja od strane klijenta) i/ili ruteri (u slučaju
pronačlaženja od strane servera) može da utvrdi tačnu lokaciju raspoloživog servisa?
• Faktori koji utiču na izbor:
• Svaka instanca servisa svoj pristupni API (npr. HTTP/REST) mora učiniti dostupnim
na nekoj mrežnoj lokaciji.
• Broj servisnih instanci i njihova mrežna lokacija mogu da se menjaju.
• VM i kontejneri dobijaju dinamičke IP adrese.
REGISTAR SERVISA
• Moguće rešenje - Implementirati registar servisa, u vidu baze podataka servisa, njihovih instanci i njihvoih
lokacija. Klijenti servisa vrše upit nad ovim registrom kako bi saznali tačne lokacije instanci servisa koji su im
potrebni. Sam registar može pozivati poseban API na servis instancama kako bi se uverio da su “žive i zdrave”.
Primer ovakvog registra je recimo Netflix Eureka.
• Rezultat primene
• Dobre strane
- Klijent je u mogućnosti da lako pronađe adresu dinamički alociranih servisnih instanci
• Loše strane
- Osim ako je registar deo servisne infrastrukture, ova komponenta se mora dodati u sistemsko rešenje,
podesiti i održavati.
- Servisni registar (ako se ništa ne preduzme) je kritična tačka sistema.
- Klijenti ne znaju unapred adrese pojedinačnih servisa, ali moraju znati adresu na kojoj se nalazi registar.
• Neophodno je dodatno razmotriti mehanizam registracije servisa u registar
SAMOREGISTRACIJA SERVISA
• Moguće rešenje - Servisna instanca je sama odgovorna za prijavljivanje (registrovanje) kod registra servisa. Prilikom
pokretanja, u momentu kada je spremna da prihvati zahteve, servisna instanca se prijavljuje registru (saopštavajući svoju
adresu i port) što je čini vidljivom za proces pronalaženja. Klijent mora povremeno da obnovi registraciju čime se potvrđuje da
je još uvek aktivan (živ). Prilikom zaustavljanja servisna instanca se sama odjavljuje iz registra. Netflix Eureka koristi ovaj princip.
• Rezultat primene
• Dobre strane
- Instanca servisa zna svoje sopstveno stanje tako da jemoguće implementirati model stanja koji je detaljniji od prostog
UP/DOWN (STARTING, AVAILABLE, …)
• Loše strane
- Sam servis i servisni registar su jako spregnuti.
- Neophodno je implementirati kompletnu logiku za registraciju i odjavljivanje u svakom servisu (a to znači i u svakom
jeziku koji je korišćen za pisanje servisne komponente)
- Instanca servisa koja je pokrenuta, ali nije dostupna i sposobna za procesiranje zahteva vrlo često toga nije sama
svesna pa neće ni odraditi odjavu sa registra.
CROSS-CUTTING CONCERNS
MIKROSERVICES CHASSIS
• Kontekst u kome se koriste - Tokom razvoja aplikacije često se troši dosta vremena da se u sistem dodaju mehanizmi koji
obezbeđuju pomoćne funkcionalnosti, ali koji se moraju konfigurisati i povezati sa projektnim kodom.
• Konfigurisanje eksternih servisa (kredencijali, loakcije eksternih servisa - baza, message broker-a)
• Logovanje - konfigurisanje okvira za logovanje (log4j ili logback)
• Provera “zdravlja” komponenti - podešavanje monitoring servisa da može da prati rad određenih komponenti
• Metrika - podešavanje očitavanja raznih parametara koje omogućavaju merenje stanja aplikacije (utroška resursa,
performansi…)
• Praćenje eksternih pristupa
Podešavanje svega ovoga za veliku monolitnu aplikaciju čiji razvoj traje dugo je samo mali deo vremena koji će biti potrošen na
razvoj aplikacije, ali podešavanje svega ovoga pri razvoju neke mikroservisne arhitekture za svaki servis koji se razvija može
predstavljati neprihvatljivo veliki procenat uloženog truda u odnosu na razvoj samog rešenja.
• Problem - Kako obezbediti efikasno uključivanje ovakvih mehanizama u razvoj mikroservisa?
• Faktori koji utiču na izbor:
• Kreiranje mikroservisa trebalo bi biti lako i jednostavno i brzo.
• Neophodno je obezbediti podršku za neke od ovih mehanizama.
MIKROSERVICES CHASSIS
• Moguće rešenje - Za razvoj mikroservisne aplikacije treba koristiti neki razvojni
okvir koji pruža podršku za pomenute mehanizme.
Primeri: Java Spring Boot, Spring Cloud, Go kit…
• Rezultat primene
• Dobre strane
- Osnovna prednost je što se omogućava brz i jednostavan start razvoja
mikroservisne aplikacije.
• Loše strane
- Neophodno je imati odgovarajući okvir za svaki programski jezik koji se koristi
za razvoj mikroservisnih modula.
CROSS-CUTTING CONCERNS
EKSTERNALIZACIJA KONFIGURACIJA
• Kontekst u kome se koriste - Aplikacija tipično koristi jedan ili više eksternih servisa
(registar servisa, baza podataka, email server, ….)
• Problem - Kako obezbediti mogućnost da se isti servis pokrene u različitim okruženjima
bez potrebe da se konfiguracija ovih servisa modifikuje u samom kodu projekta?
• Faktori koji utiču na izbor:
• Servis se mora isporučiti sa podešenom konfiguracijom za pristup eksternim servisima.
• Servis mora biti moguće pokrenuti u različitim okruženjima, bez potrebe da se
modifikuje i rekompajlira.
• Različita okruženja koriste različite instance eksternih servisa (različite baze i
kredencijale za njih, testno orkuženje nasuprot produkcionom…)
CROSS-CUTTING CONCERNS
EKSTERNALIZACIJA KONFIGURACIJA
• Moguće rešenje - Eksternalizovati sve konfiguracione podatke, Prilikom pokretanja servis
učitava konfiguraciju iz nekog eksternog izvora (OS varijable, property fajlovi i sl…). Npr.
korisšćenje servisnog registra rešava problem pronalaženja u runtime-u odgovarajućeg
servisa, ali i konfiguraciju servisnog registra treba sačuvati u nekom eksternalizovanom obliku.
• Rezultat primene
• Dobre strane
- Servis je moguće pokrenuti u različitim okruženjima bez potrebe da se modifikuje ili
rekompajlira.
• Loše strane
- Kako osigurati da kada se aplikacija pokrene u novom okruženju konfiguracija sadrži
sve neophodne podatke.
API GATEWAY
• Moguće rešenje - Implementirati API Gateway koji je jedinstvena pristupna tačka za sve klijente. API
gateway može zahteve procesirati na dva načina:
- Neki od zahteva se samo proslede do odgovarajućih servisa.
- Druge zahteve obrađuje tako što na osnovu njih napravi više zahteva ka više različitih servisa.
Umesto da se pokuša obezbediti isti api za sve (one-size-fits-all), API gateway može “prikazati” različit
API za svaki tip klijenta. Na API gatewayu se mogu implementirati i sigurnosni mehanizmi.
• Rezultat primene
• Dobre strane
- Servis je moguće pokrenuti u različitim okruženjima bez potrebe da se modifikuje ili rekompajlira.
• Loše strane
- Kako osigurati da kada se aplikacija pokrene u novom okruženju konfiguracija sadrži sve
neophodne podatke.
API GATEWAY
• Moguće rešenje - Implementirati API Gateway koji je
jedinstvena pristupna tačka za sve klijente. API gateway može
zahteve procesirati na dva načina:
- Neki od zahteva se samo proslede do odgovarajućih
servisa.
- Druge zahteve obrađuje tako što na osnovu njih napravi
više zahteva ka više različitih servisa.
Umesto da se pokuša obezbediti isti api za sve (one-size-fits-
all), API gateway može “prikazati” različit API za svaki tip
klijenta. Na API gatewayu se mogu implementirati i sigurnosni
mehanizmi.