Микросервиси

С Википедије, слободне енциклопедије

Микросервиси су техника развоја софтвера - варијанта сервисно-оријентисаног архитектуралног (СОА) стила који структуира апликацију као колекцију лабаво повезаних сервиса. У микросервис архитектури, сервиси су ситно гранулирани, а протоколи су једноставни. Корист од разградње апликације на посебне, мање сервисе је у томе што се побољшава модуларност, апликација је лакша за разумевање, развој, тестирање и отпорнија је на ерозију архитектуре.[1] Она омогућава паралелизацију развоја тако што дозвољава мањим, аутономним тимовима да независно развијају, испоручују и скалирају сервисе.[2] Такође дозвољава да се индивидуални сервиси развијају кроз процес константног рефакторинга.[3] Архитектура заснована на микросервисима омогућава континуалну испоруку[1][4]

Детаљи[уреди | уреди извор]

Још увек не постоји индустријски консензус о карактеристикама микросервиса, а такође недостаје и званична дефиниција. Неке од карактеристика које се најчешће цитирају укључују:

Архитектура заснована на микросервисима:


Историја[уреди | уреди извор]

Током радионице софтвер архитеката одржане у околини Венеције у Мају 2011. коришћен је израз "микросервиси" да опише оно што су учесници видели као заједнички архитектонски стил који су многи од њих тада истраживали. У Мају 2012. та иста група је дошла до закључка да је "микросервис" најприкладнији назив. Џејмс Луис (Јамес Леwис) је неке од ових идеја представио у студији на конференцији "33рд Дегрее" у Кракову "Микросервиси - Јава, на Униx начин".[15] Адријан Кокрофт (Адриан Цоцкцрофт) из Нетфлиxа је описао овај приступ као "ситно гранулирани СОА", био је пионир овог стила на wеб нивоу, као и многи други поменути у овом тексту - Џо Валнес (Јое Wалнес), Ден Норт (Дан Нортх), Иван Бочер (Еван Боттцхер) и Грејем Текли (Грахам Тацклеy).[16]

Др. Питер Роџерс (Петер Родгерс) увео је термин "Микро-wеб-сервиси" током презентације на Wеб Сервицес Едге конференцији 2005. На слајду бр. 4 презентације износи тврдњу да су "Софтверске компоненте заправо Микро-wеб-сервиси".[17] Јувал Лови (Јувал Лöwy) је имао сличне идеје у вези класа као гранулираних сервиса, као следећи корак у еволуцији Мајкрософт архитектуре.[18][19][20] "Сервиси су састављени помоћу Униx-олике проточне обраде. Сервиси могу да позивају сервисе. Комплексни сервисни скупови су апстраковани иза једноставних УРИ интерфејса. Сваки сервис у било којој гранулираности може бити објављен". Он је описао како добро дизајнирана сервисна платформа "примењује архитектуралне принципе Wеб-а и Wеб сервиса заједно са Униx-оликим распоређивањем и проточном обрадом да би обезбедила радикалну флексибилност и унапређену једноставност обезбеђујући платформу за сервисно оријентисану архитектуру кроз ваше апликацијско окружење".[21] Дизајн, који је потекао из истраживачког пројекта Хјулет-Пакарда, има за циљ да направи код мање крхким, те да велике, комплексне софтверске системе учини робуснијим за промене.[22] Да би "Микро-wеб-сервиси" функционисали, морају се испитати и анализирати темељи архитектуралних стилова (попут СОА) и улога размене порука између софтверских компоненти да би се дошло до нове генералне рачунарске апстракције.[23] У овом случају можемо размишљати о ресурсно-оријентисаном рачунарству (РОЦ) као о генерализованој форми Wеб апстракције. Ако је Униx апстракција била "све је датотека", у РОЦ-у, све је "Микро-wеб-сервис". Може садржати информације, код или резултате израчунавања тако да сервис може бити како произвођач, тако и потрошач у симетричној и еволуирајућој архитектури.

Микросервиси су специјализација имплементације приступа за сервисно-оријентисана архитектуру (СОА), коришћена за израду независно испоручивих софтверских система.[24] Микросервис приступ је прва СОА реализација којој је следило увођење ДевОпс-а и постало је популарно за изградњу система са континуалном испоруком.[25]

