Mikroservisi su tehnika razvoja softvera - varijanta servisno-orijentisanog arhitekturalnog (SOA) stila koji struktuira aplikaciju kao kolekciju labavo povezanih servisa. U mikroservis arhitekturi, servisi su sitno granulirani, a protokoli su jednostavni. Korist od razgradnje aplikacije na posebne, manje servise je u tome što se poboljšava modularnost, aplikacija je lakša za razumevanje, razvoj, testiranje i otpornija je na eroziju arhitekture. Ona omogućava paralelizaciju razvoja tako što dozvoljava manjim, autonomnim timovima da nezavisno razvijaju, isporučuju i skaliraju servise. Takođe dozvoljava da se individualni servisi razvijaju kroz proces konstantnog refaktoringa. Arhitektura zasnovana na mikroservisima omogućava kontinualnu isporuku

Detalji Još uvek ne postoji industrijski konsenzus o karakteristikama mikroservisa, a takođe nedostaje i zvanična definicija. Neke od karakteristika koje se najčešće citiraju uključuju: Servisi u mikroservis arhitekturi (MSA) su najčešće procesi koji komuniciraju putem mreže da izvrše zadatke koristeći protokole koji nisu vezani za određeni tip tehnologije poput HTTP-a. Ipak, servisi mogu da koriste i druge mehanizme inter-procesne komunikacije poput deljene memorije. Servisi, takođe, mogu biti pokrenuti u okviru istog procesa, na primer, OSGi paketi. Servisi u mikroservis arhitekturi se mogu posebno isporučivati.Nadareishvili, I., Mitra, R., McLarty, M., Amundsen, M., Microservice Architecture: Aligning Principles, Practices, and Culture, O’Reilly 2016 Servisi su lako zamenjivi. Servisi su organizovani oko funkcionalnosti, npr. front-end korisnički interfejs, preporuke, logistika, naplata, itd. Servisi se mogu implementirati korišćenjem različitih programskih jezika, baza, hardverskih i softverskih okruženja, u zavisnosti šta od toga najviše odgovara za implementaciju. Servisi su mali veličinom, omogućena je razmena poruka, povezani su sadržajem, nezavisno razvijani, decentralizovani, kao i bildovani i izdavani pomoću automatskih procesa. Arhitektura zasnovana na mikroservisima: Prirodno nameće modularnu strukturu. Je proces kontinualne isporuke softvera. Izmena malog dela aplikacije zahteva ponovno bildovanje i isporuku samo jednog ili malog broja servisa. Pridržava se principa poput sitno granuliranog interfejsa (za servise koji se mogu nezavisno izdavati), poslovno orijentisan razvoj, arhitekture IDEAL računarstva u oblaku, poliglot programiranje i postojanost, isporuka jednostavnih kontejnera, decentralizovana kontinualna isporuka, kao i DevOps sa holističkim nadzorom servisa. Obezbeđuje karakteristike koje doprinose skalabilinosti.

Istorija Tokom radionice softver arhitekata održane u okolini Venecije u Maju 2011. korišćen je izraz "mikroservisi" da opiše ono što su učesnici videli kao zajednički arhitektonski stil koji su mnogi od njih tada istraživali. U Maju 2012. ta ista grupa je došla do zaključka da je "mikroservis" najprikladniji naziv. Džejms Luis (James Lewis) je neke od ovih ideja predstavio u studiji na konferenciji "33rd Degree" u Krakovu "Mikroservisi - Java, na Unix način". Adrijan Kokroft (Adrian Cockcroft) iz Netflixa je opisao ovaj pristup kao "sitno granulirani SOA", bio je pionir ovog stila na web nivou, kao i mnogi drugi pomenuti u ovom tekstu - Džo Valnes (Joe Walnes), Den Nort (Dan North), Ivan Bočer (Evan Bottcher) i Grejem Tekli (Graham Tackley).

