Zainteresowanie mikroserwisami rośnie systematycznie od kilku lat. Czy są one jednak rzeczywiście panaceum na całe zło, jak twierdzą niektórzy, czy też może nieumiejętne użyte potrafią wyrządzić więcej szkody niż pożytku? W tym artykule postanowiłem krytycznie spojrzeć na temat mikroserwisów i odpowiedzieć na powyższe pytania.

Na początku należałoby jednak znaleźć odpowiedź na jeszcze inne pytanie: skąd taka popularność architektury mikroserwisowej? Odpowiedź wydaje się dosyć prosta: programiści zazwyczaj nie przepadają za rozwojem i utrzymaniem dużych, ciężkich projektów, a idea mikroserwisów zakłada rozwój niezależnych, małych projektów, nic więc dziwnego, że dla wielu z nich wydaje się być strzałem w dziesiątkę.

Mikroserwis, czyli czy rozmiar ma znaczenie

Ale co to właściwie znaczy, że pojedynczy mikroserwis jest mały? W Internecie można znaleźć wiele absurdalnych pomysłów na ten temat. Jedni uważają, że mikroserwis powinien mieć nie więcej niż tysiąc linii kodu. Inni, że zespół, który go tworzy, powinien być w stanie go napisać, żywiąc się przy tym jedynie trzema pizzami. Inny pomysł jest taki, że mikroserwis powinien być na tyle mały, żeby można go przepisać w ciągu jednego scrumowego sprintu, czyli około dwóch tygodni. Ja osobiście uważam, że mikroserwis powinien być tak mały, jak to możliwe i tylko tak duży, jak to jest absolutnie niezbędne.

Oczywiście rozmiar to tylko jeden z aspektów, który opisuje mikroserwisy. Mikroserwis poza tym powinien cechować się także pojedynczą odpowiedzialnością, czyli być zbudowany w oparciu o pojedynczą domenę biznesową. Jego implementacja powinna być ukryta, czyli komunikacja pomiędzy mikroseriwsami powinna się odbywać wyłącznie w oparciu o ustalony kontrakt. Kolejne cechy to niezależność wdrażania oraz odporność na awarie. Ta ostatnia cecha oznacza, że awaria jednego mikroserwisu nie powinna wpływać na pozostałe.

Microserwis vs aplikacja monolityczna

Jeśli weźmiemy pod uwagę jedynie powyższe cechy, możemy dojść do pochopnego wniosku, że mikroserwisy w porównaniu do tradycyjnej, monolitycznej architektury, rzeczywiście zawsze wypadają znacznie lepiej. Programiści dostają to, czego chcieli, ale i biznes powinien być usatysfakcjonowany, ponieważ dostaje skalowalną i odporną na awarie aplikację. Niestety jest tak głównie w teorii, ponieważ praktyka przynosi wiele problemów i zagrożeń.

Ograniczenia architektury mikroserwisowej

Największe wyzwanie związane z architekturą mikroserwisową dotyczy spójności danych. W systemach rozproszonych nie jest możliwe jednoczesne osiągnięcie spójności, dostępności i odporności na podział, musimy zawsze dokonać wyboru dwóch z pośród tych trzech cech. Jeżeli założymy, że w aplikacjach rozproszonych zawsze występuje podział sieci i odporność na nią musi być zapewniona, to do wyboru pozostaje spójność lub dostępność. W praktyce najczęściej wybierana jest dostępność kosztem spójności, co oznacza problemy dla biznesu, ponieważ może występować czasowa niespójność danych. Możliwe jest również utrzymanie spójności, ale bez gwarancji, że system będzie zawsze dostępny w 100%.

Błędne założenia

Dodatkowo w dobie popularnych i ogólnodostępnych chmur obliczeniowych zbyt wiele osób zapomina o komunikacji sieciowej i problemach, jakie może ona stwarzać. Dwie aplikacje, które się ze sobą komunikują, nie robią tego w sposób magiczny. W tej komunikacji trzeba uwzględnić co najmniej kilka zagrożeń, które niestety zazwyczaj są bagatelizowane. Najczęściej występujące błędne założenia, dotyczące komunikacji między aplikacjami, zostały wskazane przez L. Petera Deutscha:

  • Sieć jest niezawodna.
  • Opóźnienie wynosi zero.
  • Przepustowość jest nieskończona.
  • Sieć jest bezpieczna.
  • Topologia się nie zmienia.
  • Jest jeden administrator.
  • Koszt transportu wynosi zero.
  • Sieć jest jednorodna.

Jeżeli powyższe błędne założenia o sieci nie zostaną zweryfikowane i aplikacja rozproszona nie zostanie na nie odpowiednio przygotowana, to z dużym prawdopodobieństwem problemy w komunikacji pomiędzy mikroserwisami pojawią się szybciej niż się tego spodziewamy.

Mikroserwisy czy rozproszony monolit?