Филозофија[уреди | уреди извор]

Филозофија микросервис архитектуре се суштински изједначава са Униx филозофијом "Ради једну ствар и ради је добро". Она је описана следећим:[26][27][28]

  • Сервиси су мали - ситно гранулирани да имају једну функцију.
  • Организациона култура мора да прихвати аутоматизацију тестирања и испоруке. Ово олакшава терет менаџменту и операцијама и омогућава различитим развојним тимовима да раде на независно испоручивим деловима кода.[29]
  • Култура и принципи дизајна морају прихватити неуспехе и грешке.
  • Сваки сервис је еластичан, отпоран, композитан, минималистички и комплетан.[28]

Језички приступ[уреди | уреди извор]

Језички приступ развоју микросервиса[30] се фокусиран је на избор програмског језика који лако може да представи микросервис као јединствени софтверски артифакт. Језик који је добро прилагођен микросервисима наводи програмера да размишља и програмира у стилу микросервиса од почетка уместо да стартује користећи другу програмерску парадигму, да би касније урадио рефакторинг завршеног програма како би исти могао бити испоручен као микросервис.[31] Програмски језик који претендује да испуни ову улогу је Јолие.[32][33] Једноставност Јолие програмског језика и његова једноставна испоручивост нашли су примену и у Интернет стварима и паметним кућама, где су микросервиси погодан архитектурални избор.[34][35]

Технологије[уреди | уреди извор]

Сваки микросервис може бити имплементиран у другом програмском језику и може да користи другачију инфраструктуру. Према томе, најважнији технолошки избор представља начин на који ће микросервиси да комуницирају између себе (синхроно, асинхроно, УИ интеграција) и протоколи који ће се користити за комуникацију (РЕСТ, размена порука, ...). У традиционалним системима, највећи број технолошких избора, попут програмског језика, утиче на цео систем. Према томе, избор технологија код микросервиса је посве друкчији.[36]

Критике[уреди | уреди извор]

Микросервис приступ је подлеже критикама за низ питања:

  • Сервиси формирају информативне баријере.[37]
  • Интер-сервисни позиви преко мреже имају већу цену у смислу мрежне латентности (кашњења) и обраде порука него време унутар-процесних позива у оквиру монолитних сервисних процеса.[6]
  • Тестирање и испорука је компликованија.[38]
  • Померање одговорности између сервиса је теже.[1] Оно може укључивати комуникацију између различитих тимова, поновно писање постојећих функционалности у другим програмским језицима или укалупљивање у другу инфраструктуру.[6]
  • Гледање величине сервиса као примарног структурног механизма може довести до превише сервиса, док би алтернатива у виду интерне модуларизације довела до једноставнијег дизајна.[39]

Когнитивно оптерећење[уреди | уреди извор]

Ова архитектура уводи додатну комплексност и нове проблеме које треба узети у обзир попут латентности мреже, формата порука, балансирања оптерећења и толеранције грешки.[40][38]

Комплексност монолитних апликација је само премештена на мрежу, али и даље постоји:

Можете је померити, али је и даље ту!

— Роберт Енет (Роберт Аннетт): Где је комплексност?[41]

Такође, апликација састављена од било ког броја микросервиса мора имати приступ својим респективним екосистемима који могу имати непотребну комплексност.[42] Ова врста комплексности може се редуковати стандардизовањем приступних механизама. Wеб као систем стандардизовао је приступни механизам задржавајући исти приступни механизам између апликација и браузера задњих 20 година. Према броју wеб страна које Гоогле индексира, wеб је порастао са 26 милиона страна 1998. на отприлике 60 билиона 2015. без потребе да се мења приступни механизам. Wеб је и сам пример како комплексност наслеђена из монолитног софтверског система може бити превазиђена.[43][44]

Наносервиси[уреди | уреди извор]

Превише уситњени микросервиси су критиковани као анти-узорак (анти-патерн), именовани од стране Арнона Ротем Гал Оза (Арнон Ротем-Гал-Оз) као наносервиси:

