{"id":31712,"date":"2018-05-30T03:00:00","date_gmt":"2018-05-30T01:00:00","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/szalenstwo-mikroserwisow\/"},"modified":"2024-11-07T15:01:34","modified_gmt":"2024-11-07T14:01:34","slug":"szalenstwo-mikroserwisow","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/szalenstwo-mikroserwisow\/","title":{"rendered":"Szale\u0144stwo mikroserwis\u00f3w"},"content":{"rendered":"\n<div class=\"table-of-contents\">\n    <p class=\"title\">Przejd\u017a do:<\/p>\n    <ol>\n                    <li><a href=\"#Mikroserwis-czyli-czy-rozmiar-ma-znaczenie\">1.  Mikroserwis, czyli czy rozmiar ma znaczenie<\/a><\/li>\n                    <li><a href=\"#Microserwis-vs-aplikacja-monolityczna\">2.  Microserwis vs aplikacja monolityczna<\/a><\/li>\n                    <li><a href=\"#Ograniczenia-architektury-mikroserwisowej\">3.  Ograniczenia architektury mikroserwisowej<\/a><\/li>\n                    <li><a href=\"#Bledne-zalozenia\">4.  B\u0142\u0119dne za\u0142o\u017cenia<\/a><\/li>\n                    <li><a href=\"#Mikroserwisy-czy-rozproszony-monolit\">5.  Mikroserwisy czy rozproszony monolit?<\/a><\/li>\n                    <li><a href=\"#Od-monolitu-do-mikroserwisow\">6.  Od monolitu do mikroserwis\u00f3w<\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p class=\"MsoNormal\">Na pocz\u0105tku nale\u017ca\u0142oby jednak znale\u017a\u0107 odpowied\u017a na jeszcze inne pytanie: sk\u0105d taka popularno\u015b\u0107 architektury mikroserwisowej? Odpowied\u017a wydaje si\u0119 dosy\u0107 prosta: programi\u015bci zazwyczaj nie przepadaj\u0105 za rozwojem i utrzymaniem du\u017cych, ci\u0119\u017ckich projekt\u00f3w, a idea mikroserwis\u00f3w zak\u0142ada rozw\u00f3j niezale\u017cnych, ma\u0142ych projekt\u00f3w, nic wi\u0119c dziwnego, \u017ce dla wielu z nich wydaje si\u0119 by\u0107 strza\u0142em w dziesi\u0105tk\u0119.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Mikroserwis-czyli-czy-rozmiar-ma-znaczenie\">Mikroserwis, czyli czy rozmiar ma znaczenie<\/h2>\n\n\n\n<p class=\"MsoNormal\">Ale co to w\u0142a\u015bciwie znaczy, \u017ce pojedynczy mikroserwis jest ma\u0142y? W Internecie mo\u017cna znale\u017a\u0107 wiele absurdalnych pomys\u0142\u00f3w na ten temat. Jedni uwa\u017caj\u0105, \u017ce mikroserwis powinien mie\u0107 nie wi\u0119cej ni\u017c tysi\u0105c linii kodu. Inni, \u017ce zesp\u00f3\u0142, kt\u00f3ry go tworzy, powinien by\u0107 w stanie go napisa\u0107, \u017cywi\u0105c si\u0119 przy tym jedynie trzema pizzami. Inny pomys\u0142 jest taki, \u017ce mikroserwis powinien by\u0107 na tyle ma\u0142y, \u017ceby mo\u017cna go przepisa\u0107 w ci\u0105gu jednego scrumowego sprintu, czyli oko\u0142o dw\u00f3ch tygodni. Ja osobi\u015bcie uwa\u017cam, \u017ce mikroserwis powinien by\u0107 tak ma\u0142y, jak to mo\u017cliwe i tylko tak du\u017cy, jak to jest absolutnie niezb\u0119dne.<\/p>\n\n\n\n<p class=\"MsoNormal\">Oczywi\u015bcie rozmiar to tylko jeden z aspekt\u00f3w, kt\u00f3ry opisuje mikroserwisy. Mikroserwis poza tym powinien cechowa\u0107 si\u0119 tak\u017ce pojedyncz\u0105 odpowiedzialno\u015bci\u0105, czyli by\u0107 zbudowany w oparciu o pojedyncz\u0105 domen\u0119 biznesow\u0105. Jego implementacja powinna by\u0107 ukryta, czyli komunikacja pomi\u0119dzy mikroseriwsami powinna si\u0119 odbywa\u0107 wy\u0142\u0105cznie w oparciu o ustalony kontrakt. Kolejne cechy to niezale\u017cno\u015b\u0107 wdra\u017cania oraz odporno\u015b\u0107 na awarie. Ta ostatnia cecha oznacza, \u017ce awaria jednego mikroserwisu nie powinna wp\u0142ywa\u0107 na pozosta\u0142e.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Microserwis-vs-aplikacja-monolityczna\">Microserwis vs aplikacja monolityczna<\/h2>\n\n\n\n<p class=\"MsoNormal\">Je\u015bli we\u017amiemy pod uwag\u0119 jedynie powy\u017csze cechy, mo\u017cemy doj\u015b\u0107 do pochopnego wniosku, \u017ce mikroserwisy w por\u00f3wnaniu do tradycyjnej, monolitycznej architektury, rzeczywi\u015bcie zawsze wypadaj\u0105 znacznie lepiej. Programi\u015bci dostaj\u0105 to, czego chcieli, ale i biznes powinien by\u0107 usatysfakcjonowany, poniewa\u017c dostaje skalowaln\u0105 i odporn\u0105 na awarie aplikacj\u0119. Niestety jest tak g\u0142\u00f3wnie w teorii, poniewa\u017c praktyka przynosi wiele problem\u00f3w i zagro\u017ce\u0144.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Ograniczenia-architektury-mikroserwisowej\">Ograniczenia architektury mikroserwisowej<\/h2>\n\n\n\n<p class=\"MsoNormal\">Najwi\u0119ksze wyzwanie zwi\u0105zane z architektur\u0105 mikroserwisow\u0105 dotyczy sp\u00f3jno\u015bci danych. W systemach rozproszonych nie jest mo\u017cliwe jednoczesne osi\u0105gni\u0119cie sp\u00f3jno\u015bci, dost\u0119pno\u015bci i odporno\u015bci na podzia\u0142, musimy zawsze dokona\u0107 wyboru dw\u00f3ch z po\u015br\u00f3d tych trzech cech. Je\u017celi za\u0142o\u017cymy, \u017ce w aplikacjach rozproszonych zawsze wyst\u0119puje podzia\u0142 sieci i odporno\u015b\u0107 na ni\u0105 musi by\u0107 zapewniona, to do wyboru pozostaje sp\u00f3jno\u015b\u0107 lub dost\u0119pno\u015b\u0107. W praktyce najcz\u0119\u015bciej wybierana jest dost\u0119pno\u015b\u0107 kosztem sp\u00f3jno\u015bci, co oznacza problemy dla biznesu, poniewa\u017c mo\u017ce wyst\u0119powa\u0107 czasowa niesp\u00f3jno\u015b\u0107 danych. Mo\u017cliwe jest r\u00f3wnie\u017c utrzymanie sp\u00f3jno\u015bci, ale bez gwarancji, \u017ce system b\u0119dzie zawsze dost\u0119pny w 100%.<\/p>\n\n\n\n<p><strong>Przeczytaj tak\u017ce: <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/service-mesh-ale-komu-to-potrzebne\/\">Wykorzystujesz mikroserwisy? Poznaj Service Mesh i\u00a0nowe mo\u017cliwo\u015bci, jakie daje!<\/a><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Bledne-zalozenia\">B\u0142\u0119dne za\u0142o\u017cenia<\/h2>\n\n\n\n<p class=\"MsoNormal\">Dodatkowo w dobie popularnych i og\u00f3lnodost\u0119pnych chmur obliczeniowych zbyt wiele os\u00f3b zapomina o komunikacji sieciowej i problemach, jakie mo\u017ce ona stwarza\u0107. Dwie aplikacje, kt\u00f3re si\u0119 ze sob\u0105 komunikuj\u0105, nie robi\u0105 tego w spos\u00f3b magiczny. W tej komunikacji trzeba uwzgl\u0119dni\u0107 co najmniej kilka zagro\u017ce\u0144, kt\u00f3re niestety zazwyczaj s\u0105 bagatelizowane. Najcz\u0119\u015bciej wyst\u0119puj\u0105ce b\u0142\u0119dne za\u0142o\u017cenia, dotycz\u0105ce komunikacji mi\u0119dzy aplikacjami, zosta\u0142y wskazane przez L. Petera Deutscha:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sie\u0107 jest niezawodna.<\/li>\n\n\n\n<li>Op\u00f3\u017anienie wynosi zero.<\/li>\n\n\n\n<li>Przepustowo\u015b\u0107 jest niesko\u0144czona.<\/li>\n\n\n\n<li>Sie\u0107 jest bezpieczna.<\/li>\n\n\n\n<li>Topologia si\u0119 nie zmienia.<\/li>\n\n\n\n<li>Jest jeden administrator.<\/li>\n\n\n\n<li>Koszt transportu wynosi zero.<\/li>\n\n\n\n<li>Sie\u0107 jest jednorodna.<\/li>\n<\/ul>\n\n\n\n<p class=\"MsoNormal\"><span style=\"text-indent: -18pt;\">Je\u017celi powy\u017csze b\u0142\u0119dne za\u0142o\u017cenia o sieci nie zostan\u0105 zweryfikowane i aplikacja rozproszona nie zostanie na nie odpowiednio przygotowana, to z du\u017cym prawdopodobie\u0144stwem problemy w komunikacji pomi\u0119dzy mikroserwisami pojawi\u0105 si\u0119 szybciej ni\u017c si\u0119 tego spodziewamy.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Mikroserwisy-czy-rozproszony-monolit\">Mikroserwisy czy rozproszony monolit?<\/h2>\n\n\n\n<p class=\"MsoNormal\">Jest jeszcze jeden cz\u0119sto pojawiaj\u0105cy si\u0119 problem. Jak napisa\u0142em na pocz\u0105tku tego artyku\u0142u, ka\u017cdy mikroserwis powinien by\u0107 zwi\u0105zany z pojedyncz\u0105 odpowiedzialno\u015bci\u0105, czyli by\u0107 zwi\u0105zany \u015bci\u015ble z okre\u015blon\u0105 domen\u0105 biznesow\u0105. Ale nowo tworzone systemy maj\u0105 to do siebie, \u017ce wymagania wzgl\u0119dem nich cz\u0119sto si\u0119 zmieniaj\u0105, co mo\u017ce powodowa\u0107 zamazywanie granicy pomi\u0119dzy poszczeg\u00f3lnymi mikroserwisami, poprzez migracj\u0119 wzajemnych odpowiedzialno\u015bci. Skutek jest taki, \u017ce system sk\u0142ada si\u0119 wprawdzie z wielu mikroserwis\u00f3w, ale ka\u017cdy z nich odpowiada za wszystko. Nie ma to oczywi\u015bcie nic wsp\u00f3lnego z aplikacj\u0105 mikroserwisow\u0105, powstaje natomiast rozproszony monolit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Od-monolitu-do-mikroserwisow\">Od monolitu do mikroserwis\u00f3w<\/h2>\n\n\n\n<p class=\"MsoNormal\">Celem tego artyku\u0142u nie by\u0142o przekonanie czytelnika do tego, \u017ce mikroserwisy s\u0105 dobre lub z\u0142e, ale u\u015bwiadomienie, jakie problemy mog\u0105 powodowa\u0107. A tak\u017ce tego, \u017ce przej\u015bcie z architektury monolitycznej na mikroserwisow\u0105 nie rozwi\u0105zuje z automatu wszystkich problem\u00f3w, a jedynie przenosi je w inne miejsce. Z drugiej jednak strony, je\u017celi podejdziemy do mikroserwis\u00f3w w spos\u00f3b odpowiedzialny i przemy\u015blany, to mo\u017ce si\u0119 to okaza\u0107 bardzo dobry wyb\u00f3r. Uwa\u017cam jednak, \u017ce w przypadku nowych projekt\u00f3w warto rozwa\u017cy\u0107 rozpocz\u0119cie od monolitycznej architektury i przej\u015bcie na mikroserwisow\u0105 po wst\u0119pnej fazie rozwoju aplikacji, kiedy g\u0142\u00f3wne wymagania nie b\u0119d\u0105 si\u0119 ju\u017c zmienia\u0107 tak cz\u0119sto, a granica pomi\u0119dzy domenami nie b\u0119dzie przesuwana. Zawsze bowiem \u0142atwiej b\u0119dzie nam wydzieli\u0107 domeny i okre\u015bli\u0107 granice w monolicie, czyli czym\u015b, co ju\u017c istnieje, ni\u017c dzieli\u0107 co\u015b, czego jeszcze nawet nie ma.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zainteresowanie mikroserwisami ro\u015bnie systematycznie od kilku lat. Czy s\u0105 one jednak rzeczywi\u015bcie panaceum na ca\u0142e z\u0142o, jak twierdz\u0105 niekt\u00f3rzy, czy te\u017c mo\u017ce nieumiej\u0119tne u\u017cyte potrafi\u0105 wyrz\u0105dzi\u0107 wi\u0119cej szkody ni\u017c po\u017cytku? W tym artykule postanowi\u0142em krytycznie spojrze\u0107 na temat mikroserwis\u00f3w i odpowiedzie\u0107 na powy\u017csze pytania.<\/p>\n","protected":false},"author":31,"featured_media":31713,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":9,"footnotes":""},"categories":[1,582],"tags":[568],"offering":[513],"class_list":["post-31712","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-technologie","tag-java-pl","offering-application-development"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31712","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/users\/31"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=31712"}],"version-history":[{"count":3,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31712\/revisions"}],"predecessor-version":[{"id":33920,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31712\/revisions\/33920"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/31713"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=31712"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=31712"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=31712"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=31712"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}