Jest jeszcze jeden często pojawiający się problem. Jak napisałem na początku tego artykułu, każdy mikroserwis powinien być związany z pojedynczą odpowiedzialnością, czyli być związany ściśle z określoną domeną biznesową. Ale nowo tworzone systemy mają to do siebie, że wymagania względem nich często się zmieniają, co może powodować zamazywanie granicy pomiędzy poszczególnymi mikroserwisami, poprzez migrację wzajemnych odpowiedzialności. Skutek jest taki, że system składa się wprawdzie z wielu mikroserwisów, ale każdy z nich odpowiada za wszystko. Nie ma to oczywiście nic wspólnego z aplikacją mikroserwisową, powstaje natomiast rozproszony monolit.

Od monolitu do mikroserwisów

Celem tego artykułu nie było przekonanie czytelnika do tego, że mikroserwisy są dobre lub złe, ale uświadomienie, jakie problemy mogą powodować. A także tego, że przejście z architektury monolitycznej na mikroserwisową nie rozwiązuje z automatu wszystkich problemów, a jedynie przenosi je w inne miejsce. Z drugiej jednak strony, jeżeli podejdziemy do mikroserwisów w sposób odpowiedzialny i przemyślany, to może się to okazać bardzo dobry wybór. Uważam jednak, że w przypadku nowych projektów warto rozważyć rozpoczęcie od monolitycznej architektury i przejście na mikroserwisową po wstępnej fazie rozwoju aplikacji, kiedy główne wymagania nie będą się już zmieniać tak często, a granica pomiędzy domenami nie będzie przesuwana. Zawsze bowiem łatwiej będzie nam wydzielić domeny i określić granice w monolicie, czyli czymś, co już istnieje, niż dzielić coś, czego jeszcze nawet nie ma.

Autorem wpisu jest:
Dariusz Zbyrad

Programista Java w firmie JCommerce. W codziennej pracy stawia na minimalizm, czysty kod i najnowsze technologie. Toleruje JavaScript, uwielbia górskie wycieczki i elektronikę, buduje czasem coś z niczego. Zakochany w analizie danych.

Dodaj komentarz

Skontaktuj się z nami