Dr. Piter Rodžers (Peter Rodgers) uveo je termin "Mikro-web-servisi" tokom prezentacije na Web Services Edge konferenciji 2005. Na slajdu br. 4 prezentacije iznosi tvrdnju da su "Softverske komponente zapravo Mikro-web-servisi". Juval Lovi (Juval Löwy) je imao slične ideje u vezi klasa kao granuliranih servisa, kao sledeći korak u evoluciji Majkrosoft arhitekture. "Servisi su sastavljeni pomoću Unix-olike protočne obrade. Servisi mogu da pozivaju servise. Kompleksni servisni skupovi su apstrahovani iza jednostavnih URI interfejsa. Svaki servis u bilo kojoj granuliranosti može biti objavljen". On je opisao kako dobro dizajnirana servisna platforma "primenjuje arhitekturalne principe Web-a i Web servisa zajedno sa Unix-olikim raspoređivanjem i protočnom obradom da bi obezbedila radikalnu fleksibilnost i unapređenu jednostavnost obezbeđujući platformu za servisno orijentisanu arhitekturu kroz vaše aplikacijsko okruženje". Dizajn, koji je potekao iz istraživačkog projekta Hjulet-Pakarda, ima za cilj da napravi kod manje krhkim, te da velike, kompleksne softverske sisteme učini robusnijim za promene. Da bi "Mikro-web-servisi" funkcionisali, moraju se ispitati i analizirati temelji arhitekturalnih stilova (poput SOA) i uloga razmene poruka između softverskih komponenti da bi se došlo do nove generalne računarske apstrakcije. U ovom slučaju možemo razmišljati o resursno-orijentisanom računarstvu (ROC) kao o generalizovanoj formi Web apstrakcije. Ako je Unix apstrakcija bila "sve je datoteka", u ROC-u, sve je "Mikro-web-servis". Može sadržati informacije, kod ili rezultate izračunavanja tako da servis može biti kako proizvođač, tako i potrošač u simetričnoj i evoluirajućoj arhitekturi.

Mikroservisi su specijalizacija implementacije pristupa za servisno-orijentisana arhitekturu (SOA), korišćena za izradu nezavisno isporučivih softverskih sistema. Mikroservis pristup je prva SOA realizacija kojoj je sledilo uvođenje DevOps-a i postalo je popularno za izgradnju sistema sa kontinualnom isporukom.

Filozofija Filozofija mikroservis arhitekture se suštinski izjednačava sa Unix filozofijom "Radi jednu stvar i radi je dobro". Ona je opisana sledećim: Servisi su mali - sitno granulirani da imaju jednu funkciju. Organizaciona kultura mora da prihvati automatizaciju testiranja i isporuke. Ovo olakšava teret menadžmentu i operacijama i omogućava različitim razvojnim timovima da rade na nezavisno isporučivim delovima koda. Kultura i principi dizajna moraju prihvatiti neuspehe i greške. Svaki servis je elastičan, otporan, kompozitan, minimalistički i kompletan.

Jezički pristup Jezički pristup razvoju mikroservisa se fokusiran je na izbor programskog jezika koji lako može da predstavi mikroservis kao jedinstveni softverski artifakt. Jezik koji je dobro prilagođen mikroservisima navodi programera da razmišlja i programira u stilu mikroservisa od početka umesto da startuje koristeći drugu programersku paradigmu, da bi kasnije uradio refaktoring završenog programa kako bi isti mogao biti isporučen kao mikroservis. Programski jezik koji pretenduje da ispuni ovu ulogu je Jolie. Jednostavnost Jolie programskog jezika i njegova jednostavna isporučivost našli su primenu i u Internet stvarima i pametnim kućama, gde su mikroservisi pogodan arhitekturalni izbor.

Tehnologije Svaki mikroservis može biti implementiran u drugom programskom jeziku i može da koristi drugačiju infrastrukturu. Prema tome, najvažniji tehnološki izbor predstavlja način na koji će mikroservisi da komuniciraju između sebe (sinhrono, asinhrono, UI integracija) i protokoli koji će se koristiti za komunikaciju (REST, razmena poruka, ...). U tradicionalnim sistemima, najveći broj tehnoloških izbora, poput programskog jezika, utiče na ceo sistem. Prema tome, izbor tehnologija kod mikroservisa je posve drukčiji.

