Mainstream stručnjak odgovara na vaša pitanja o mikroservisima

Mainstream stručnjak odgovara na vaša pitanja o mikroservisima – šta treba znati pre upuštanja u ovu avanturu?

Postoji dosta pitanja koje treba da postavite sebi pre nego što uopšte i krenete u avanturu zvanu razvoj aplikacije bazirane na mikroservisnoj arhitekturi.

Pretpostavljam da znate šta je aplikacija bazirana na mikroservisnoj arhitekturi – to je aplikacija koja je pravljena kao skup labavo vezanih servisa koji implementiraju funkcionalnosti aplikacije, a sami su nezavisno razvijani i nezavisno implementirani, komuniciraju preko mreže dobro definisanim i standardizovanim protokolom (obično HTTP).

Mikroservisi obezbeđuju enkapsulaciju funkcionalnosti i podataka koju ostatak aplikacije vidi kao jedinstvenu celinu bez zalaženja u to kako je ta celina implementirana i kako radi.

Vodite računa da je ovaj tekst pisan iz ugla nekog ko se bavi DevOps-om i DevSecOps-om, a dolazi iz Ops dela. Detalji vezani za korišćenje najbolje biblioteke ili okruženja za razvoj mikroservisa nisu predmet ovog teksta.


Napomena: U tekstu se izrazi ‘mikroservis’ i ‘servis’ se upotrebljavaju kao sinonimi. Izraz ‘mikroservis’ je pomalo pogrešan naziv jer implicira da postoji ‘servis’ koji je značajno veći u obimu od ‘mikroservisa’. U stvarnosti, ne postoji tačka gde ‘servis’ prelazi u ‘mikroservis’ i obrnuto.


Kako znati da li je mikroservis najbolji način za izgradnju aplikacije?

Mikroservisi donose niz prednosti pri pravljenju aplikacije:

  • Složenu aplikaciju možete razbiti na manje delove i onda te delove nezavisno i paralelno razvijati kao samostalne aplikacije. Naravno, prethodno je u fazi projektovanja potrebno definisati način na koji će mikroservisi pričati međusobno, ali nakon toga sama implementacija jednog mikroservisa je stvar tima koji radi na njemu – oni određuju algoritme, strukture podataka, koju i kakvu bazu će koristiti, u kojem jeziku će implementirati dati mikroservis i sl.
  • Mikroservisi se mogu nezavisno implementirati i ažurirati, najčešće bez uticaja na ostatak aplikacije, uključujući i kontinuiran rad ostatka aplikacije dok se dati mikroservis ažurira.
  • Razvoj celokupne aplikacije je ubrzan, implementacija izmena i novih funkcionalnosti je olakšan, automatizacija kroz DevOps/DevSecOps tehnologije je u osnovi mikroservisa.

No, ništa nije za džabe, pa tako ni mikroservisi. Ovakva arhitektura donosi i neke dodatne komplikacije koji obično postanu izvor problema:

  • Osnovna ideja mikroservisa je da se razvijaju nezavisno jedni od drugih, najčešće paralelno, od strane malih timova programera. No, mali timovi programera puta broj mikroservisa čini da na aplikaciji baziranoj na mikroservisima ipak radi veliki broj ljudi.
  • Mikroservisi se nezavisno pokreću jedan od drugog, što zahteva komunikaciju preko mreže. Komunikacija preko mreže je značajno sporija u odnosu na komunikaciju elemenata aplikacije bazirane na monolitnoj arhitekturi tako da uneseno intrinsično kašnjenje u komunikaciji može da značajno unazadi vašu aplikaciju.
  • Mikroservisi u teoriji onogućavaju princip jedinstvene odgovornosti (Single Responsibility Principle) koji je jedan od esencijalnih elemenata SOLID arhitekture. No, usitnjavanje postojećih servisa ili uvođenje novog servisa koji bi jedinstveno bio odgovoran za datu funkcionalnost lako može dovesti do nagomilavanja servisa i stvaranja komplikovane veze među njima koje onda povećavaju kompleksnost celog sistema.
  • Svaki mikroservis zahteva da bude izolovan i odvojen od ostalih mikroservisa, što značajno komplikuje implementaciju celog sistema.