Chcesz dowiedzieć się więcej o naszych usługach? Napisz do nas – odpowiemy na każdą wiadomość.

Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma, w celach handlowych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma, w celach marketingowych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma w celach rekrutacyjnych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma na potrzeby przyszłych rekrutacji.
W związku z obowiązującymi przepisami dotyczącymi ochrony danych osobowych tj. Ustawą o ochronie danych osobowych z dnia 10 maja 2018 roku, jak również treścią Rozporządzenia Parlamentu Europejskiego i Rady (UE) 2016/679 z dnia 27 kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (RODO), informujemy, że: 1. Administratorem danych osobowych jest JCommerce Sp. z o.o. z siedzibą w Katowicach, ul. Ściegiennego 3, 40-114 Katowice (KRS: 00007393418).
2. Powyższe dane osobowe przetwarzane będą przez JCommerce Sp. z o.o. – w zależności od udzielonych przez Panią/Pana zgód (podstawa prawna przetwarzania: art. 6 ust. 1 pkt a) RODO):
• w celach handlowych,
• w celach marketingowych,
• w celach rekrutacyjnych;
• w celach przyszłych rekrutacji.
3. Podanie powyższych danych osobowych nie jest wymogiem ustawowym, umownym lub warunkiem zawarcia umowy. Nie jest Pan/Pani zobowiązany/a do podania powyższych danych osobowych, jednak brak ich podania uniemożliwi realizacje ww. celu.
4. Posiada Pan/ Pani prawo dostępu do treści swoich danych, w tym otrzymania ich kopii i ich sprostowania, usunięcia, ograniczenia przetwarzania, prawo do przenoszenia danych, prawo do sprzeciwu wobec przetwarzania, prawo do cofnięcia zgody w dowolnym momencie, jeśli została udzielona. Wycofanie zgody nie wpływa jednak na zgodność z prawem przetwarzania, którego dokonano na podstawie zgody przed jej wycofaniem; oświadczenie o cofnięciu zgody na przetwarzanie danych osobowych należy złożyć w siedzibie JCommerce Sp. z o.o. lub przesłać na adres mailowy zgody@jcommerce.pl. Cofnięcie zgody na przetwarzanie danych osobowych skutkuje brakiem możliwości realizacji ww. celów przetwarzania;
5. Dane osobowe są udostępniane przez JCommerce Sp. z o.o. upoważnionym pracownikom i osobom współpracującym z JCommerce Sp. z o.o. na podstawie umów cywilnoprawnych, przez których realizowany jest cel przetwarzania;
6. Wszelkie pytania dotyczące ochrony danych osobowych oraz realizacje przysługujących praw, prosimy kierować na adres odo@jcommerce.pl;
7. W zależności od udzielonej zgody, dane osobowe będą przetwarzane przez czas niezbędny do realizacji ww. celów przetwarzania. W przypadku wniesienia sprzeciwu, JCommerce Sp. z o.o. przestanie przetwarzać Pani/Pana dane w ww. celu, chyba że będzie w stanie wykazać, że w stosunku do tych danych istnieją ważne prawnie uzasadnione podstawy, które są nadrzędne wobec Pana/Pani interesów, praw i wolności, lub niezbędne do ewentualnego ustalenia, dochodzenia lub obrony roszczeń;
8. Nie przekazujemy Pani/Pana danych poza teren Europejskiego Obszaru Gospodarczego oraz do organizacji międzynarodowych.
9. Pani/Pana dane osobowe nie podlegają zautomatyzowanemu podejmowaniu decyzji, w tym profilowaniu.
10. Ma Pani/Pan prawo wniesienia skargi do organu nadzorczego gdy uzna Pan/Pani, iż przetwarzanie ww. danych osobowych narusza przepisy ogólnego rozporządzenia o ochronie danych osobowych z dnia 27 kwietnia 2016 r.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma, w celach handlowych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma, w celach marketingowych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma w celach rekrutacyjnych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma na potrzeby przyszłych rekrutacji.
W związku z obowiązującymi przepisami dotyczącymi ochrony danych osobowych tj. Ustawą o ochronie danych osobowych z dnia 10 maja 2018 roku, jak również treścią Rozporządzenia Parlamentu Europejskiego i Rady (UE) 2016/679 z dnia 27 kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (RODO), informujemy, że: 1. Administratorem danych osobowych jest JCommerce Sp. z o.o. z siedzibą w Katowicach, ul. Ściegiennego 3, 40-114 Katowice (KRS: 00007393418).
2. Powyższe dane osobowe przetwarzane będą przez JCommerce Sp. z o.o. – w zależności od udzielonych przez Panią/Pana zgód (podstawa prawna przetwarzania: art. 6 ust. 1 pkt a) RODO):
• w celach handlowych,
• w celach marketingowych,
• w celach rekrutacyjnych;
• w celach przyszłych rekrutacji.
3. Podanie powyższych danych osobowych nie jest wymogiem ustawowym, umownym lub warunkiem zawarcia umowy. Nie jest Pan/Pani zobowiązany/a do podania powyższych danych osobowych, jednak brak ich podania uniemożliwi realizacje ww. celu.
4. Posiada Pan/ Pani prawo dostępu do treści swoich danych, w tym otrzymania ich kopii i ich sprostowania, usunięcia, ograniczenia przetwarzania, prawo do przenoszenia danych, prawo do sprzeciwu wobec przetwarzania, prawo do cofnięcia zgody w dowolnym momencie, jeśli została udzielona. Wycofanie zgody nie wpływa jednak na zgodność z prawem przetwarzania, którego dokonano na podstawie zgody przed jej wycofaniem; oświadczenie o cofnięciu zgody na przetwarzanie danych osobowych należy złożyć w siedzibie JCommerce Sp. z o.o. lub przesłać na adres mailowy zgody@jcommerce.pl. Cofnięcie zgody na przetwarzanie danych osobowych skutkuje brakiem możliwości realizacji ww. celów przetwarzania;
5. Dane osobowe są udostępniane przez JCommerce Sp. z o.o. upoważnionym pracownikom i osobom współpracującym z JCommerce Sp. z o.o. na podstawie umów cywilnoprawnych, przez których realizowany jest cel przetwarzania;
6. Wszelkie pytania dotyczące ochrony danych osobowych oraz realizacje przysługujących praw, prosimy kierować na adres odo@jcommerce.pl;
7. W zależności od udzielonej zgody, dane osobowe będą przetwarzane przez czas niezbędny do realizacji ww. celów przetwarzania. W przypadku wniesienia sprzeciwu, JCommerce Sp. z o.o. przestanie przetwarzać Pani/Pana dane w ww. celu, chyba że będzie w stanie wykazać, że w stosunku do tych danych istnieją ważne prawnie uzasadnione podstawy, które są nadrzędne wobec Pana/Pani interesów, praw i wolności, lub niezbędne do ewentualnego ustalenia, dochodzenia lub obrony roszczeń;
8. Nie przekazujemy Pani/Pana danych poza teren Europejskiego Obszaru Gospodarczego oraz do organizacji międzynarodowych.
9. Pani/Pana dane osobowe nie podlegają zautomatyzowanemu podejmowaniu decyzji, w tym profilowaniu.
10. Ma Pani/Pan prawo wniesienia skargi do organu nadzorczego gdy uzna Pan/Pani, iż przetwarzanie ww. danych osobowych narusza przepisy ogólnego rozporządzenia o ochronie danych osobowych z dnia 27 kwietnia 2016 r.