Što su mikroservisi? Sljedeća softverska arhitektura

Gotovo svaki računalni sustav izvodi višestruke zadatke koristeći zajedničke resurse, a jedno od pitanja računalnog programiranja je koliko bi bitovi koda koji izvršavaju te zadatke trebali biti povezani jedni s drugima. Sve popularniji odgovor je koncept mikrousluge - malog, diskretnog dijela funkcionalnosti koji u interakciji s drugim mikrouslugama stvara veći sustav.

Iako osnovna ideja posjedovanja takvih diskretnih komponenata nije nova, način na koji su mikroservisi implementirani čini ih prirodnim temeljem obje moderne aplikacije temeljene na oblaku. Mikroservisi su također povezani s filozofijom devops, koja potiče brzo i kontinuirano uvođenje nove funkcionalnosti.

Što su mikroservisi?

"Mikro" u mikroservisima implicira da su to male aplikacije. To je ponekad istina, ali bolji način razmišljanja o njima je da bi trebali biti toliko veliki koliko je potrebno da bi učinili jednu određenu stvar ili riješili određeni problem. Taj bi problem trebao biti konceptualni, a ne tehnički. Kako Microsoft kaže, "Mikroservisi bi trebali biti dizajnirani prema poslovnim mogućnostima, a ne vodoravnim slojevima kao što su pristup podacima ili slanje poruka." Oni komuniciraju s drugim mikroservisima i vanjskim korisnicima putem relativno stabilnih API-ja kako bi stvorili veću aplikaciju.

Dakle, unutarnja funkcionalnost pojedine mikro usluge može se prilagoditi ili radikalno nadograditi bez utjecaja na ostatak sustava. To zauzvrat povezuje s načinom na koji devops trgovine nastoje raditi: Ako su posebne funkcije veće aplikacije segmentirane u diskretne, neovisno djelujuće dijelove koda, lakše je živjeti devopsovu mantru CI / CD-a (kontinuirana integracija i kontinuirana isporuka) . Također, dobro definirani API-ji olakšavaju automatsko testiranje mikro usluga.

Arhitektura mikrousluga nasuprot monolitnoj arhitekturi

Često ćete čuti da se o mikrouslugama govori u smislu "arhitekture mikrousluga ". Ova fraza obuhvaća ne samo same mikro usluge, već komponente za upravljanje i otkrivanje usluga, kao i API pristupnik koji upravlja komunikacijom između mikro usluga i vanjskog svijeta.

"Monolitna primjena" suprotno je onome što su mikroservisi. Retronim je za aplikaciju u kojoj se sav kôd nalazi u jednoj velikoj binarnoj izvršnoj datoteci. Kao što TechTarget objašnjava, monolitnu je aplikaciju teže prilagoditi i poboljšati. Ali budući da je izgrađen kao jedinstvena kohezivna aplikacija, ne zahtijeva toliko upravljanja kao arhitektura mikro usluga.

Ograničeni koncepti: Kako definirati mikro uslugu

Vratimo se na trenutak na našu raniju zapovijed da bi mikroservisi trebali učiniti jednu određenu stvar. To je lako reći, ali u praksi se funkcionalnost često isprepliće, a crtanje podjela teže je nego što izgleda. Analiza domene i dizajn vođen domenom teoretski su pristupi koji će vam pomoći da razdvojite svoj zadatak velike slike na pojedinačne probleme koje mikro usluga može riješiti. U tom procesu, navedeno je u osvjetljava niz blogu iz Microsofta, te stvoriti apstraktni model svoje poslovne domene, te u procesu otkriti omeđen kontekstima , koje grupiraju funkcionalnost koja u interakciji sa svijetom na specifičan način.

Na primjer, možda imate jedan ograničeni kontekst za otpremu, a drugi za račune. Fizički objekt iz stvarnog svijeta imao bi, naravno, i cijenu i mjesto koje treba, ali ograničeni konteksti predstavljaju specifične načine na koje vaša aplikacija razmišlja o tim objektima i komunicira s njima. Svaka mikrousluga trebala bi postojati u potpunosti u jednom ograničenom kontekstu, iako neki ograničeni konteksti mogu obuhvaćati više od jedne mikrousluge.

Mikroservisi nasuprot uslužno orijentirane arhitekture nasuprot web usluga

U ovom trenutku, ako ste IT stručnjak koji se već neko vrijeme bavi tom industrijom, možda mislite da vam sve ovo zvuči poznato. Ideja o malim pojedinačnim programima koji rade zajedno mogla bi vas podsjetiti i na SOA (arhitektura orijentirana na usluge) i na web usluge , dvije modne riječi iz vrtoglavih Web 2.0 dana 2000-ih. Iako u jednom smislu pod suncem doista nema ništa novo, postoje važne razlike između ovih koncepata i mikro usluga. Datamation ima dobru raščlambu razlika, ali evo kratke verzije:

  • U uslužno orijentiranoj arhitekturi, pojedinačne su komponente relativno usko povezane, često dijele sredstva poput pohrane i komuniciraju putem dijela specijaliziranog softvera koji se naziva poslovna sabirnica za pohranu . Mikroservisi su neovisniji, dijele manje resursa i komuniciraju putem lakših protokola. Vrijedno je napomenuti da su mikrousluge nastale iz SOA miljea, a ponekad se smatraju nekom vrstom SOA-e ili nasljednikom koncepta.
  • Web usluga je skup funkcionalnosti kojima se suočavaju javni i kojima druge aplikacije mogu pristupiti putem weba; vjerojatno najrasprostranjeniji primjer su Google Maps, koje bi web lokacija restorana mogla ugraditi kako bi pružila upute za kupce. Ovo je puno labavija veza nego što biste to vidjeli u arhitekturi mikrousluga.

Mikroservisna komunikacija