Dakle, kako znati da li je mikroservisna arhitektura pravo rešenje za vas? Ako je vaša aplikacija inicijalno vrlo kompleksna, sa gomilom različitih funkcionalnosti i, možda i najvažnije, za koju očekujete da će rasti kako u širinu (dodavanjem novih funkcionalnosti) tako i po broju korisnika, onda ima smisla razmišljati o upotrebi mikroservisa u dizajnu vaše nove aplikacije.

Razlika između monolitne arhitekture i mikroservisa. dev.to

No, ako vaša aplikacija nije toliko kompleksna, imate mali tim i relativno ograničena sredstva za početak možda je bolje krenuti od monolitne arhitekture jer smanjuje troškove angažovanja većeg broja programera i inicijalne troškove eksploatacije. Ukoliko aplikacija krene da raste, onda će se pojaviti potreba za refaktorisanjem postojeće monolitne aplikacije u mikroservisnu arhitekturu, što se u praksi pokazalo kao bolja i jeftinija varijanta nego da se odmah krene u razvoj mikroservisne arhitekture.

Treba li manje firme i startapi da koriste mikroservise?

Ovo pitanje je vezano za prethodno – da li uopšte kretati sa mikroservisnom arhitekturom. Kao što sam rekao, sve zavisi šta će biti sa vašom aplikacijom u budućnosti. Ako pretpostavljate da će aplikacija sigurno rasti u širinu, non-stop dobijati nove funkcionalnosti i prepravljati postojeće, kao i da će postajati kritična za ceo biznis (što implicira da dauntajm bude minimalan) onda ima smisla krenuti sa mikroservisima.

No kao što sam rekao, iako svi startapi žele da kreiraju svoje servise/aplikacije tako da opslužuju globalno tržište, to se neće desiti sa većinom i onda je, zbog nižeg inicijalnog ulaganja, bolje krenuti sa monolitnom aplikacijom koja je dobro dizajnirana i koja može prilično dobro da skalira nagore i napolje, nego odmah ići sa mikroservisima. Ako bude sreće, u nekom trenutku će ograničenja monolitne arhitekture doći do izražaja u kom slučaju će biti potrebno refaktorisati aplikaciju u mikroservisnu arhitekturu. Ali, u tom slučaju će mala firma i startap već porasti dovoljno da više nisu mala firma i startap pa će moći da sebi priušte posao oko refaktorizacije.

Šta određuje idealnu veličinu mikroservisa?

Logika nalaže da se aplikacija razbije na osnovne servise koji primenjuju SRP. Dakle, servis mora da ima samo jedan razlog za izmenu. Primer: servis koji pravi i štampa izveštaje može biti menjan zbog toga što se sadržaj izveštaja mora promeniti ili što se format izveštaja mora promeniti. Teorija zahteva da u tom slučaju ovaj servis treba biti razbijen na dva manja servisa, jedan koji kreira sadržaj izveštaja i drugi koji zadati sadržaj formatira u traženi oblik.

Mikroservisi moraju biti ‘pametni’ jer se za veze među mikroservisima koriste ‘glupe’ cevi. Što je više servisa to je i više veza između njih koje onda postaju usko grlo aplikacije. Iz tog razloga, odluka gde ‘preseći’ i reći: ‘dosta je usitnjavanja’ je iskreno, na plećima glavnog arhitekte sistema i njegovom iskustvu. Na žalost, ne postoji neka formula koja mu može pomoći da donese svoju odluku.

Koja je uloga kontejnera u mikroservisima?

Svaki mikroservis treba biti izolovan, sa svojim sistemom za čuvanje podataka, koji treba da imaju mogućnost skaliranja nezavisno od ostatka aplikacije. To znači da mikroservis zahteva svoje izolovano okruženje koje se postiže nekom vrstom virtualne mašine. No, pošto su servisi uglavnom mali po obimu, korišćenje prave virtuelne mašine bi bilo preterano, kako sa stanovišta resursa koji zahtevaju tako i sa stanovišta brzine startovanja nove instance servisa kada se za to ukaže potreba.

Iz tog razloga najoptimalnije rešenje za implementaciju mikroservisa su kontejneri. Kontejneri obezbeđuju optimalno korišćenje resursa i brzinu reakcije, a sistemi za upravljanje kontejnerima mogu da obezbede neke operativne funkcionalnosti koje su neophodne mikroservisinim arhitekturama kao što su otkrivanje servisa (service discovery) i API gejtveji.

Dodatno, kontejneri obezbeđuju automatizaciju testiranja i implementacije (deployment) koja je esencijalna za mikroservisnu arhitekturu.

