{"id":30497,"date":"2021-11-10T08:11:19","date_gmt":"2021-11-10T07:11:19","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/mikroserwisy-nowa-jakosc-w-miedzynarodowych-projektach-it\/"},"modified":"2024-11-07T13:19:26","modified_gmt":"2024-11-07T12:19:26","slug":"mikroserwisy-nowa-jakosc-w-miedzynarodowych-projektach-it","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/mikroserwisy-nowa-jakosc-w-miedzynarodowych-projektach-it\/","title":{"rendered":"Mikroserwisy \u2013 czy to jeszcze rewolucja i nowa jako\u015b\u0107 czy ju\u017c standard w projektach?"},"content":{"rendered":"\n<div class=\"table-of-contents\">\n    <p class=\"title\">Id\u017a do:<\/p>\n    <ol>\n                    <li><a href=\"#Mikroserwisy-ich-popularnosc-rosnie\">1.  Mikroserwisy \u2013 ich popularno\u015b\u0107 ro\u015bnie<\/a><\/li>\n                    <li><a href=\"#Jak-architektura-mikroserwisow-odpowiada-dzis-na-potrzeby-rozwoju-systemow\">2.  Jak architektura mikroserwis\u00f3w odpowiada dzi\u015b na potrzeby rozwoju system\u00f3w?<\/a><\/li>\n                    <li><a href=\"#Bolaczki-monolitycznej-aplikacji\">3.  Bol\u0105czki monolitycznej aplikacji<\/a><\/li>\n                    <li><a href=\"#Zalety-wykorzystania-architektury-mikroserwisow\">4.  Zalety wykorzystania architektury mikroserwis\u00f3w<\/a><\/li>\n                    <li><a href=\"#Wady-mikroserwisow\">5.  Wady mikroserwis\u00f3w<\/a><\/li>\n                    <li><a href=\"#Mikrouslugi-a-podejscie-DDD\">6.  Mikrous\u0142ugi a podej\u015bcie DDD<\/a><\/li>\n                    <li><a href=\"#Mikroserwisy-w-praktyce-case-study\">7.  Mikroserwisy w praktyce \u2013 case study<\/a><\/li>\n                    <li><a href=\"#Podsumowujac-czy-architektura-mikroserwisowa-sprawdzi-sie-w-moim-projekcie\">8.  Podsumowuj\u0105c: czy architektura mikroserwisowa sprawdzi si\u0119 w moim projekcie?<\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"Mikroserwisy-ich-popularnosc-rosnie\">Mikroserwisy \u2013 ich popularno\u015b\u0107 ro\u015bnie<\/h2>\n\n\n\n<p>Poj\u0119cie architektury mikroserwisowej pojawi\u0142o si\u0119 po raz pierwszy na scenie IT w okolicach roku 2013. Od tego czasu jej popularno\u015b\u0107 wydaje si\u0119 porusza\u0107 tylko w jednym kierunku \u2013 w g\u00f3r\u0119! Potwierdzenie takiej hipotezy mo\u017cemy znale\u017a\u0107 na przyk\u0142ad w raporcie <a href=\"https:\/\/www.oreilly.com\/radar\/microservices-adoption-in-2020\" target=\"_blank\" rel=\"noopener\">\u201eMicroservices adoption\u201d<\/a> przygotowanym przez firm\u0119 O\u2019Reilly w roku 2020, z kt\u00f3rego wynika, \u017ce 77% firm, w kt\u00f3rych pracuj\u0105 respondenci, stosuj\u0105 tak\u0105 architektur\u0119. Jednocze\u015bnie a\u017c <strong>92% pytanych okre\u015bli\u0142o zastosowanie mikroserwis\u00f3w jako sukces<\/strong>&nbsp; z perspektywy oczekiwanych zysk\u00f3w, kt\u00f3re przynosi takie podej\u015bcie.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/JPro_2021.11.10_graphic_1.png\" alt=\"architektura mikroserwis\u00f3w\" class=\"wp-image-36081\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>W innej ankiecie przeprowadzonej przez<a href=\"https:\/\/www.ibm.com\/account\/reg\/us-en\/signup?formid=urx-49970\" target=\"_blank\" rel=\"noopener\"> IBM Market Development &amp; Insights<\/a> o opini\u0119 zapytanych zosta\u0142o ponad 1200 os\u00f3b z bran\u017cy IT, w tym dyrektorzy techniczni, mened\u017cerowie i programi\u015bci pracuj\u0105cy w firmach, kt\u00f3re stosuj\u0105 lub planuj\u0105 zastosowa\u0107 architektur\u0119 mikroserwisow\u0105.<\/p>\n\n\n\n<p>Wyniki s\u0105 jednoznaczne:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>87%<\/strong> u\u017cytkownik\u00f3w zgadza si\u0119, \u017ce wysi\u0142ek oraz koszty poniesione na wdro\u017cenie architektury mikroserwisowej op\u0142aca\u0142y si\u0119.<\/li>\n\n\n\n<li><strong>84%<\/strong> u\u017cytkownik\u00f3w zgadza si\u0119, \u017ce stosowanie mikroserwis\u00f3w u\u0142atwia prac\u0119 obecnym pracownikom oraz pozwala na przyci\u0105gni\u0119cie nowych.<\/li>\n\n\n\n<li><strong>77%<\/strong> u\u017cytkownik\u00f3w zgadza si\u0119, \u017ce mikroserwisy s\u0105 sprawdzonym i niezawodnym modelem tworzenia aplikacji.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/JPro_2021.11.10_graphic_2.png\" alt=\"architektura mikroserwis\u00f3w\" class=\"wp-image-36082\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Chocia\u017c jest to oczywi\u015bcie bardzo w\u0105tpliwa miara, z w\u0142asnej perspektywy programisty \u2013 s\u0105dz\u0105c po opisach projekt\u00f3w w ofertach pracy \u2013 m\u00f3g\u0142bym stwierdzi\u0107, \u017ce praktycznie wi\u0119kszo\u015b\u0107 projekt\u00f3w jest aktualnie tworzona w architekturze mikroserwisowej. Pomimo \u017ce na takie opisy musimy spojrze\u0107 z przymru\u017ceniem oka, wida\u0107, \u017ce <strong>mikroserwisy szybko staj\u0105 si\u0119 standardem w \u015bwiecie IT.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Jak-architektura-mikroserwisow-odpowiada-dzis-na-potrzeby-rozwoju-systemow\">Jak architektura mikroserwis\u00f3w odpowiada dzi\u015b na potrzeby rozwoju system\u00f3w?<\/h2>\n\n\n\n<p>Jednym z najwi\u0119kszych wyzwa\u0144 architektury mikroserwisowej jest silna zale\u017cno\u015b\u0107 od infrastruktury (serwerowej, sieciowej itp.), a co za tym idzie \u2013 zwi\u0119kszona potrzeba inwestycji w jej tworzenie. Jeszcze kilka lat temu by\u0142o to jednak du\u017co wi\u0119kszym wyzwaniem ni\u017c dzisiaj. W odpowiedzi na potrzeby nowego modelu powsta\u0142 szeroki wachlarz narz\u0119dzi, kt\u00f3re usprawniaj\u0105 prac\u0119 w rozproszonym \u015brodowisku.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Kontenery<\/strong> \u2013 na potrzeby <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/azure-serverless-workflow-orchestration\">orkiestracji<\/a> serwisami powsta\u0142y rozwi\u0105zania do zarz\u0105dzania, automatyzacji i skalowania aplikacji kontenerowych. Dzisiaj mo\u017cemy wybiera\u0107 spo\u015br\u00f3d wielu narz\u0119dzi, od prostych i niewymagaj\u0105cych, jak <strong>Docker Swarm,<\/strong> po zakrojone na najwi\u0119ksz\u0105 skal\u0119 rozwi\u0105zania enterprise, jak chyba najpopularniejszy <strong>Kubernetes<\/strong> lub <strong>Openshift. <\/strong>Dodatkowo dost\u0119pne s\u0105 rozwi\u0105zania chmurowe, jak <strong>AWS Fargate<\/strong> czy <strong>Google Cloud Run<\/strong>. Ka\u017cda z platform chmurowych oferuje r\u00f3wnie\u017c zarz\u0105dzane przez siebie serwisy Kubernetes, jak <strong>AWS EKS<\/strong> lub <strong>Google GKE.<\/strong> Wszystkie wymienione narz\u0119dzia w znacznym stopniu zmniejszaj\u0105 dzisiaj pr\u00f3g wej\u015bcia do projekt\u00f3w opartych na mikroserwisach pod wzgl\u0119dem infrastruktury serwerowej. Nale\u017cy jednak liczy\u0107 si\u0119 z kosztami ich utrzymywania.<\/li>\n\n\n\n<li><strong>Service Mesh<\/strong> \u2013 w odpowiedzi na wyzwania zwi\u0105zane z siln\u0105 zale\u017cno\u015bci\u0105 od infrastruktury sieciowej powsta\u0142o wiele rozwi\u0105za\u0144, z kt\u00f3rych najpopularniejszy jest obecnie <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/service-mesh-ale-komu-to-potrzebne\">model Service Mesh.<\/a> Tutaj znowu mamy wyb\u00f3r pomi\u0119dzy lekkimi rozwi\u0105zaniami jak <strong>Linkerd, Kuma czy Maesh<\/strong> a bardziej wymagaj\u0105cymi, jak <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/mikroserwisy-service-mesh-z-istio\"><strong>Istio<\/strong><\/a><strong>,<\/strong> oraz rozwi\u0105zaniami chmurowymi, jak <strong>AWS App Mesh.<\/strong> Jak wida\u0107, stworzenie infrastruktury sieciowej dla swojej aplikacji mikroserwisowej nie stanowi dzisiaj tak du\u017cego wyzwania jak kiedy\u015b, chocia\u017c sama zale\u017cno\u015b\u0107 od sieci jest i zawsze pozostanie wyzwaniem.<\/li>\n\n\n\n<li><strong>Narz\u0119dzia do monitorowania<\/strong> \u2013 cytuj\u0105c g\u0142\u00f3wnego in\u017cyniera firmy Lyft, Matta Kleina, kt\u00f3ry bra\u0142 udzia\u0142 w przej\u015bciu firmy z monolitu na mikroserwisy:<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>Inn\u0105 istotn\u0105 zmian\u0105, kt\u00f3ra pojawia si\u0119 wraz z rozwojem mikroserwis\u00f3w, jest obecno\u015b\u0107 sieci jako niestabilnego elementu, kt\u00f3rego nie da si\u0119 unikn\u0105\u0107. Ka\u017cdy programista musi w ko\u0144cu poradzi\u0107 sobie z problemami sieciowymi, zar\u00f3wno je\u015bli chodzi o transport, jak i o znacznie bardziej z\u0142o\u017cone narz\u0119dzia wymagane do debugowania.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p>Wspomniane wy\u017cej narz\u0119dzia wspieraj\u0105ce prac\u0119 i debugowanie aplikacji kontenerowej r\u00f3wnie\u017c prze\u017cy\u0142y rozkwit i dzisiaj mo\u017cemy wspiera\u0107 si\u0119 narz\u0119dziami do monitorowania, logowania i tracingu. Rozwi\u0105zania takie jak <strong>Prometheus, ELK<\/strong> czy <strong>AWS CloudWatch<\/strong> pozwalaj\u0105 sprosta\u0107 wyzwaniom utrzymywania lub debugowania aplikacji w rozproszonym \u015brodowisku.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Bolaczki-monolitycznej-aplikacji\">Bol\u0105czki monolitycznej aplikacji<\/h2>\n\n\n\n<p>Powstanie i ostateczny sukces mikroserwis\u00f3w nie wzi\u0105\u0142 si\u0119 oczywi\u015bcie z niczego. Jest to raczej odpowied\u017a na trudno\u015bci zwi\u0105zane z klasycznym podej\u015bciem, kt\u00f3re w wielu przypadkach przewa\u017caj\u0105 nad plusami podej\u015bcia monolitycznego.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Z perspektywy biznesu i u\u017cytkownik\u00f3w<\/h3>\n\n\n\n<p>Z perspektywy biznesowej mo\u017cemy wymieni\u0107 wiele wad, kt\u00f3re mog\u0105 wp\u0142yn\u0105\u0107 na do\u015bwiadczenia u\u017cytkownik\u00f3w i tym samym \u2013 na ostateczny sukces aplikacji:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wprowadzanie nawet najmniejszej zmiany wymaga reinstalacji ca\u0142ej aplikacji, co prowadzi do tymczasowej niedost\u0119pno\u015bci aplikacji, kt\u00f3ra w nowoczesnym \u015bwiecie jest praktycznie niedopuszczalna dla komercyjnych rozwi\u0105za\u0144.<\/li>\n\n\n\n<li>Poszczeg\u00f3lne komponenty systemu s\u0105 ze sob\u0105 \u015bci\u015ble powi\u0105zane, co oznacza, \u017ce nawet ma\u0142a zmiana w kodzie mo\u017ce negatywnie wp\u0142yn\u0105\u0107 na ca\u0142\u0105 aplikacj\u0119, a tym samym by\u0107 odczuwalna dla 100% jej u\u017cytkownik\u00f3w.<\/li>\n\n\n\n<li>Trudno\u015bci nastr\u0119cza skalowanie aplikacji w odpowiedzi na zmienny ruch. Niemo\u017cliwe jest te\u017c oczywi\u015bcie skalowanie poszczeg\u00f3lnych komponent\u00f3w systemu, a tylko ca\u0142ej aplikacji. W momencie przeci\u0105\u017cenia aplikacja mo\u017ce sta\u0107 si\u0119 niedost\u0119pna dla cz\u0119\u015bci u\u017cytkownik\u00f3w.<\/li>\n\n\n\n<li>Brak skalowalno\u015bci mo\u017ce si\u0119 przek\u0142ada\u0107 na wy\u017csze koszty utrzymania aplikacji.<\/li>\n\n\n\n<li>Spowolnienie pr\u0119dko\u015bci rozwoju i udost\u0119pniania nowej funkcjonalno\u015bci.<\/li>\n\n\n\n<li>Zdecydowanie zmniejszona mo\u017cliwo\u015b\u0107 zastosowania nowych technologii, kt\u00f3rych wprowadzenie by\u0142oby zbyt kosztowne i wymaga\u0142oby po\u015bwi\u0119cenia wi\u0119cej czasu przez programist\u00f3w (czy nawet zatrudnienia nowych).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Z perspektywy developera<\/h3>\n\n\n\n<p>Patrz\u0105c z perspektywy developera pracuj\u0105cego nad monolitem, mo\u017cemy dodatkowo wymieni\u0107 jeszcze kilka wad:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Spora baza kodu jest trudna w zrozumieniu, co od nowego programisty wymaga du\u017co czasu na poznanie i wdro\u017cenie. Spowalnia ona r\u00f3wnie\u017c codzienny cykl wprowadzania zmian i ich testowania (pami\u0119tajmy, \u017ce ka\u017cda, nawet drobna zmiana, mo\u017ce mie\u0107 wp\u0142yw na ca\u0142\u0105 aplikacj\u0119).<\/li>\n\n\n\n<li>Rozmyta odpowiedzialno\u015b\u0107 oraz brak poczucia w\u0142asno\u015bci kodu mo\u017ce wp\u0142ywa\u0107 demotywuj\u0105co na programist\u0119. W przeciwie\u0144stwie do ca\u0142kowitej w\u0142asno\u015bci cz\u0119\u015bci systemu, kt\u00f3rego czujemy si\u0119 autorem w przypadku tworzenia i utrzymywania konkretnych mikrous\u0142ug.<\/li>\n\n\n\n<li>Trudno\u015b\u0107 we wdro\u017ceniu nowych, interesuj\u0105cych technologii, poniewa\u017c ka\u017cda taka inicjatywa oznacza wprowadzenie zmian w ca\u0142ej bazie kodu aplikacji.<\/li>\n\n\n\n<li>Mniejsze mo\u017cliwo\u015bci rozwoju osobistego \u2013 w dynamicznie zmieniaj\u0105cym si\u0119 \u015bwiecie IT rozwa\u017cne jest, aby developer ci\u0105gle si\u0119 rozwija\u0142 i zawsze dysponowa\u0142 aktualn\u0105 wiedz\u0105. Praca nad aplikacj\u0105 monolityczn\u0105 mo\u017ce nie by\u0107 najlepszym krokiem, gdy\u017c nie ma si\u0119 styczno\u015bci z szerok\u0105 wiedz\u0105 wymagan\u0105 w \u015bwiecie mikroserwis\u00f3w.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Zalety-wykorzystania-architektury-mikroserwisow\">Zalety wykorzystania architektury mikroserwis\u00f3w<\/h2>\n\n\n\n<p>Przejd\u017amy teraz do mo\u017cliwo\u015bci i udogodnie\u0144 dost\u0119pnych przy wykorzystaniu mikroserwis\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Z perspektywy biznesu i u\u017cytkownik\u00f3w<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0141atwa redundancja element\u00f3w (czyli duplikowanie poszczeg\u00f3lnych komponent\u00f3w celem zapewnienia ci\u0105g\u0142o\u015bci pracy w razie awarii) i ich skalowanie, zgodnie z aktualnym zapotrzebowaniem, a tym samym wi\u0119ksza dost\u0119pno\u015b\u0107 systemu. Maleje tym samym ryzyko, \u017ce u\u017cytkownik nie b\u0119dzie m\u00f3g\u0142 skorzysta\u0107 z naszej aplikacji.<\/li>\n\n\n\n<li>Lu\u017ane powi\u0105zanie poszczeg\u00f3lnych serwis\u00f3w pozwala na niezale\u017cny rozw\u00f3j funkcjonalno\u015bci i szybsze ich wdro\u017cenie.<\/li>\n\n\n\n<li>Wdro\u017cenia mog\u0105 nast\u0119powa\u0107 niezale\u017cnie od siebie i praktycznie nie wp\u0142ywaj\u0105 na dost\u0119pno\u015b\u0107 ca\u0142o\u015bci systemu dla u\u017cytkownik\u00f3w.<\/li>\n\n\n\n<li>Mikroserwisy s\u0105 idealnie dostosowane do wykorzystania <a href=\"https:\/\/bulldogjob.pl\/articles\/1047-serverless-czym-jest-i-jak-dziala\" target=\"_blank\" rel=\"noopener\">architektury typu serverless<\/a>, kt\u00f3ra w odpowiednich zastosowaniach pozwoli zaoszcz\u0119dzi\u0107 na kosztach infrastruktury.<\/li>\n\n\n\n<li>\u0141atwiejsze testowanie ma\u0142ych komponent\u00f3w pozwala na unikni\u0119cie wyst\u0105pienia uci\u0105\u017cliwych dla u\u017cytkownik\u00f3w bug\u00f3w.<\/li>\n\n\n\n<li>Wdro\u017cenie nowych technologii, z korzy\u015bci\u0105 dla u\u017cytkownika, jest zdecydowanie \u0142atwiejsze i mo\u017ce odbywa\u0107 si\u0119 na poziomie poszczeg\u00f3lnych serwis\u00f3w.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Z perspektywy developer\u00f3w<\/h3>\n\n\n\n<p>Z zastosowaniem mikroserwis\u00f3w \u0142\u0105czy si\u0119 te\u017c kilka pozytyw\u00f3w dla pracuj\u0105cych z nimi developer\u00f3w:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pojedyncze us\u0142ugi s\u0105 \u0142atwiejsze w zrozumieniu, ich baza kodu jest te\u017c odpowiednio mniejsza. U\u0142atwia to prac\u0119 nad nowymi funkcjonalno\u015bciami i ich <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/quality-assurance-czyli-jak-zagwarantowac-jakosc-i-bezpieczenstwo-w-projektach-it\">testowaniem<\/a>, ale r\u00f3wnie\u017c usprawnia wdro\u017cenie nowej osoby w projekt.<\/li>\n\n\n\n<li>Ka\u017cdy z tw\u00f3rc\u00f3w danej us\u0142ugi czuje si\u0119 za ni\u0105 odpowiedzialny i dobrze zna domen\u0119 biznesow\u0105 powierzonej mu cz\u0119\u015bci.<\/li>\n\n\n\n<li>Mo\u017cliwo\u015b\u0107 eksperymentowania i poszerzania wiedzy o nowych technologiach przy tworzeniu nowych funkcjonalno\u015bci.<\/li>\n\n\n\n<li>Mniejsza koncentracja wiedzy w\u015br\u00f3d programist\u00f3w, co pozwala unikn\u0105\u0107 sytuacji, w kt\u00f3rej brak kluczowej osoby mo\u017ce okaza\u0107 si\u0119 powa\u017cnym problemem.<\/li>\n\n\n\n<li>Odpowiedzialno\u015b\u0107 za poszczeg\u00f3lne komponenty jest podzielona pomi\u0119dzy oddzielne zespo\u0142y, co pozwala na skuteczne dy\u017curowanie i szybk\u0105 reakcj\u0119 odpowiednich dla danego problemu os\u00f3b. <\/li>\n<\/ul>\n\n\n\n<p><strong>Przeczytaj tak\u017ce:<\/strong> <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/mikroserwisy-service-mesh-z-istio\">Mikroserwisy \u2013 Service Mesh z\u00a0Istio. Poznaj Istio i mo\u017cliwo\u015bci jakie daje.<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Wady-mikroserwisow\">Wady mikroserwis\u00f3w<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Z perspektywy biznesu<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pocz\u0105tkowy koszt wykonania aplikacji w architekturze rozproszonej mo\u017ce by\u0107 wy\u017cszy ni\u017c w przypadku monolitu. Podwy\u017cszony koszt to przede wszystkim wydatek na infrastruktur\u0119 oraz zaanga\u017cowanie odpowiednich specjalist\u00f3w DevOps, odpowiedzialnych za jej utrzymanie.<\/li>\n\n\n\n<li>Ryzyko, \u017ce realizacja aplikacji b\u0119dzie utrudniona lub nawet si\u0119 nie powiedzie, jest wi\u0119ksze z powodu nieod\u0142\u0105cznej z\u0142o\u017cono\u015bci takiej architektury.<\/li>\n\n\n\n<li>Wdro\u017cenie takiej architektury wymaga zmiany podej\u015bcia ca\u0142ego zespo\u0142u pracuj\u0105cego nad aplikacj\u0105. Decyzyjno\u015b\u0107 przesuwa si\u0119 od mened\u017cer\u00f3w i architekt\u00f3w w stron\u0119 poszczeg\u00f3lnych zespo\u0142\u00f3w. Z tak\u0105 autonomi\u0105 przychodzi wi\u0119ksza potrzeba skutecznej komunikacji i wsp\u00f3\u0142pracy pomi\u0119dzy zespo\u0142ami.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Z perspektywy developera<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Funkcjonalno\u015b\u0107 wymagaj\u0105ca bezwzgl\u0119dnej sp\u00f3jno\u015bci danych (transakcje bankowe itp.) jest trudniejsza do implementacji, poniewa\u017c wymaga dodatkowej koordynacji ca\u0142ego procesu, kt\u00f3ry mo\u017ce by\u0107 realizowany w kliku us\u0142ugach. W aplikacji monolitycznej taki problem by\u0142by rozwi\u0105zany za pomoc\u0105 transakcji na poziomie bazy danych.<\/li>\n\n\n\n<li>Debugowanie mo\u017ce by\u0107 utrudnione z powodu rozproszenia logiki w wielu us\u0142ugach, kt\u00f3rych logi mog\u0105 zawiera\u0107 wskaz\u00f3wki o b\u0142\u0119dzie. Dodatkowymi \u017ar\u00f3d\u0142ami b\u0142\u0119d\u00f3w mog\u0105 okaza\u0107 si\u0119 punkty komunikacji pomi\u0119dzy poszczeg\u00f3lnymi us\u0142ugami.<\/li>\n\n\n\n<li>Testowanie integracyjne nowych funkcjonalno\u015bci staje si\u0119 bardziej skomplikowane, poniewa\u017c nie ma mo\u017cliwo\u015bci przetestowania ca\u0142ego systemu rozproszonego.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Mikrouslugi-a-podejscie-DDD\"><strong>Mikrous\u0142ugi a podej\u015bcie DDD<\/strong><\/h2>\n\n\n\n<p>Wi\u0119kszo\u015b\u0107 korzy\u015bci p\u0142yn\u0105cych z zastosowania architektury rozproszonej jest efektem stworzenia prawid\u0142owego podzia\u0142u odpowiedzialno\u015bci poszczeg\u00f3lnych us\u0142ug i wyznaczenia sposobu komunikacji mi\u0119dzy nimi. Celem jest stworzenie silnej sp\u00f3jno\u015bci serwis\u00f3w i jednocze\u015bnie lu\u017anego powi\u0105zania pomi\u0119dzy nimi. Innymi s\u0142owy, rzeczy, kt\u00f3re zwykle wymagaj\u0105 wsp\u00f3lnej zmiany, powinny nale\u017ce\u0107 do jednego serwisu. Bez odpowiedniego podzia\u0142u zamiast korzy\u015bci, jak niezale\u017cna implementacja czy skalowalno\u015b\u0107 us\u0142ug, mo\u017cemy sko\u0144czy\u0107 z niewydajnym lub trudnym w utrzymaniu projektem. W praktyce jest to oczywi\u015bcie trudniejsze do zrealizowania ni\u017c w teorii \u2013 wst\u0119pne za\u0142o\u017cenia lub p\u00f3\u017aniejsze wymagania ulegaj\u0105 zmianie. Z tego powodu mo\u017cliwo\u015b\u0107 \u0142atwego wprowadzania zmian jest kolejnym krytycznym aspektem podczas projektowania ka\u017cdej aplikacji.<\/p>\n\n\n\n<p>Podej\u015bcie <strong>Domain-driven design (DDD)<\/strong> jest kluczowym narz\u0119dziem podczas projektowania architektury mikroserwisowej, tak przy rozbijaniu aplikacji monolitycznej, jak i tworzeniu aplikacji od zera.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Czym jest DDD? Czyli jak okie\u0142zna\u0107 system podczas tworzenia oprogramowania<\/h3>\n\n\n\n<p>DDD zapocz\u0105tkowane w ksi\u0105\u017cce Erica Evansa to zestaw zasad i wzorc\u00f3w, kt\u00f3rych celem jest wsparcie tworzenia aplikacji rozproszonych w oparciu o model domeny biznesowej b\u0119d\u0105cej tematem tworzonego oprogramowania. Zesp\u00f3\u0142 programist\u00f3w wraz z ekspertami domeny biznesowej tworz\u0105 model biznesowy w wypracowanym wsp\u00f3lnym j\u0119zyku, tzw. <em>ubiquitous language<\/em><em>. <\/em>Nast\u0119pnie stworzony model jest t\u0142umaczony na poszczeg\u00f3lne us\u0142ugi, ustalane s\u0105 protoko\u0142y komunikacji mi\u0119dzy nimi oraz tworzone s\u0105 zespo\u0142y odpowiedzialne za poszczeg\u00f3lne serwisy. W ca\u0142ym procesie&nbsp; pomocny mo\u017ce by\u0107 dodatkowo <a href=\"https:\/\/en.wikipedia.org\/wiki\/Event_storming\" target=\"_blank\" rel=\"noopener\">event storming<\/a>. Wzorce DDD maj\u0105 na celu u\u0142atwienie zrozumienia domeny i zale\u017cno\u015bci w niej zachodz\u0105cych. Od tego ju\u017c niedaleko do wyznaczenia granic w domenie, a tym samym wypracowania podzia\u0142u na us\u0142ugi zmapowane na domen\u0119 biznesow\u0105.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Mikroserwisy-w-praktyce-case-study\">Mikroserwisy w praktyce \u2013 case study<\/h2>\n\n\n\n<p>W istniej\u0105cej od wielu lat<a href=\"http:\/\/jcommerce.local\/klienci\/pionierskie-rozwiazanie-developerow-java-dla-e-commerce\" target=\"_blank\" rel=\"noopener\"> <\/a>platformie e-commerce pojawi\u0142o si\u0119 nowe wymaganie biznesowe, polegaj\u0105ce na masowym tworzeniu nowych ofert na bazie plik\u00f3w. Narz\u0119dzie mia\u0142o by\u0107 g\u0142\u00f3wnie stosowane przez sprzedawc\u00f3w oferuj\u0105cych szeroki asortyment, kt\u00f3rzy w ten spos\u00f3b mogliby usprawni\u0107 i zautomatyzowa\u0107 interakcj\u0119 z platform\u0105 w kwestii tworzenia i edycji swoich ofert.<\/p>\n\n\n\n<p>Wspomniana platforma, chocia\u017c zosta\u0142a stworzona jako monolit, od dawna jest ju\u017c rozbita i rozwijana w architekturze mikroserwisowej. Zadanie zlecone jednemu z zespo\u0142\u00f3w Inetum polega\u0142o wi\u0119c na stworzeniu nowej mikrous\u0142ugi (ostatecznie powsta\u0142o ich kilka) odpowiedzialnej za realizacj\u0119 tej funkcjonalno\u015bci. Prace nad rozwi\u0105zaniem post\u0119powa\u0142y bez ingerencji w reszt\u0119 us\u0142ug aplikacji, kt\u00f3rej rozw\u00f3j m\u00f3g\u0142 post\u0119powa\u0107 niezale\u017cnie. Jedynym punktem styku z reszt\u0105 platformy sta\u0142a si\u0119 inna mikrous\u0142uga, a szczeg\u00f3\u0142y komunikacji i implementacji zosta\u0142y ustalone pomi\u0119dzy zespo\u0142ami odpowiedzialnymi za obie us\u0142ugi. R\u00f3wnie\u017c decyzje o wyborze technologii (jak baza danych czy nawet j\u0119zyk programowania) pozostawa\u0142y w du\u017cej mierze w gestii zespo\u0142u. Po wdro\u017ceniu na produkcj\u0119 zesp\u00f3\u0142 Inetum jest w stanie dynamicznie skalowa\u0107 ilo\u015b\u0107 instancji us\u0142ugi adekwatnie do liczby zapyta\u0144 od u\u017cytkownik\u00f3w.<\/p>\n\n\n\n<p>Taka autonomia jest kluczowa przy rozwoju aplikacji, nad kt\u00f3r\u0105 kolektywnie pracuj\u0105 nawet setki zespo\u0142\u00f3w. Trudno sobie wr\u0119cz wyobrazi\u0107 skuteczne wdro\u017cenie takiej funkcjonalno\u015bci, gdyby cala platforma by\u0142a nadal monolitem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Podsumowujac-czy-architektura-mikroserwisowa-sprawdzi-sie-w-moim-projekcie\">Podsumowuj\u0105c: czy architektura mikroserwisowa sprawdzi si\u0119 w moim projekcie?<\/h2>\n\n\n\n<p>Odpowied\u017a na to pytanie musi by\u0107 niestety wymijaj\u0105ca \u2013 <strong>to zale\u017cy. <\/strong>Decyduj\u0105c si\u0119 na dany model, akceptujemy kompromis, czyli przyjmujemy go razem z jego mocnymi i s\u0142abymi stronami.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Gdy chcemy rozbi\u0107 monolit<\/h3>\n\n\n\n<p>Je\u017celi rozwa\u017camy rozbicie istniej\u0105cej aplikacji monolitycznej, decyzja jest mo\u017ce prostsza, zmotywowana wszystkimi bol\u0105czkami, kt\u00f3re nastr\u0119cza monolit. <strong>W tym przypadku jednym ze sprawdzonych podej\u015b\u0107 jest odcinanie mniejszych serwis\u00f3w z g\u0142\u00f3wnego bloku,<\/strong> a\u017c w ko\u0144cu nowe funkcjonalno\u015bci b\u0119d\u0105 mog\u0142y by\u0107 tworzone w ca\u0142kowitej izolacji, a mniejszy centralny monolit b\u0119dzie stopniowo wygaszany.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/JPro_2021.11.10_graphic_3.png\" alt=\"architektura mikroserwisowa ca\u0142ej aplikacji\" class=\"wp-image-36083\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Gdy tworzymy aplikacj\u0119 od podstaw<\/h3>\n\n\n\n<p>Je\u017celi jednak rozpoczynamy tworzenie aplikacji od zera, jednym z kluczowych wzgl\u0119d\u00f3w, na kt\u00f3rym mo\u017cemy oprze\u0107 decyzj\u0119, jest rozmiar docelowej aplikacji. W przypadku tworzenia MVP aplikacji, najwa\u017cniejsza jest szybko\u015b\u0107 dostarczenia funkcjonalno\u015bci kosztem innych priorytet\u00f3w. Zgodnie z zasad\u0105 <a href=\"https:\/\/martinfowler.com\/bliki\/Yagni.html\" target=\"_blank\" rel=\"noopener\">YAGNI<\/a> (<em>You Ain\u2019t Gonna Need It<\/em>) nie ma sensu inwestowa\u0107 w zastosowanie zbyt wyszukanych narz\u0119dzi, je\u015bli nie mamy pewno\u015bci, \u017ce aplikacja b\u0119dzie si\u0119 cieszy\u0107 odpowiednim poziomem zainteresowania.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/JPro_2021.11.10_graphic_4.png\" alt=\"architektura mikroserwis\u00f3w\" class=\"wp-image-36084\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Taka sytuacja przemawia wi\u0119c za zastosowaniem monolitu, kt\u00f3ry dopiero w dalszej fazie zostanie podzielony \u2013 ciekawym rozwi\u0105zaniem mo\u017ce by\u0107 zastosowanie architektury tzw. modularnego monolitu, w kt\u00f3rej funkcjonalno\u015bci rozbite s\u0105 na poszczeg\u00f3lne modu\u0142y tworzone w ramach jednej aplikacji.<\/strong><\/p>\n\n\n\n<p>Je\u015bli jednak wiemy, \u017ce rozmiary docelowej aplikacji uzasadniaj\u0105 wst\u0119pn\u0105 inwestycj\u0119, wtedy architektura mikroserwisowa jest jak najbardziej rozs\u0105dnym wyborem.<\/p>\n\n\n\n<p><strong>Przeczytaj tak\u017ce: <\/strong><a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/kim-jest-devops-i-jak-wspiera-projekty-it\/\" target=\"_blank\" data-type=\"URL\" data-id=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/kim-jest-devops-i-jak-wspiera-projekty-it\" rel=\"noreferrer noopener\"> Kim jest DevOps i jak wspiera projekty IT? <\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mikroserwisy s\u0105 odpowiedzi\u0105 na problemy zwi\u0105zane z tworzeniem i utrzymaniem monolitycznych system\u00f3w. W czasie, gdy aplikacje musz\u0105 by\u0107 stale rozwijane, a jednocze\u015bnie dost\u0119pne dla u\u017cytkownik\u00f3w, mikrous\u0142ugi staj\u0105 si\u0119 state-of-the-art w rozwoju oprogramowania. W jakich projektach si\u0119 sprawdz\u0105, a w kt\u00f3rych rozs\u0105dniej jest pozosta\u0107 przy konstrukcji monolitu?<\/p>\n","protected":false},"author":108,"featured_media":29422,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":50,"footnotes":""},"categories":[1,582],"tags":[614,566,597],"offering":[513],"class_list":["post-30497","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-technologie","tag-application-development","tag-devops","tag-trendy","offering-application-development"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30497","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\/108"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=30497"}],"version-history":[{"count":3,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30497\/revisions"}],"predecessor-version":[{"id":33830,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30497\/revisions\/33830"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/29422"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=30497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=30497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=30497"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=30497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}