Kritike Mikroservis pristup je podleže kritikama za niz pitanja: Servisi formiraju informativne barijere. Inter-servisni pozivi preko mreže imaju veću cenu u smislu mrežne latentnosti (kašnjenja) i obrade poruka nego vreme unutar-procesnih poziva u okviru monolitnih servisnih procesa. Testiranje i isporuka je komplikovanija. Pomeranje odgovornosti između servisa je teže. Ono može uključivati komunikaciju između različitih timova, ponovno pisanje postojećih funkcionalnosti u drugim programskim jezicima ili ukalupljivanje u drugu infrastrukturu. Gledanje veličine servisa kao primarnog strukturnog mehanizma može dovesti do previše servisa, dok bi alternativa u vidu interne modularizacije dovela do jednostavnijeg dizajna.

Kognitivno opterećenje Ova arhitektura uvodi dodatnu kompleksnost i nove probleme koje treba uzeti u obzir poput latentnosti mreže, formata poruka, balansiranja opterećenja i tolerancije greški. Kompleksnost monolitnih aplikacija je samo premeštena na mrežu, ali i dalje postoji: Takođe, aplikacija sastavljena od bilo kog broja mikroservisa mora imati pristup svojim respektivnim ekosistemima koji mogu imati nepotrebnu kompleksnost. "Access to system components and the interfaces between clients and their applications, however, are mediated via a number of often unrelated mechanisms, including informally documented application programming interfaces (APIs), idiosyncratic foreign function interfaces, complex ill-understood model definitions, or ad hoc data formats. These mechanisms usually provide only partial and incomplete understanding of the semantics of the components themselves. In the presence of such complexity, it is not surprising that applications typically bake-in many assumptions about the expected behavior of the ecosystem they interact with." Ova vrsta kompleksnosti može se redukovati standardizovanjem pristupnih mehanizama. Web kao sistem standardizovao je pristupni mehanizam zadržavajući isti pristupni mehanizam između aplikacija i brauzera zadnjih 20 godina. Prema broju web strana koje Google indeksira, web je porastao sa 26 miliona strana 1998. na otprilike 60 biliona 2015. bez potrebe da se menja pristupni mehanizam. Web je i sam primer kako kompleksnost nasleđena iz monolitnog softverskog sistema može biti prevaziđena.

Nanoservisi Previše usitnjeni mikroservisi su kritikovani kao anti-uzorak (anti-patern), imenovani od strane Arnona Rotem Gal Oza (Arnon Rotem-Gal-Oz) kao nanoservisi:

Predložene alternative nanoservisima uključuju: Pakovanje funkcionalnosti kao softverske biblioteke umesto kao servisa. Kombinovanje funkcionalnosti sa drugim funkcionalnostima, stvarajući značajnije i korisnije servise. Refaktoring sistema, premeštajući funkcionalnost u druge servise ili redizajniranje sistema.

Vidi još Konvejev zakon DevOps Zablude distribuiranog računarstva Reprezentacioni prenos stanja (REST) Servisno-orijentisana arhitektura (SOA) Unix filozofija Samoodrživi sistemi Serverless računarstvo Web-orijentisana arhitektura (WOA)

Reference

Literatura

Dodatne informacije Microservices – Definition, Principles and Benefits S. Newman, Building Microservices – Designing Fine-Grained Systems, O’Reilly, 2015 E. Wolff, Microservices: Flexible Software Architecture , Addison-Wesley, 2016 E. Wolff, Microservices Primer: A Short Overview , Leanpub / Createspace, 2016 E. Wolff, Microservices - A Practical Guide , Leanpub / Createspace, 2018 E. Wolff, Microservices Recipes - Technology Overview , Leanpub / Createspace, 2017 I. Nadareishvili et al., Microservices Architecture – Aligning Principles, Practices and Culture, O’Reilly, 2016, http://transform.ca.com/rs/117-QWV-692/images/CA%20Technologies%20-%20OReilly%20Microservice%20Architecture%20eBook.pdf C: Richardson, Microservice architecture pattern language http://microservices.io/ SEI SATURN 2015 microservices workshop, https://github.com/michaelkeeling/SATURN2015-Microservices-Workshop Wijesuriya, Viraj Brian (2016-08-29) ''Microservice Architecture, Lecture Notes, University of Colombo School of Computing, Sri Lanka ''

Категорија:Inženjering softvera Категорија:Projektni uzorci