[А] наносервис је анти-узорак код кога је сервис превише уситњен. [А] наносервис је сервис чија цена комуникације превазилази њену корисност.[45][46]

Предложене алтернативе наносервисима укључују:

  • Паковање функционалности као софтверске библиотеке уместо као сервиса.
  • Комбиновање функционалности са другим функционалностима, стварајући значајније и корисније сервисе.
  • Рефакторинг система, премештајући функционалност у друге сервисе или редизајнирање система.

Види још[уреди | уреди извор]

Референце[уреди | уреди извор]

  1. ^ а б в г д ђ Цхен, Лианпинг (2018). Мицросервицес: Арцхитецтинг фор Цонтинуоус Деливерy анд ДевОпс. Тхе ИЕЕЕ Интернатионал Цонференце он Софтwаре Арцхитецтуре (ИЦСА 2018) (на језику: енглески). ИЕЕЕ. 
  2. ^ Рицхардсон, Цхрис. „Мицросервице арцхитецтуре паттерн”. мицросервицес.ио (на језику: енглески). Приступљено 19. 3. 2017. 
  3. ^ Цхен, Лианпинг; Али Бабар, Мухаммад (2014). Тоwардс ан Евиденце-Басед Ундерстандинг оф Емергенце оф Арцхитецтуре тхроугх Цонтинуоус Рефацторинг ин Агиле Софтwаре Девелопмент. Тхе 11тх Wоркинг ИЕЕЕ/ИФИП Цонференце он Софтwаре Арцхитецтуре(WИЦСА 2014) (на језику: енглески). ИЕЕЕ. 
  4. ^ церацм (4. 1. 2017). „Мицросервицес-басед арцхитецтурес енабле цонтинуоус деливерy/деплоyмент”. Евентуате.ИО (на језику: енглески). Архивирано из оригинала 20. 03. 2017. г. Приступљено 19. 3. 2017. 
  5. ^ Ницола Драгони, Саверио Гиаллорензо, Алберто Ллуцх Лафуенте, Мануел Маззара, Фабризио Монтеси, Руслан Мустафин, Лариса Сафина. „Мицросервицес: yестердаy, тодаy, анд томорроw” (ПДФ) (на језику: енглески). Приступљено 2. 5. 2017. 
  6. ^ а б в г д Мартин Фоwлер. „Мицросервицес” (на језику: енглески). Архивирано из оригинала 14. 02. 2018. г. Приступљено 19. 05. 2018. 
  7. ^ Неwман, Сам (2015). Буилдинг Мицросервицес (на језику: енглески). О'Реиллy Медиа. ИСБН 978-1491950357. 
  8. ^ Wолфф, Еберхард. Мицросервицес: Флеxибле Софтwаре Арцхитецтурес (на језику: енглески). ИСБН 978-0134602417. 
  9. ^ „Мицро-сервицес фор перформанце”. Ванилла Јава (на језику: енглески). Приступљено 19. 3. 2017. 
  10. ^ а б Надареисхвили, I., Митра, Р., МцЛартy, M., Амундсен, M., Мицросервице Арцхитецтуре: Алигнинг Принциплес, Працтицес, анд Цултуре, О’Реиллy 2016
  11. ^ „ИФС: Мицросервицес Ресоурцес анд Поситионс”. хср.цх (на језику: енглески). Приступљено 28. 12. 2016. 
  12. ^ Ницола Драгони, Сцхахрам Дустдар, Степхан Т. Ларсен, Мануел Маззара. „Мицросервицес: Мигратион оф а Миссион Цритицал Сyстем” (ПДФ) (на језику: енглески). Приступљено 2. 5. 2017. 
  13. ^ Ницола Драгони, Иван Ланесе, Степхан Тхордал Ларсен, Мануел Маззара, Руслан Мустафин, Лариса Сафина. „Мицросервицес: Хоw То Маке Yоур Апплицатион Сцале” (ПДФ) (на језику: енглески). Приступљено 2. 5. 2017. 
  14. ^ Мануел Маззара, Кевин Кханда, Руслан Мустафин, Вицтор Ривера, Лариса Сафина, Алберто Силлитти. „Мицросервицес Сциенце анд Енгинееринг” (ПДФ) (на језику: енглески). Приступљено 14. 11. 2017. 
  15. ^ Јамес Леwис (2012). „Мицро сервицес - Јава, тхе Униx Wаy” (на језику: енглески). Кракоw, Поланд. 
  16. ^ Јамес Леwис анд Мартин Фоwлер. „Мицросервицес” (на језику: енглески). 
  17. ^ Родгерс, Петер. „Сервице-Ориентед Девелопмент он НетКернел- Паттернс, Процессес & Продуцтс то Редуце Сyстем Цомплеxитy Wеб Сервицес Едге 2005 Еаст: ЦС-3”. ЦлоудЦомпутингЕxпо 2005 (на језику: енглески). СYС-ЦОН ТВ. Архивирано из оригинала 20. 5. 2018. г. Приступљено 3. 7. 2017. 
  18. ^ Лöwy, Јувал (октобар 2007). „Еверy Цласс а WЦФ Сервице”. Цханнел9, АРЦаст.ТВ (на језику: енглески). 
  19. ^ Лöwy, Јувал (2007). Программинг WЦФ Сервицес 1ст Едитион (на језику: енглески). стр. 543—553. 
  20. ^ Лöwy, Јувал (мај 2009). „Еверy Цласс Ас а Сервице”. Мицрософт ТецхЕд Цонференце, СОА206 (на језику: енглески). Архивирано из оригинала 30. 10. 2018. г. Приступљено 19. 05. 2018. 
  21. ^ Родгерс, Петер. „Сервице-Ориентед Девелопмент он НетКернел- Паттернс, Процессес & Продуцтс то Редуце Сyстем Цомплеxитy”. ЦлоудЦомпутингЕxпо (на језику: енглески). СYС-ЦОН Медиа. Архивирано из оригинала 7. 9. 2015. г. Приступљено 19. 8. 2015. 
  22. ^ Русселл, Перрy; Родгерс, Петер; Селлман, Роyстон (2004). „Арцхитецтуре анд Десигн оф ан XМЛ Апплицатион Платформ”. ХП Тецхницал Репортс (на језику: енглески). стр. 62. Архивирано из оригинала 09. 09. 2015. г. Приступљено 20. 8. 2015. 
  23. ^ Хитцхенс, Рон (децембар 2014). Сwаине, Мицхаел, ур. „Yоур Објецт Модел Суцкс”. ПрагПуб Магазине (на језику: енглески). Прагматиц Программерс: 15. 
  24. ^ Паутассо, Цесаре (2017). „Мицросервицес ин Працтице, Парт 1: Реалитy Цхецк анд Сервице Десигн”. ИЕЕЕ Софтwаре (на језику: енглески). 34 (1): 91—98. дои:10.1109/МС.2017.24. 
  25. ^ „Цонтинуоус Деплоyмент: Стратегиес”. јавацодегеекс.цом (на језику: енглески). Приступљено 28. 12. 2016. 
  26. ^ Луцас Краусе. Мицросервицес: Паттернс анд Апплицатионс (на језику: енглески). АСИН Б00ВЈ3НП4А. 
  27. ^ Луцас Краусе. „Пхилосопхy оф Мицросервицес?” (на језику: енглески). Архивирано из оригинала 12. 11. 2016. г. Приступљено 19. 05. 2018. 
  28. ^ а б Бугwадиа, Јим. „Мицросервицес: Фиве Арцхитецтурал Цонстраинтс” (на језику: енглески). Архивирано из оригинала 03. 03. 2016. г. Приступљено 19. 05. 2018. 
  29. ^ Ли, Рицхард. „Мицросервицес Ессентиалс фор Еxецутивес: Тхе Кеy то Хигх Велоцитy Софтwаре Девелопмент”. Датаwире (на језику: енглески). Датаwире, Инц. Приступљено 21. 10. 2016. 
  30. ^ Цлаудио Гуиди. „Wхат ис а мицросервице? (фром а лингуистиц поинт оф виеw)” (на језику: енглески). 
  31. ^ Цлаудио Гуиди, Иван Ланесе, Мануел Маззара, Фабризио Монтеси. „Мицросервицес: а Лангуаге-басед Аппроацх” (на језику: енглески). Приступљено 2. 5. 2017. 
  32. ^ Јолие Теам. „Висион оф мицросервицес револутион” (на језику: енглески). 
  33. ^ Фабризио Монтеси. „Программинг Мицросервицес wитх Јолие - Парт 1: Дата форматс, Проxиес, анд Wоркфлоwс.” (на језику: енглески). 
  34. ^ Дилсхат Саликхов, Кевин Кханда, Камилл Гусманов, Мануел Маззара, Николаос Мавридис. „Мицросервице-басед ИоТ фор Смарт Буилдингс” (на језику: енглески). Приступљено 9. 2. 2018. 
  35. ^ Камилл Гусманов, Кевин Кханда, Дилсхат Саликхов, Мануел Маззара, Николаос Мавридис. „Јолие Гоод Буилдингс: Интернет оф тхингс фор смарт буилдинг инфраструцтуре суппортинг цонцуррент аппс утилизинг дистрибутед мицросервицес” (на језику: енглески). Приступљено 9. 2. 2018. 
  36. ^ Wолфф, Еберхард. Мицросервицес - А Працтицал Гуиде (на језику: енглески). ИСБН 978-1717075901. 
  37. ^ Јан Стенберг (11. 8. 2014). „Еxпериенцес фром Фаилинг wитх Мицросервицес” (на језику: енглески). 
  38. ^ а б „Девелопинг Мицросервицес фор ПааС wитх Спринг анд Цлоуд Фоундрy” (на језику: енглески). 
  39. ^ Тилков, Стефан (17. 11. 2014). „Хоw смалл схоулд yоур мицросервице бе?”. инноq.цом (на језику: енглески). Приступљено 4. 1. 2017. 
  40. ^ Паутассо, Цесаре (2017). „Мицросервицес ин Працтице, Парт 2: Сервице Интегратион анд Сустаинабилитy”. ИЕЕЕ Софтwаре (на језику: енглески). 34 (2): 97—104. дои:10.1109/МС.2017.56. 
  41. ^ Роберт Аннетт. „Wхере ис тхе цомплеxитy?” (на језику: енглески). 
  42. ^ „БРАСС Буилдинг Ресоурце Адаптиве Софтwаре Сyстемс” (на језику: енглески). У.С. Говернмент. ДАРПА. 7. 4. 2015.  "Аццесс то сyстем цомпонентс анд тхе интерфацес бетwеен цлиентс анд тхеир апплицатионс, хоwевер, аре медиатед виа а нумбер оф офтен унрелатед мецханисмс, инцлудинг информаллy доцументед апплицатион программинг интерфацес (АПИс), идиосyнцратиц фореигн фунцтион интерфацес, цомплеx илл-ундерстоод модел дефинитионс, ор ад хоц дата форматс. Тхесе мецханисмс усуаллy провиде онлy партиал анд инцомплете ундерстандинг оф тхе семантицс оф тхе цомпонентс тхемселвес. Ин тхе пресенце оф суцх цомплеxитy, ит ис нот сурприсинг тхат апплицатионс тyпицаллy баке-ин манy ассумптионс абоут тхе еxпецтед бехавиор оф тхе ецосyстем тхеy интерацт wитх."
  43. ^ Алперт, Јессе; Хајај, Ниссан. „Wе кнеw тхе wеб wас биг”. Оффициал Гоогле Блог (на језику: енглески). Гоогле.цом. Приступљено 22. 8. 2015. 
  44. ^ „Тхе Сторy”. Хоw сеарцх wоркс (на језику: енглески). Гоогле.цом. Приступљено 22. 8. 2015. 
  45. ^ Сервицес, Мицросервицес, Наносервицес – ох мy! (језик: енглески), Арнон Ротем-Гал-Оз
  46. ^ Працтицал СОА: 1.1: Наносервицес (језик: енглески), Арнон Ротем-Гал-Оз, 2010

Литература[уреди | уреди извор]

Додатне информације[уреди | уреди извор]