Kako se postiže bezbednost mikroservisa?

Mikroservisi donose dodatne bezbednosne izazove u odnosu na monolitnu arhitekturu jer, u osnovi, povećavaju površinu napada (attack surface) koja se mora braniti. Razdvajanje aplikacije na manje, nezavisne delove koji komuniciraju preko mreže jedni sa drugima donosi osnovni problem da mikroservis mora da pouzdano potvrdi ko je sa druge strane komunikacionog kanala. U slučaju monolitnih aplikacija taj problem ne postoji jer je komunikacija između delova aplikacije kompletno interna.

Ključna stvar za projektovanje aplikacija baziranih na mikroservisnoj arhitekturi je da se o bezbednosti sistema mora voditi računa još u fazi projektovanja. Potrebno je implementirati komunikacione kanale koji obezbeđuju da se strane koje komuniciraju mogu autentifikovati i autorizovati, a da to ipak ne poveća kompleksnost samog komunikacionog protokola. Potrebno je primeniti princip ‘odbrane po dubini’ (defense in depth) gde postoje slojevi zaštite oko pojedinih mikroservisa. DevSecOps alate je potrebno uključiti u tok kontinualnog razvoja mikroservisa kako bi se pojedini bagovi otkrili na vreme.

Zaključak

Ovaj članak bi trebalo da vam pomogne da odredite da li je isplativo uči u avanturu zvanu mikroservisna arhitektura, kao i da izbegnete neke glavne probleme u vezi implementacije mikroservisa. Kao što ste možda primetili, mikroservisna arhitektura nije idealno rešenje za sve probleme, ali je, u pravim prilikama, dobro rešenje koje vam može doneti dosta benefita.

Odgovori

Tvoja e-mail adresa neće biti objavljena.

Popularno

Gaming

Dušan i David prave društvene igre, a njihov studio Kerber Games napada tržište vredno skoro 20$ milijardi

Iako kultura igranja društvenih igara u Srbiji nije toliko velika, to bi vremenom moglo da se promeni zahvaljujući talentovanim timovima poput onog koji čini Kerber - 'board games' dizajn studio.

Startapi i poslovanje

Uvođenjem udela u vlasništvu kompanije povećavaju svoju konkurentnost – a motivacija zaposlenih se drastično uvećava

Prema podacima do kojih je došao Joberty, manje od 3% kompanija koje posluju na domaćem tržištu ima opciju da svojim zaposlenima omogući udeo u vlasništvu firme a ta opcija, kako kažu naši sagovornici, može napraviti veliku razliku.

Intervju

Milan Starčević je prvi inženjer iz Srbije koji je postao partner u kompaniji Zühlke

Nakon skoro osam godina provedenih u kompaniji Zühlke, Milan Starčević postao je partner. U nastavku teksta razgovaramo o njegovom karijernom putu koji je doveo do nove pozicije.

Propustili ste

Startapi i poslovanje

Kredium.rs klijentima pomaže da lakše dobiju stambeni kredit uz pomoć personalizovanih bankarskih ponuda

Potraga za stanovima i kreditima često ume da bude težak, naporan i dug proces. Ipak, digitalizacijom i novim alatima koji su nam dostupni online, sve ovo može da izgleda znatno jednostavnije. Rešenje ima i startap iz Srbije - Kredium.rs.

Startapi i poslovanje

Srpski Tenderly osigurao investiciju od $15.3M u okviru A runde, sledi izgradnja Ethereum platforme za developere

Glavni cilj Tenderly startapa je da poboljša način rada Ethereum programera i ubrza prihvatanje blockchain tehnologije.

Office Talks Podcast

Internet zajednica za 70.000 ljubitelja fudbala

Tema 57. epizode Office Talks podcasta bila je online klađenje ali i izgradnja internet zajednice ljubitelja fudbala i sporta kroz zanimljiv i kvalitetan sadržaj. O svemu tome smo razgovarali sa našim gostom Vladimirom Kečkešom, osnivačem popularnih Instagram stranica Burazzers.net i Engleski fudbal.

Karijere

HelloWorld ponovo organizuje istraživanje domaće tehnološke scene: IT-jevci, popunite anketu!

Sajt za IT zapošljavanje HelloWorld.rs trenutno sprovodi još jedno veliko istraživanje domaće IT scene.