Krilatica koju ćete često čuti o arhitekturi mikroservisa jest da bi trebale sadržavati "pametne krajnje točke i glupe cijevi". Drugim riječima, mikroservisi bi trebali imati za cilj korištenje osnovnih i dobro uspostavljenih komunikacijskih metoda, a ne složene i uske integracije. Kao što je napomenuto, ovo je još jedna stvar koja razlikuje mikroservise od SOA-e.

Općenito, komunikacija između mikrousluga trebala bi biti asinkrona , u smislu da niti koda nisu blokirane čekajući odgovore. (I dalje je u redu koristiti sinkrone komunikacijske protokole poput HTTP-a, iako su asinkroni protokoli kao što je AMQP (Advanced Message Queuing Protocol) uobičajeni i u arhitekturama mikroservisa.) Ova vrsta labavog spajanja čini arhitekturu mikrousluga fleksibilnijom u slučaju kvara pojedinih komponenata ili dijelova mreže, što je ključna prednost.

Mikroservisi, Java i Spring Boot i Spring Cloud

Neki od prvih radova na mikroservisima nastali su u zajednici Java; Martin Fowler bio je rani zagovornik. Na Java konferenciji 2012. u Poljskoj održana je jedna od najvažnijih ranih prezentacija na tu temu, pod nazivom „Mikro usluge - Java, Unixov način.“ Preporuča se primjena načela koja su vodila razvoj prvih Unixovih aplikacija sedamdesetih godina („Napišite programi koji rade jedno i to dobro. Napišite programe za zajednički rad ") za razvoj Jave.

Kao rezultat ove povijesti, postoji puno Java okvira koji vam omogućuju izgradnju mikroservisa. Jedan od najpopularnijih je Spring Boot koji je posebno dizajniran za mikroservise; Pokretanje je prošireno Spring Cloudom, što, kao što i samo ime govori, omogućuje vam da te usluge rasporedite i u oblak. Pivotal Software, programer Springa, ima dobar vodič za početak razvoja mikroservisa pomoću ovih okvira.

Mikroservisi i spremnici: Docker, Kubernetes i šire

Osnovna tehnologija koja je najdalje krenula prema uvođenju mikro usluga u glavni tok su spremnici .  Spremnik je sličan primjerku VM-a, ali umjesto da uključuje cijeli samostalni OS, spremnik je samo izolirani korisnički prostor koji koristi jezgru operativnog sustava domaćina, ali inače kôd koji se izvršava unutar njega drži samostalnim. Spremnici su mnogo manji od primjeraka VM-a i lako ih je brzo implementirati, lokalno ili u oblaku, a mogu se okretati prema gore ili prema dolje kako bi odgovarali potražnji i dostupnim resursima.

Privlačnost spremnika za mikrousluge trebala bi biti očita: svaka pojedinačna mikrousluga može raditi u svom spremniku, što značajno smanjuje troškove upravljanja uslugama. Većina implementacija spremnika ima komplementarne alate za orkestraciju koji automatiziraju implementaciju, upravljanje, skaliranje, umrežavanje i dostupnost aplikacija temeljenih na spremnicima. Kombinacija malih mikro servisa koji se lako grade i spremnika koji se lako postavljaju omogućuje filozofiju devopsa. Postoji nekoliko implementacija koncepta spremnika, ali daleko najpopularniji je Docker, koji je obično uparen s Kubernetesom kao platforma za orkestraciju.

Proljeće, iako popularno, vezano je uz Java platformu. S druge strane, sustavi temeljeni na kontejnerima su poligloti: Bilo koji programski jezik koji OS podržava može se izvoditi u spremniku, što programerima daje veću fleksibilnost. Doista, velika je prednost mikroservisa u tome što se svaka pojedinačna usluga može napisati na bilo kojem jeziku koji ima najviše smisla ili s kojim programeri trebaju najviše. Zapravo, usluga bi se mogla potpuno obnoviti na novom jeziku bez utjecaja na sustav u cjelini, sve dok njezini API-ji ostaju stabilni. DZone ima članak koji raspravlja o prednostima i nedostacima Spring Cloud-a protiv Kubernetes-a za mikro usluge. 

Uzorci dizajna mikrousluga

Bez obzira na jezik koji upotrebljavate za razvoj mikrousluga, suočit ćete se s problemima s kojima su se drugi programeri već susretali. Obrasci dizajna su formalizirani, apstraktna rješenja za ponavljajuće se probleme u računalnim znanostima, a niz njih je posebno namijenjen mikrouslugama. Devopedia ima sjajan popis koji uključuje:

  • Registar usluga: za povezivanje klijenata s dostupnim primjercima mikro usluga
  • Automatski osigurač: kako bi se spriječilo opetovano pozivanje neuspjelih usluga
  • Rezervni: za pružanje alternative neuspješnoj usluzi
  • Prikolica: za pružanje pomoćnih usluga glavnom spremniku, kao što su bilježenje, sinkronizacija ili nadzor
  • Adapter: za standardizaciju ili normalizaciju sučelja između glavnog spremnika i vanjskog svijeta
  • Veleposlanik: povezati glavni spremnik s vanjskim svijetom, na primjer za proksiranje veza lokalnog hosta s vanjskim vezama

Mikroservisi i oblak : AWS i Azure

Kao što je gore spomenuto, jedna od prednosti upotrebe spremnika je ta što se oni lako mogu rasporediti u oblak, gdje su dostupni fleksibilni računski resursi, tako da možete maksimalno povećati učinkovitost svoje aplikacije. Kao što možete zamisliti, svi glavni dobavljači oblaka svi žele da koristite njihove platforme za pokretanje aplikacija temeljenih na mikroservisima. Za više informacija pogledajte resurse Amazona, Microsofta i Googlea.